问题描述
我使用以下代码将JPG文件调整为200x240像素。随附的示例文件大小为900x600像素,只有84 kb。但是,当我使用ImageSharp保存调整大小的文件时,生成的图像为435 kb!为什么较小的图像具有较大的文件大小?
我注意到原始图像的位深度为24位,但是ImageSharp将其存储为32位。我该如何减少呢?
调整大小的图像:
var thumbImage = image.Clone(x => x.GetCurrentSize());
if (thumbImage.Width > 200)
{
thumbImage.Mutate(m =>
{
m.Resize(new ResizeOptions
{
Mode = ResizeMode.Min,Size = new Size(200,0)
});
});
解决方法
我花了一些时间弄清楚如何做到这一点,深度达到24位,我希望他们用更明显的参数扩展Save方法,无论如何这是代码。
image.Mutate(x => x
.Resize(new ResizeOptions
{
Mode = ResizeMode.Min,Size = new Size(240,200)
}));
Stream stream = new System.IO.FileStream("sample.png",FileMode.Create);
var pngEncoder = new SixLabors.ImageSharp.Formats.Png.PngEncoder();
pngEncoder.ColorType = SixLabors.ImageSharp.Formats.Png.PngColorType.Rgb;
image.SaveAsPng(stream,pngEncoder);
stream.Dispose();
如果另存为jpeg(就像这里的原始图像一样),则图像尺寸会变小,并且位深度将与源保持不变。
image.Save("sample.jpeg");