我有一个C#桌面应用程序。
我不断获得相同大小和分辨率的jpeg图像。
在我上传到网络服务器之前,我会通过降低质量压缩图像。
这是降低质量的代码:
public byte[] SaveJpeg(Image img, int quality)
{
byte[] data = null;
// Encoder parameter for image quality
EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
// Jpeg image codec
ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, jpegCodec, encoderParams);
data = ms.ToArray();
img.Dispose();
}
return data;
}
private ImageCodecInfo GetEncoderInfo(string mimeType)
{
// Get image codecs for all image formats
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
// Find the correct image codec
for (int i = 0; i < codecs.Length; i++)
if (codecs[i].MimeType == mimeType)
return codecs[i];
return null;
}
//I call it thus...
byte[] reducedSize = SaveJpeg(LatestImage, 50L)
我发现字节/图像的大小可能会发生很大变化。我注意到当图像中有很多绿色并且白天是晴天时,压缩返回的字节数是深绿色图像的两倍。
有没有更好的方法来实现我想要实现的目标?也许使用不同的色彩空间?
欢迎任何建议。