使用 .net c# 将图像从 jpg 转换为特定的 TIFF 格式
Using .net c# to convert image from jpg to a specific TIFF format
我正在尝试将图像发送到 AS-400,但它只接受 TIFF 图像。
我正在转换它们,但后来它抱怨
报错 "unrecognized tiff tags..." 前两个是 317 & 531
另外:“对于错误代码 X'8F0E' 和 X'8F0F',检测到不符合解压缩算法规则的位模式。进一步解压缩是不可能的。验证输入数据的数据完整性
流式传输并再次尝试请求。"
我有一个可用的 tiff 文件,这是它的详细信息:
我正在使用我修改过的 MSDN 代码。
下面的代码可以正常工作,但我现在需要在编码器中包含 1 个以上的参数。
Bitmap myBitmap;
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
// Create a Bitmap object based on a BMP file.
myBitmap = new Bitmap(@"f:\testFromBlob.jpg");
// Get an ImageCodecInfo object that represents the TIFF codec.
myImageCodecInfo = GetEncoderInfo("image/tiff");
//do the actual work
myEncoder = Encoder.Compression;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder,(long)EncoderValue.CompressionCCITT4);
myEncoderParameters.Param[0] = myEncoderParameter;
myBitmap.Save(@"f:\resultFromDotNet.tiff", myImageCodecInfo, myEncoderParameters);
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
我无法理解图像文件。
谁能告诉我如何进行与我的测试图像设置相匹配的转换?
我试过将位深度和压缩率都更改为 1,不确定,但我认为这两个都需要更改。
更新 - 使用 Magick 我可以使用
转换为工作格式
magick convert image01.jpg -compress Group4 tiff3.tiff
如果这有助于我走上 C#/.Net 的正确轨道
更新 2:上面的代码有效,但我需要知道如何更改多个参数而不是一个参数。我想那可能就是家 运行.
更新 3:我有多个参数在工作,将其张贴在这里以防对其他人有帮助。现在只需要等待客户进来,看看这是否适合他们!
此处供参考的是 link MS 文档
Bitmap myBitmap;
ImageCodecInfo myImageCodecInfo;
Encoder compressionEncoder;
Encoder colorDepthEncoder;
EncoderParameter compressionParameter;
EncoderParameter colorDepthParameter;
EncoderParameters myEncoderParameters;
// Create a Bitmap object based on a BMP file.
myBitmap = new Bitmap(@"f:\colorTest.jpg");
// Get an ImageCodecInfo object that represents the TIFF codec.
myImageCodecInfo = GetEncoderInfo("image/tiff");
//do the actual work
compressionEncoder = Encoder.Compression;
myEncoderParameters = new EncoderParameters(2);
compressionParameter = new EncoderParameter(compressionEncoder,(long)EncoderValue.CompressionCCITT4);
colorDepthEncoder = Encoder.ColorDepth;
colorDepthParameter = new EncoderParameter(colorDepthEncoder, 24L); //if needed this can be removed
myEncoderParameters.Param[0] = compressionParameter;
myEncoderParameters.Param[1] = colorDepthParameter;
myBitmap.Save(@"f:\resultFromDotNet1bit.tiff", myImageCodecInfo, myEncoderParameters);
在您的原始代码示例中 - 而不是 Encoder.ColorDepth,您可能希望将参数 Encoder.Compression 设置为 EncoderValue.CompressionCCITT4。
我正在尝试将图像发送到 AS-400,但它只接受 TIFF 图像。 我正在转换它们,但后来它抱怨
报错 "unrecognized tiff tags..." 前两个是 317 & 531 另外:“对于错误代码 X'8F0E' 和 X'8F0F',检测到不符合解压缩算法规则的位模式。进一步解压缩是不可能的。验证输入数据的数据完整性 流式传输并再次尝试请求。"
我有一个可用的 tiff 文件,这是它的详细信息:
我正在使用我修改过的 MSDN 代码。 下面的代码可以正常工作,但我现在需要在编码器中包含 1 个以上的参数。
Bitmap myBitmap;
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
// Create a Bitmap object based on a BMP file.
myBitmap = new Bitmap(@"f:\testFromBlob.jpg");
// Get an ImageCodecInfo object that represents the TIFF codec.
myImageCodecInfo = GetEncoderInfo("image/tiff");
//do the actual work
myEncoder = Encoder.Compression;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder,(long)EncoderValue.CompressionCCITT4);
myEncoderParameters.Param[0] = myEncoderParameter;
myBitmap.Save(@"f:\resultFromDotNet.tiff", myImageCodecInfo, myEncoderParameters);
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
我无法理解图像文件。 谁能告诉我如何进行与我的测试图像设置相匹配的转换?
我试过将位深度和压缩率都更改为 1,不确定,但我认为这两个都需要更改。
更新 - 使用 Magick 我可以使用
转换为工作格式magick convert image01.jpg -compress Group4 tiff3.tiff
如果这有助于我走上 C#/.Net 的正确轨道
更新 2:上面的代码有效,但我需要知道如何更改多个参数而不是一个参数。我想那可能就是家 运行.
更新 3:我有多个参数在工作,将其张贴在这里以防对其他人有帮助。现在只需要等待客户进来,看看这是否适合他们!
此处供参考的是 link MS 文档
Bitmap myBitmap;
ImageCodecInfo myImageCodecInfo;
Encoder compressionEncoder;
Encoder colorDepthEncoder;
EncoderParameter compressionParameter;
EncoderParameter colorDepthParameter;
EncoderParameters myEncoderParameters;
// Create a Bitmap object based on a BMP file.
myBitmap = new Bitmap(@"f:\colorTest.jpg");
// Get an ImageCodecInfo object that represents the TIFF codec.
myImageCodecInfo = GetEncoderInfo("image/tiff");
//do the actual work
compressionEncoder = Encoder.Compression;
myEncoderParameters = new EncoderParameters(2);
compressionParameter = new EncoderParameter(compressionEncoder,(long)EncoderValue.CompressionCCITT4);
colorDepthEncoder = Encoder.ColorDepth;
colorDepthParameter = new EncoderParameter(colorDepthEncoder, 24L); //if needed this can be removed
myEncoderParameters.Param[0] = compressionParameter;
myEncoderParameters.Param[1] = colorDepthParameter;
myBitmap.Save(@"f:\resultFromDotNet1bit.tiff", myImageCodecInfo, myEncoderParameters);
在您的原始代码示例中 - 而不是 Encoder.ColorDepth,您可能希望将参数 Encoder.Compression 设置为 EncoderValue.CompressionCCITT4。