-2

我使用下面的代码将 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)
                                });
                            });
4

1 回答 1

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");
于 2020-10-04T04:49:51.800 回答