0

我翻转一个图像(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(原始图像关闭,我该如何设置)。

谢谢。

4

2 回答 2

3

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

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

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

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

于 2014-09-23T16:22:12.410 回答
1

Try this one:

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);

Also see MSDN for reference

于 2014-09-23T14:30:36.917 回答