我们的一位客户需要将 PDF 运输标签转换为 PNG 图像。PDF 图像需要为 300 DPI,位深为 1(纯黑白,无灰度)。
我已经完成了这项工作,但有些问题我找不到任何解决方案。
我的代码
MagickNET.SetGhostscriptDirectory(_ghostscriptPath);
var settings = new MagickReadSettings();
settings.Density = new Density(_dpi);
//settings.ColorType = ColorType.Bilevel; // Not working
//settings.Depth = 1; // Not working
//settings.SetDefine(MagickFormat.Png, "Bit-depth", "1"); // Not working
using (var images = new MagickImageCollection())
{
images.Read(sourceFilePath, settings);
using (var horizontal = images.AppendHorizontally())
{
//horizontal.Density = new Density(_dpi); // Not working
horizontal.BitDepth(1); // Testing (Sometimes commented out)
horizontal.Write(targetPath_working);
}
}
结果
当使用以下设置(BitDepth(1) + 300 DPI)运行此代码时,PNG 图像为 1169x2303 和(4Bit 深度)。
当使用以下设置运行此代码时(已删除 BitDepth(1) + 300 DPI),PNG 图像为 1169x2303 和(32 位深度)。
这给了我 2 个主要问题,当 BitDepth 设置为 1 时,为什么 PNG 图像仍然是 4 位?其次,该 4 位图像的质量非常糟糕,条码扫描仪无法读取。感觉就像图像在写作过程中以某种方式调整了大小。我需要具有 32 位图像的“清晰度”,但需要 1 位。
有人可以在这里指出我正确的方向吗,感觉我缺乏图像转换的专业知识。
谢谢!
PS:我正在使用 Magick.NET-Q8-AnyCPU (7.23.3)
测试建议1
结果图像以黑线作为所有内容的边框,没有任何文本填充黑色,但图像现在按预期为 1 位。
MagickNET.SetGhostscriptDirectory(_ghostscriptPath);
var settings = new MagickReadSettings();
settings.Density = new Density(_dpi);
settings.SetDefine(MagickFormat.Png, "Bit-depth", "1");
using (var images = new MagickImageCollection())
{
images.Read(sourceFilePath, settings);
using (var horizontal = images.AppendHorizontally())
{
horizontal.AutoLevel();
horizontal.Threshold(new Percentage(50));
horizontal.Write(targetPath_working);
}
}