使用GhostScript将PDF转换为透明PNG

我试图使用Ghostscript来光栅化PDF文件,不成功
具有透明背景的PNG文件的透明背景.我有
搜索高低的人尝试同样的事情的其他问题
没有一个贴出来的解决方案,据我所知,
指定-sDEVICE = pngalpha,与我的测试文件一起使用.在此刻
我真的很感激任何建议或技巧,一个更有经验的手可以
提供.

我的测试PDF位于这里:http://www.kolossus.com/files/test.pdf

可能是这个文件的问题,但我怀疑.就我而言
可以说,它没有指定的背景,当我用a打开文件时
透明度感知的应用程序,如Photoshop或Illustrator,确实足够了
显示具有透明背景.但是,当打开一个
应用程序像Adobe Reader一样,文件呈现为白色背景.
我相信这更像是应用程序呈现PDF
而不是PDF本身 – 像Adobe Reader这样的应用程序假设你想看到
什么打印文件将看起来像,因此总是显示白色
画布背后的艺术作品 – 但我无法确定.

我使用的gs命令是:

gs -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r72 -sOutputFile=test.png test.pdf

这产生一个PNG,它在边界框之外具有透明像素
的文件中的艺术作品,但是艺术品内部的所有像素
边框对白色背景光栅化.这是个问题
对我来说,因为我的作品有阴影和抗锯齿的边缘需要
保存在最终输出,不能只是后处理
ImageMagick的.我的PNG输出的示例与上面的pdf位于相同的位置,最后是.png(stackoverflow不会让我在我的帖子中包含多个url).

有趣的是,我看到没有使用-dBackgroundColor标志的效果,甚至
如果我把它设置为非白色的东西,像-dBackgroundColor = 16#ff0000.也许
我对这个标志的语法的理解是错误的.

还有趣的是,我看到没有使用-dTextAlphaBits = 4的效果
-dGraphicsAlphaBits = 4标志以尝试启用子像素抗锯齿.我会
也欣赏任何关于如何启用子像素抗锯齿的建议,
特别是文字.

最后,我在Mac OS 10.5.7上使用GPL Ghostscript 8.64和渲染
我想要设置的工作流是从中生成透明的PNG图像
由PrinceXML输出的PDF.我直接调用Ghostscript进行光栅化,而不是使用ImageMagick,因为ImageMagick将Ghostscript委托给PDF光栅化,并且我可以通过直接调用GS来更好地控制光栅化.

谢谢你的帮助.

琼·沃尔夫

我与-dTextAlphaBits = 4和-dGraphicsAlphaBits = 4标志分享您的经验.他们似乎不适用于所有文本.我想出的“修复”只是将图像渲染为所需大小的4倍,然后将图像缩小.幸运的是ghostscript没有问题,呈现千兆像素的PNG文件.

更新

当渲染透明PNG的像素数高于2.500.000(即像素缓冲区为10 mb)时,Ghostscript(最多版本9)也似乎是主要的问题.透明背景突然变白.

钻取ghostscript的源码,我发现当像素缓冲区大小超过10 mb时,它切换到不同的内存分配方案.更具体地,使用设备image32而不是pngalpha渲染图像.考虑到pngalpha驱动程序的实现方式,当gs决定不使用其pngalpha_fill_rectangle()时,它的全部目的就消失了.

幸运的是,有一个名为-dMaxBitmap = N的开关在运行时配置此参数.在1999-01-15之间的一个完全不同的bug的解决方法中提到了这一点,见http://pages.cs.wisc.edu/~ghost/doc/AFPL/5.50/relnotes/index.htm.

添加-dMaxBitmap = 2147483647为我解决了很多问题.在64位系统上,这个数字可以更高.

一个真正的修复当然是重做pngalpha驱动程序,使其将背景颜色设置为0x7f000000,无论实际的代码路径,但大多数系统有足够的RAM在上面的上述技巧工作.

http://stackoverflow.com/questions/977540/convert-a-pdf-to-a-transparent-png-with-ghostscript

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:使用GhostScript将PDF转换为透明PNG