翻转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文件的参数。使用这些作为输出参数。
具体地,采样(在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以获取参考