如何在PDF中插入透明PNG?
Posted
技术标签:
【中文标题】如何在PDF中插入透明PNG?【英文标题】:How to insert transparent PNG in PDF? 【发布时间】:2012-12-22 14:45:35 【问题描述】:我可以使用DCTDecode
过滤器将 JPG 图像插入 PDF 文档。我认为PNG
图像的所有参数也应该相同,除了过滤器应该是FlateDecode
。但是,当我尝试使用相同的参数插入 PNG
时,PNG 图像在 PDF 文档中不可见。
更新:我得出的结论是 PDF 文件应该包含
1 0 obj <<
/Type /XObject
/Subtype /Image
/Width 512
/Height 512
/BitsPerComponent 8
/ColorSpace /DeviceRGB
/SMask 9 0 R
/Length 134753
/Filter /FlateDecode
>>
stream
PNG_RAW DATA
endstream
endobj
9 0 obj <<
/Type /XObject
/Subtype /Image
/Width 512
/Height 512
/BitsPerComponent 8
/ColorSpace /DeviceGray
/Length 12087
/Filter /FlateDecode
>>
stream
ALPHA_PIXELS
endstream
endobj
但是如何通过ImageMagick
分离PNG
原始数据和alpha pixels
?换句话说,ImageMagick
命令可以生成PDF_RAW_DATA
和ALPHA_PIXELS
以插入到pdf 文件中。
【问题讨论】:
【参考方案1】:很可能您没有解码 PNG 图像。
PDF 不直接支持 PNG。我的意思是它们不受支持 JPEG 的方式支持。
在将 PNG 嵌入 PDF 之前,您必须从 PNG 生成原始未压缩的光栅字节。如果您愿意,可以使用 Flate 或 LZW 编码器对光栅字节进行编码。
【讨论】:
感谢您指出问题。我编辑了我的问题以找到一个实用的解决方案。 有一些限制,PDF 直接支持 PNG。 PNG 应该是 PNG8(颜色类型 3),最多有 256 种颜色,没有透明蒙版(alpha 通道),不是隔行扫描的。 @zfr 你有嵌入这种 PNG 的 PDF 示例吗?【参考方案2】:@Bobrovsky
这里是一个例子:http://pd4ml.com/i/pd4ml18130.pdf
更准确地说:你不能在没有任何操作的情况下绝对嵌入 PNG。您需要将 PNG 拆分为多个部分:IDAT(图像数据)以字节流不变的形式转到 PDF,PLTE(调色板)- 用于颜色空间定义,iCCP 可选择转到颜色配置文件对象。
对象字典可能如下所示:
<<
/Filter /FlateDecode
/Type /XObject
/Subtype /Image
/BitsPerComponent 8
/Length 1277
/Height 250
/Width 250
/DecodeParms <<
/BitsPerComponent 8
/Predictor 15
/Columns 250
/Colors 1
>>
/ColorSpace [/Indexed /DeviceRGB 1 <1989d1ffffff>]
>>
stream
... IDAT bytes ...
【讨论】:
感谢您的详细解释。我不知道有这种嵌入 PNG 的方法。 @zfr 实际上,可以在 PDF 中嵌入 PNG24 图像(1600 万色)而无需重新编码图像,这与您为 PNG8 图像(256 色)提供的配方完全相同)。例如(并作为参考),程序img2pdf 对非透明和非隔行图像执行此操作。以上是关于如何在PDF中插入透明PNG?的主要内容,如果未能解决你的问题,请参考以下文章
使用 GhostScript 将 PDF 转换为透明 PNG