pdf - 使用 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 中获取两者的见解都将受到欢迎。谢谢阅读。
解决方案
正如评论中所指出的,需要一些创造性的解决方案来解决代表限制。
我建议将透明度提取到中间蒙版,并在启用 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 通道。
推荐阅读
- ios - AudioUnitRender 错误 -50 带有奇数长度的缓冲区
- angular - Angular - ngFor 变量上的函数
- windows - 如何使用批处理文件在文本文件中查找字符串并替换整行同时保留空白行
- swift - 斯威夫特:我该如何用'替换'?
- nlp - Gensim Word2Vec 的词汇长度错误
- javascript - 如何设置 fuse.js 选项
- regex - 不区分大小写的 sed 模式
- apostrophe-cms - ApostropheCMS 工作流程忽略传入的提交
- c# - 其参数扩展嵌套类的泛型类
- angular - Angular 6 的错误处理程序服务中的“找不到 http”