如何在PDF中插入透明PNG图片?

14

我能够使用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像素呢?换句话说,什么ImageMagick命令可以生成PDF_RAW_DATAALPHA_PIXELS以便插入到PDF文件中。

2个回答

7

@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的方式。 - Bobrovsky
1
@zfr 实际上,可以在PDF中嵌入PNG24图像(1600万种颜色)而不重新编码图像,只需按照您提供的PNG8图像(256种颜色)的完全相同的方法即可。例如(并作为参考),程序[img2pdf](https://gitlab.mister-muffin.de/josch/img2pdf)对于非透明和非交错图像就是这样做的。 - Bht

4

很可能您没有解码PNG图像。

PNG在PDF中不受直接支持。我的意思是,它们不像JPEG那样受支持。

您需要从PNG生成未压缩的光栅字节,然后将其嵌入到PDF中。如果愿意,您可以使用Flate或LZW编码器对光栅字节进行编码。


感谢指出问题。我编辑了我的问题以寻找实际解决方案。 - Googlebot
2
有一些限制,PDF可以直接支持PNG格式。PNG应该是PNG8(颜色类型3),最多具有256种颜色,没有透明掩模(Alpha通道),不要采用隔行扫描。 - zfr
@zfr,你有一个包含PNG嵌入的PDF示例吗? - Bobrovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接