翻转jpeg图像丢失质量

本文关键字:jpeg 图像 翻转 | 更新日期: 2023-09-27 18:24:00

我翻转一张图像(12M),发现图像大小增加到26M,图像格式变为png。我用图像格式将其保存为jpeg,但图像大小减少到2M。代码如下。

public void Flip(Bitmap map)
{  
   bmp.Save("d://image1.jpg") //12M
   RotateFlipType rft = RotateFlipType.Rotate180F
   bmp.RotateFlip(rft);
   bmp.Save("d://image2.jpg") //26M
   bmp.Save("d://image3.jpg",ImageFormat.Jpeg) //2M
}

如果我想让新图像与原始图像大小相同,我该怎么办?

我试图用EncoderParameters保存图像,但我无法从原始图像中获得有效的EncoderParameterList,我用图像工具打开image3.jpg,我发现它的质量是75(原始图像是100L),子采样是ON(原始图像关闭,我如何设置它)。

谢谢。

翻转jpeg图像丢失质量

除非使用无损JPEG翻转库,否则应检查原始JPEG文件的参数。使用这些作为输出参数。

具体地,采样(在SOF标记中)和量化表(DQT标记)应该相同以获得最佳结果。

有很多程序会转储JPEG流的内容,这样你就可以看到这些参数是什么。

在JPEG中,"质量"是一个完全没有意义的数字。这只是许多JPEG编码器用来选择量化表的简写。一个实现中的75数字可能与另一个实现完全不同。

试试这个:

var jgpEncoder = GetEncoder(ImageFormat.Jpeg);
var myEncoder = System.Drawing.Imaging.Encoder.Quality;
var myEncoderParameters = new EncoderParameters(1);
var myEncoderParameter = new EncoderParameter(myEncoder, 75L);
myEncoderParameters.Param[0] = myEncoderParameter;
bmp.Save(@"d://image2.jpg", jgpEncoder, myEncoderParameters);

另请参阅MSDN以获取参考