.net SixLabors ImageSharp生成巨大的图像文件

qgelzfjb  于 2023-11-20  发布在  .NET
关注(0)|答案(2)|浏览(192)

我使用下面的代码将JPG文件大小调整为200 x240像素。所附的示例文件大小为900 x600像素,只有84 kb。但是,当我使用ImageSharp保存调整后的文件时,生成的图像为435 kb!为什么较小的图像文件大小较大?
我注意到原始图像的位深度是24位,但ImageSharp存储它的位深度是32位。我如何才能减少这一点?
x1c 0d1x的数据
调整大小的图像:


  1. var thumbImage = image.Clone(x => x.GetCurrentSize());
  2. if (thumbImage.Width > 200)
  3. {
  4. thumbImage.Mutate(m =>
  5. {
  6. m.Resize(new ResizeOptions
  7. {
  8. Mode = ResizeMode.Min,
  9. Size = new Size(200, 0)
  10. });
  11. });

字符串

g6ll5ycj

g6ll5ycj1#

我花了一些时间来弄清楚如何为24位深度做这件事,我希望他们扩展了保存方法更明显的参数,无论如何,这里是代码。

  1. image.Mutate(x => x
  2. .Resize(new ResizeOptions
  3. {
  4. Mode = ResizeMode.Min,
  5. Size = new Size(240,200)
  6. }));
  7. Stream stream = new System.IO.FileStream("sample.png", FileMode.Create);
  8. var pngEncoder = new SixLabors.ImageSharp.Formats.Png.PngEncoder();
  9. pngEncoder.ColorType = SixLabors.ImageSharp.Formats.Png.PngColorType.Rgb;
  10. image.SaveAsPng(stream, pngEncoder);
  11. stream.Dispose();

字符串
如果你保存为jpeg格式(就像你在这里的原始图像),你将得到更小的图像尺寸,位深度将保持与源代码相同。

  1. image.Save("sample.jpeg");

展开查看全部
fslejnso

fslejnso2#

我也遇到了同样的问题--当转换PNG文件时,生成的文件大小是原始文件的两倍(即使尺寸更小)。
我通过改变编码器的颜色类型来修复它:

  1. var encoder = new PngEncoder() { ColorType = PngColorType.Palette }

字符串
这使得文件大小变小了(看起来与尺寸的减少成了正确的比例)。我没有注意到图像质量有任何可察觉的变化。

相关问题