我有一个代码,主要功能为压缩图片大小,在压缩原图片字节数为1965915,按以下代码压综后字节数为:566606;
Dim codecs() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders()
Dim ici As ImageCodecInfo = Nothing
Dim codec As ImageCodecInfo
Dim compressPic As New Bitmap(P)
Dim ep As EncoderParameters = New EncoderParameters()
For Each codec In codecs
If (codec.MimeType = "image/jpeg") Then
ici = codec
End If
Next
ep.Param(0) = New EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50)
P.Save(LJ, ici, ep)
compressPic.Dispose()
stmphoto.Dispose()
请问,EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50)中的50是怎么计算的,是字节数的50%,还是有其他计算方式,这个问题困惑了我好几天。
可以肯定的是,这个不是字节数的50%,具体是如何计算,算法是怎样的需要看这个类库的源码。
质量类别的有用值范围从 0 到 100。 指定的数字越低,压缩越高,因此图像质量越低。 零会提供最低质量的图像,这里的50只是代表一个刻度值而已,是相较于最高采样率的50%
源于JPEG的压缩方式主要有四种 ,其中一种是基于空间DPCM的无损压缩,另外三种是基于DCT的有损压缩。