\includegraphics 可以用来改变图像颜色吗?

\includegraphics 可以用来改变图像颜色吗?

我使用 在我的文档中包含了许多 PDF 图像\includegraphics。我想知道是否有办法让 LaTeX 调整其颜色配置文件,希望以同样的方式翻转图像、调整大小和裁剪,如下所示: http://en.wikibooks.org/wiki/LaTeX/Importing_Graphics#Include_graphics

让我更详细地说明一下我想要的结果,以防有另一种方法可以实现这一点:图像色彩鲜艳---我想降低颜色级别,或者可能将它们渲染为灰度,如果可能的话,我宁愿不必进行外部预处理。

我正在使用 XeTeX。

答案1

不可以,\includegraphics无法更改图像颜色。您需要使用外部图像编辑器。graphics/graphicx软件包或多或少只是将图像传递给输出驱动程序(如dvips或 )的接口。因此,您只能使用这些驱动程序提供的功能。图像处理不是这些驱动程序的一部分,即使在/pdftex中为这些驱动程序提供相同的接口也非常困难。graphicsgraphicx

除了调整大小、修剪/剪辑和旋转之外,您需要使用外部图像编辑器。但是,使用 PGF/TikZ,您可以在图像前后放置一些叠加层。如果图像有透明部分,您可以添加背景颜色等。

答案2

(重要的是,这不适用于 XeTeX。我主要使用 pdfTeX 进行测试,但在 LuaTeX 中似乎也可以使用。)

在 pdf 文件中,所包含图像的颜色会受到数组的影响/Decode。可通过decodearray关键字 来访问\includegraphics

但是:当颜色模型为 cmyk 时,这种方法在某些情况下会失败;并且不允许更改图像的颜色空间。我的印象是,在 pdfTeX 内部更改颜色空间(即,将灰度转换为 rgb,或将 rgb 转换为 cmyk 等)是不可能的。

灰度是最简单的。假设我们想降低对比度并使图像整体变暗。我们将黑色 (0) 映射到一些深灰色 (0.2),将白色 (1) 映射到一些较浅的灰色 (0.5)。这是使用decodearray={0.2 0.5}(可以省略括号) 完成的。

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{example-image.jpg}

\includegraphics[decodearray={0.2 0.5}]{example-image.jpg}
\end{document}

对于 rgb 示例,我们可以hacker.jpg从 ConTeXt 示例中使用。对于 cmyk 示例,使用此颜色空间创建 的副本example-image.jpg;我使用了convert中的命令行工具imagemagick

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

kpsewhich做找到在哪里的工作example-image.jpg。然后,尝试

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{hacker.jpg}

\includegraphics[decodearray={0.2 0.3 1 0 1 0.8}]{hacker.jpg}

\includegraphics{example-image-cmyk.jpg}

\includegraphics[decodearray={0.2 0.2 1 0 1 0.8 1 0}]{example-image-cmyk.jpg}
\end{document}

请注意,对于 rgb 颜色配置文件,该/Decode数组包含 6 个数字,对于 cmyk,该数组包含 8 个数字。每对数字描述对相应通道进行操作的线性变换。因此,第一个数组施加了红色量,反转了绿光量,并放置了大量蓝色。

第二个数组应该固定青色的数量,反转洋红色,放入大量黄色,并反转黑色墨水的数量。但事实并非如此。为什么?查看 pdf 文件时,我注意到/Decode同一字典中有两个条目,一个是 形式/Decode[0.2 0.2 1 0 1 0.8 1 0],另一个是 形式/Decode [1 0 1 0 1 0 1 0]。第二个条目优先,至少在我尝试过的查看器中是这样(也许这是标准要求的),它会反转所有通道(请参阅下文了解原因)。如果我们编辑 pdf 文件,将第二个条目替换/Decode [...]为任何其他长度相同的键(我偷懒,这样做/Decode/xxxxxx),我们的/Decode数组就会生效,结果正如我所愿。

为什么第二个/Decode数组在那里?好吧,似乎存在两种类型的 cmyk,它们在白色是否应该全为零或全为一方面有略微不同的约定,而 pdfTeX 足够聪明,可以检测到事物并插入适当的数组/Decode:如果没有它,cmyk 颜色空间中的(某些?)jpg 图像将显示为反转颜色并打印。

无论如何,我要问一个关于如何避免第二个/Decode数组的问题,因为编辑 pdf 文件并不好看。

注意:一般来说,最好的做法是不要在的参数中包含文件扩展名\includegraphics,但由于这里需要精确地了解颜色空间,所以我不想担心得到 png 而不是 jpg 或者其他什么。

答案3

有趣的是,对于我尝试过的矢量图形,\color命令实际上将所有黑色更改为给定的颜色。

答案4

我在处理 jpg 时遇到了这个问题,但能够使用解码数组来实现我想要的结果。不确定它如何与 pdf 配合使用。似乎通过设置所有参数(除了第一个参数为 .5),颜色会褪色。第一个参数允许您更改暗度。1 表示反转,0 表示极暗。

\includegraphics[decodearray={.1 .5 .5 .5 .5 .5}]{img.jpg}

相关内容