【发布时间】:2020-02-18 18:39:12
【问题描述】:
我正在尝试将图像发送到 AS-400,它只接受 TIFF 图像。 我正在转换它们,但随后它抱怨
错误是抱怨“无法识别的 tiff 标签...”前两个是 317 和 531 另外:“对于错误代码X'8F0E'和X'8F0F',检测到不符合解压算法规则的位模式。无法进一步解压。验证输入数据的数据完整性 流并再次尝试请求。”
我正在使用我修改过的 MSDN 代码。 下面的代码是有效的,但我现在需要在编码器中有多个参数。
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 转换 image01.jpg -compress Group4 tiff3.tiff
如果这有助于我走上 C# / .Net 的正确轨道
更新 2:上面的代码正在运行,但我需要知道如何更改多个参数而不是一个。我认为这可能是本垒打。
更新 3:我有多个参数工作,将其发布在这里以防它帮助其他人。现在只需要等待客户进来看看这是否适合他们!
这里是 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);
【问题讨论】:
-
看起来您的样本可能有错误。如果您将参数设置为
EncoderValue.CompressionCCITT4,您将需要Encoder.Compression而不是Encoder.ColorDepth。另外,“坏”TIFF 的细节是什么样的? -
好收获。我在想我可能需要弄清楚如何处理多个参数(例如压缩和颜色深度)。但是您的提示确实解决了压缩问题!现在我只需要两个都得到
-
@wiz -- 如果您使用 ColorDepth vs Compression 写下关于我的提及,那将是公认的答案。这就是让我重回正轨所需要的一切,我们非常感谢!
-
太棒了 - 很高兴它有帮助。
-
刚刚注意到您的编辑显示使用 CCITT4 将颜色深度设置为 24。我相信 CCITT4 只支持 1 位色深。不确定它是否只是一个例子,或者它是否会导致未来的问题。