是否可以减少来自字节数组的图像大小

Bon*_*Kun 5 c# asp.net bytearray

我有一个包含jpeg图像的字节数组.我只是想知道是否可以减小它的尺寸?

编辑:好的.我承认我的错误.然后我的问题是如何降低图像质量来自字节数组.

Mar*_*age 14

请理解,没有免费的午餐.通过增加压缩来减小JPEG图像的大小也会降低图像的质量.但是,也就是说,您可以使用Image该类减小JPEG图像的大小.此代码假定inputBytes包含原始图像.

var jpegQuality = 50; 
Image image; 
using (var inputStream = new MemoryStream(inputBytes)) {
  image = Image.FromStream(inputStream);
  var jpegEncoder = ImageCodecInfo.GetImageDecoders() 
    .First(c => c.FormatID == ImageFormat.Jpeg.Guid); 
  var encoderParameters = new EncoderParameters(1); 
  encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, jpegQuality); 
  Byte[] outputBytes; 
  using (var outputStream = new MemoryStream()) { 
    image.Save(outputStream, jpegEncoder, encoderParameters);
    outputBytes = outputStream.ToArray(); 
  } 
}
Run Code Online (Sandbox Code Playgroud)

现在outputBytes包含使用不同JPEG质量的图像的重新压缩版本.

通过减小jpegQuality(应该在0-100范围内),您可以以降低图像质量为代价来增加压缩.有关Encoder.Quality更多信息,请参阅该字段.

这是一个示例,您可以看到如何jpegQuality影响图像质量.这是使用20,50和80压缩的相同照片jpegQuality.尺寸分别为4.99,8.28和12.9 KB.

JPEG质量样本图像

注意即使质量很高,文本也会变得"污迹化".这就是为什么你应该避免将JPEG用于具有均匀彩色区域的图像(在计算机上创建的图像/图表/图表).请改用PNG.对于照片,如果不降低质量,JPEG非常适合.