如何使用 Ghostscript 在 Postscript 中导入 png 文件?

Posted

技术标签:

【中文标题】如何使用 Ghostscript 在 Postscript 中导入 png 文件?【英文标题】:How do I import a png file in Postscript with Ghostscript? 【发布时间】:2014-10-11 02:30:31 【问题描述】:

我正在尝试将 png 图像放在 postscript 文档上,以便使用 Ghostscript (v 9.15) ps2pdf 转换为 pdf 文件。我发现以下代码适用于 jpg 文件,但我需要导入 png 文件。看起来我必须需要一个不同的过滤器,但我找不到一个有效的过滤器。有人有解决办法吗?

239                     % number of pixels in the horizontal axis
67                      % number of pixels in the vertical axis
8                       % bits per color channel (1, 2, 4, or 8)
[239 0 0 -67 0 67]      % transform array... maps unit square to pixel [ w 0 0 -h 0 h ]
(My_Logo.jpg) (r) file  % see page 587 and page 77 for more details
/DCTDecode filter       % see page  589
false                   % pull channels from separate sources
3                       % 3 color channels (RGB)
colorimage              % see page 544 and page 288 for more detail

【问题讨论】:

【参考方案1】:

PostScript 不直接支持 PNG,它支持 JPEG,这就是您上面的代码有效的原因。

如果您想从 PNG 文件中读取图像数据,您需要打开该文件,去除标题,然后读取每个块分别解析其中的数据。将位图数据写入中间文件可能是最简单的方法,但完全可以编写流解码器来提供程序图像数据源所需的数据。

好在 PostScript(肯定是 3 级,大部分是 2 级的版本)确实支持 Flate,所以你不用在 PostScript 中写解压代码,直接使用过滤器即可。

您需要指定颜色空间,具体取决于 PNG 是否使用调色板。

PostScript 是一种编程语言,所以这一切都是可能的,我应该认为一个有经验的 PostScript 程序员需要几天的时间来编写和调试它。

注意! PostScript 不支持透明度,因此您根本无法应用 PNG 文件中的 Alpha 通道。

【讨论】:

无赖。所以下一个最好的解决方案是将png文件转换为jpg文件,然后像上面一样导入,对吧? JPEG 是一种有损压缩方法,您最好将其导出为原始位图或同样简单的东西并使用它。 PPM 是一种有据可查的“原始”格式,可以使用。但是,它可以制作大文件,因为根本没有压缩。而且您仍然需要剥离标题。

以上是关于如何使用 Ghostscript 在 Postscript 中导入 png 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ghostscript中使用正确的gutenprint驱动程序?

如何在 Windows 中将 ghostscript DLL 库提供给 python?

java - 如何在文件路径中使用空格从java调用ghostscript

如何使用 Ghostscript 和 Ghostscript .NET 通过嵌入 IIC 配置文件生成正确的 PDF/A

此代码如何在 ghostscript 中导致 -100 错误

如何更改 Ghostscript 输出文件(在打印机后台处理程序中)