更改包含的 cmyk jpg 的颜色

更改包含的 cmyk jpg 的颜色

我正在尝试将包含灰度图片和黑色文本的 pdf 转换为 cmyk 颜色空间中的单一颜色阴影(用于打印)。因此,我很高兴从Heiko Oberdiek 的回答之一decodearray关于的键\includegraphics,它允许我们在给定颜色空间的每个通道上指定线性变换。此键将适当的/Decode数组放置在 pdf 文件中,并且在显示或打印 pdf 文件时会转换颜色。

该方法适用于灰度或 rgb 图像,但无法用于 cmyk 图像,原因如下。cmyk 颜色空间有两种(或 cmyk jpg 图像?):一种是白色全为零,一种是白色全为一。为了反转颜色,pdfTeX 使用一个/Decode数组,该数组将每个通道中的区间 [0,1] 映射到 [1,0]。第二个/Decode数组覆盖了我们的数组。参见我最近的回答更多细节。

问题是要知道如何删除第二个/Decode数组,或者以其他方式包含颜色改变的 cmyk 图像。我当前的解决方案是对 pdf 进行后处理,用/Decode空格替换第二个数组。

一些代码:首先构建一个 cmyk 图像

convert `kpsewhich example-image.jpg` -colorspace cmyk /tmp/example-image-cmyk.jpg

然后包括它

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[decodearray={1 1 0 0 1 0 0 1}]{example-image-cmyk.jpg}
\end{document}

并在此文件上运行pdflatex。之后,查看 pdf 文件并/Decode在同一词典中两次找到该键,然后将第二个键替换为/Xxxxxx(或任何键,长度相同)。pdf 现在有了新的颜色。

编辑:来自pdfTeX 开发人员的电子邮件讨论6 年前,似乎colorspace向原始底层提供关键字\includegraphics可能会有所帮助。

答案1

老问题了,但正如我刚刚看到的:

低级解决方案似乎是可行的。如果使用关键字,则不会插入colorspace默认/Decode数组,可以手动添加:

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\immediate\pdfobj { /DeviceCMYK }
\edef\deviceobjnum{\pdflastobj}
\leavevmode
\pdfximage width 100pt attr{/Decode [1 1 0 0 1 0 0.2 0.4]} 
           colorspace \deviceobjnum
          {example-image-cmyk.jpg}
\pdfrefximage \pdflastximage\quad
\pdfximage width 100pt attr{/Decode [1 1 0.5 0.5 1 0 0.2 0.4]}
           colorspace \deviceobjnum
          {example-image-cmyk.jpg}
\pdfrefximage \pdflastximage


\end{document}

在此处输入图片描述

相关内容