首页 > 解决方案 > 使用 CMYK 和透明度将 PDF 转换为 Tiff

问题描述

我正在尝试从 PDF 转换为 TIFF 并同时保持 CMYK 颜色空间和 PDF 中的透明区域。有很多帖子说“只使用 PNG”,但对于我的应用程序来说,CMYK 颜色空间是必须的,而且 PNG 不支持 CMYK。我开始使用 Imagemagick (IM) 进行这项工作,并取得了有限的成功,但到目前为止直接使用 Ghostscript 取得了更好的结果(这就是 IM 在幕后使用的东西)。不断出现的问题是 PDF 中的透明区域被白色填充。

上下文:Ubuntu 16.04.3 LTS (AWS)、Ghostscript 9.23、ImageMagick 7.0.7-36

我创建了一个具有透明背景和重叠的纯色和半透明颜色块的测试 PDF: trans-test.pdf

我已验证 PDF 具有正确的透明区域。如果我使用 PNG(因此使用 RGB 颜色空间),我得到的结果图像具有与 PDF 匹配的透明区域,但是,唉,错误的颜色空间: output.png

(记住:网络浏览器会以白色背景显示它,但它真的是透明的)

对于转换,我尝试了以下命令的变体(为发布而简化):

图像魔术: convert -depth 8 -colorspace CMYK trans-test.pdf output.tif

鬼脚本: gs -sDEVICE=tiff32nc -sOutputFile=output_gs.tif -r144 trans-test.pdf

在 IM 中,处理 CMYK PDF 的代理使用 pamcmyk32 设备。有些人建议将其更改为 pngalpha ,但这会强制对 RGB 颜色空间进行不必要的更改。有些人建议先转换为 PNG,然后再转换回 CMYK,但这会导致颜色数据丢失。

直接使用 Ghostscript TIFF 的任何设备选项都没有任何透明度选项。经过一段时间的挖掘,我发现了来自 Artifex (KenS) 开发人员的旧帖子回复,指出“至于 TIFF,GS 不支持使未标记区域透明”。: 转换......不保持透明度

这令人沮丧,但它是从 2011 年开始的,所以我希望现在有一些解决这个问题的方法。我正在寻找对 Ghostscript 的一些配置更改,这将使我能够将所有未标记的区域设置为透明,或者让它从擦除为透明而不是白色的页面开始。

TIFF 文件格式支持 CMYK 颜色空间和透明度,因此必须有一种方法可以将两者放在同一个文件中。在这一点上,任何关于如何在 TIFF 中获取两者的见解都将受到欢迎。谢谢阅读。

标签: pdfimagemagickghostscripttiffcmyk

解决方案


正如评论中所指出的,需要一些创造性的解决方案来解决代表限制。

我建议将透明度提取到中间蒙版,并在启用 CMYKA 数据通道后重新应用它。

# Create transparent mask (we don't care about colorspace, just grab the alpha channel values)
convert -depth 8 -colorspace sRGB trans-test.pdf -alpha Extract mask.png
# Apply mask _after_ enabling alpha channel
convert \( \
        -depth 8 \
        -colorspace CMYK \
        trans-test.pdf \
        -alpha Activate \
    \) \
    mask.png -compose CopyAlpha -composite output.tif

-alpha Activate打开 alpha 通道,但没有数据,所以一切都是透明的。以下mask.png -compose CopyAlpha -composite使用从先前操作中提取的值填充 alpha 通道。

使用 CMYKA 的示例输出


推荐阅读