使用ImageSharp加载和保存不透明的8位PNG文件

时间:2018-09-19 14:10:32

标签: imagesharp

我正在尝试加载->直接处理字节数组->保存8位png图像。

我想使用ImageSharp将其速度与当前库进行比较,但是在他们的代码示例中,他们需要定义像素类型(它们使用Rgba32):

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;

// Image.Load(string path) is a shortcut for our default type. 
// Other pixel formats use Image.Load<TPixel>(string path))
using (Image<Rgba32> image = Image.Load("foo.jpg"))
{
    image.Mutate(x => x
         .Resize(image.Width / 2, image.Height / 2)
         .Grayscale());
    image.Save("bar.jpg"); // Automatic encoder selected based on extension.
}

我查看了像素类型:https://github.com/SixLabors/ImageSharp/tree/master/src/ImageSharp/PixelFormats

但是没有灰度8位像素类型。

1 个答案:

答案 0 :(得分:3)

this link起,没有Gray8像素格式,因为我们无法决定从Rgb转换时要使用哪种颜色模型(我们内部需要)。 ITU-R BT.709建议书似乎是一个明智的解决方案,因为这是png支持的功能,也是我们将图像保存为8位灰度png时使用的功能,因此它在我的TODO列表中。

1.0.0-beta0005

所以...当前,在解码图像时,您需要使用Rgb24Rgba32

更新。

https://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale开始,这已经成为可能!我们有两种新的像素格式。 Gray8Gray16仅携带像素的亮度分量。

using (Image<Gray8> image = Image.Load<Gray8>("foo.png"))
{
    image.Mutate(x => x
         .Resize(image.Width / 2, image.Height / 2));

    image.Save("bar.png");
}

注意。默认情况下,png编码器将以输入的颜色类型和位深度保存图像。如果要将图像编码为其他颜色类型,则需要使用PngEncoderColorType属性集来新建一个BitDepth实例。