【问题标题】:How to insert transparent PNG in PDF?如何在PDF中插入透明PNG?
【发布时间】: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_DATAALPHA_PIXELS 以插入到pdf 文件中。

【问题讨论】:

    标签: image pdf adobe imagemagick png


    【解决方案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 对非透明和非隔行图像执行此操作。
    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2012-08-16
    • 2018-07-15
    • 2023-04-08
    • 2011-05-21
    • 2011-09-19
    • 1970-01-01
    相关资源
    最近更新 更多