16 pdf png transparency ghostscript
我试图使用Ghostscript将具有透明背景的PDF文件光栅化为具有透明背景的PNG文件,但未成功.我已经搜索了其他人尝试相同的问题而没有发布的解决方案的问题,据我所知,只需指定-sDEVICE = pngalpha,就可以使用我的测试文件了.在这一点上,我真的很感激有经验的手提供的任何建议或提示.
我的测试PDF位于:http://www.kolossus.com/files/test.pdf
问题可能在于这个文件,但我对此表示怀疑.据我所知,它没有指定的背景,当我用像Photoshop或Illustrator这样的透明感知应用程序打开文件时,确实它显示的是透明背景.但是,使用Adobe Reader等应用程序打开时,文件将以白色背景呈现.我相信这与渲染PDF的应用程序有关,而不是与PDF本身有关 - 像Adobe Reader这样的应用程序假设你想看看打印文档的样子,因此总是在艺术作品背后显示白色画布 - 但是我不能确定.
我正在使用的gs命令是:
gs -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r72 -sOutputFile=test.png test.pdf
Run Code Online (Sandbox Code Playgroud)
这将生成一个PNG,该PNG在文件中艺术作品的边界框之外具有透明像素,但是在艺术作品的边界框内的所有像素都在白色背景下进行光栅化.这对我来说是一个问题,因为我的作品有阴影和抗锯齿边缘需要在最终输出中保留,并且不能仅使用ImageMagick进行后处理.我的PNG输出示例与上面的pdf位于同一位置,最后是.png(stackoverflow不允许我在我的帖子中包含多个url).
有趣的是,我发现使用-dBackgroundColor标志没有任何影响,即使我将它设置为非白色的东西,如-dBackgroundColor = 16#ff0000.也许我对这个标志语法的理解是错误的.
同样有趣的是,我发现使用-dTextAlphaBits = 4 -dGraphicsAlphaBits = 4标志来尝试启用子像素抗锯齿没有任何影响.我也很感激有关如何启用亚像素抗锯齿的任何建议,特别是在文本上.
最后,我在Mac OS 10.5.7上使用GPL Ghostscript 8.64,我试图设置的渲染工作流程是从PrinceXML输出的PDF生成透明的PNG图像.我直接调用Ghostscript进行光栅化而不是使用ImageMagick,因为ImageMagick委托Ghostscript进行PDF光栅化,我应该能够通过直接调用GS来更好地控制光栅化.
谢谢你的帮助.
-Jon Wolfe
mvd*_*vds 18
我分享了你的经验-dTextAlphaBits=4和-dGraphicsAlphaBits=4标志.它们似乎不适用于所有文本.我想出的"修复"是将图像渲染为所需尺寸的4倍,然后缩小图像.幸运的是ghostscript渲染gigapixel PNG文件没有问题.
更新
Ghostscript(最高版本9)在渲染像素数高于2.500.000(即10 mb像素缓冲区)的透明PNG时似乎也会遇到重大问题.透明背景突然变白.
深入研究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用于上述技巧.
恐怕我不能告诉你 Ghostscript 能做什么,但我确实有一个建议。尝试使用黑色和白色背景渲染 PDF。两个图像中任何相同的像素显然都是不透明的(即 alpha == 1.0)。不同的像素具有非零 alpha,可以通过从白色背景像素中减去黑色背景像素来计算。给予或采取一定的精度,任何红色、绿色或蓝色分量的值都将是 alpha 值。
| 归档时间: |
|
| 查看次数: |
19157 次 |
| 最近记录: |