SixLabors ImageSharp会生成巨大的图像文件

问题描述

我使用以下代码将JPG文件调整为200x240像素。随附的示例文件大小为900x600像素,只有84 kb。但是,当我使用ImageSharp保存调整大小的文件时,生成的图像为435 kb!为什么较小的图像具有较大的文件大小?

我注意到原始图像的位深度为24位,但是ImageSharp将其存储为32位。我该如何减少呢?

enter image description here

调整大小的图像:

enter image description here

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");

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...