使用 .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 文档

https://docs.microsoft.com/en-us/dotnet/api/system.drawing.imaging.encoder.colordepth?view=netframework-4.8

            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。