翻转jpeg图像丢失质量

时间:2014-09-23 14:19:36

标签: c# image jpeg flip lossless-compression

我翻转图像(12M),发现图像尺寸增加到26M,图像格式变为png。我用imageformat将它保存到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保存图像,但我无法从orignal图像中获取有效的EncoderParameterList,并且我通过图像工具打开image3.jpg,我发现它的质量是75(原始图像是100L),和子采样是ON(原始图像是OFF,我该如何设置)。

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

有许多程序会转储JPEG流的内容,以便您可以看到这些参数是什么。

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

答案 1 :(得分:1)

试试这个:

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以供参考