使用 Image Sharp 保存两种颜色索引 (1bpp) PNG
Saving two colour indexed (1bpp) PNG with Image Sharp
我在 ASP.Net 核心项目中使用 Image Sharp,现在需要为只能处理 2 个颜色索引 PNG 图像的设备准备 PNG 图像。
如果我使用下面的代码,那么图像将保存为调色板 2 彩色图像,但结果是损坏的,在我看来没有发生像素打包。
private void ConvertToMonoPng(Stream stream, string fileName)
{
Image<Rgba32> image = Image.Load(fileName);
var enc = new PngEncoder();
enc.CompressionLevel = PngCompressionLevel.Level9;
enc.ColorType = PngColorType.Palette;
enc.BitDepth = PngBitDepth.Bit1;
image.Save(stream, enc);
image.Dispose();
}
结果是:
源图片
输出图像
我知道 ImageSharp 库目前不支持内存中的子字节打包像素,但由于 PNGEncoder 中似乎有一些支持,我希望支持保存单色 PNG,我'我只是做错了什么。
从 build 1.0.0-dev001921 开始,现在可以做到这一点。我添加了对 1,2 和 4 位编码的支持,以配合现有的 8 位和 16 位编码。
您可以使用以下命令通过夜间 MyGet 提要安装包。
PM> Install-Package SixLabors.ImageSharp -Version 1.0.0-dev001921 -Source
https://www.myget.org/F/sixlabors/api/v3/index.json
这是输出。
1 位调色板
2 位调色板
4 位调色板
1 位灰度
2位灰度
4 位灰度
我在 ASP.Net 核心项目中使用 Image Sharp,现在需要为只能处理 2 个颜色索引 PNG 图像的设备准备 PNG 图像。
如果我使用下面的代码,那么图像将保存为调色板 2 彩色图像,但结果是损坏的,在我看来没有发生像素打包。
private void ConvertToMonoPng(Stream stream, string fileName)
{
Image<Rgba32> image = Image.Load(fileName);
var enc = new PngEncoder();
enc.CompressionLevel = PngCompressionLevel.Level9;
enc.ColorType = PngColorType.Palette;
enc.BitDepth = PngBitDepth.Bit1;
image.Save(stream, enc);
image.Dispose();
}
结果是:
源图片
输出图像
我知道 ImageSharp 库目前不支持内存中的子字节打包像素,但由于 PNGEncoder 中似乎有一些支持,我希望支持保存单色 PNG,我'我只是做错了什么。
从 build 1.0.0-dev001921 开始,现在可以做到这一点。我添加了对 1,2 和 4 位编码的支持,以配合现有的 8 位和 16 位编码。
您可以使用以下命令通过夜间 MyGet 提要安装包。
PM> Install-Package SixLabors.ImageSharp -Version 1.0.0-dev001921 -Source
https://www.myget.org/F/sixlabors/api/v3/index.json
这是输出。
1 位调色板
2 位调色板
4 位调色板
1 位灰度
2位灰度
4 位灰度