![\includegraphics 可以用来改变图像颜色吗?](https://linux22.com/image/240825/%5Cincludegraphics%20%E5%8F%AF%E4%BB%A5%E7%94%A8%E6%9D%A5%E6%94%B9%E5%8F%98%E5%9B%BE%E5%83%8F%E9%A2%9C%E8%89%B2%E5%90%97%EF%BC%9F.png)
我使用 在我的文档中包含了许多 PDF 图像\includegraphics
。我想知道是否有办法让 LaTeX 调整其颜色配置文件,希望以同样的方式翻转图像、调整大小和裁剪,如下所示:
http://en.wikibooks.org/wiki/LaTeX/Importing_Graphics#Include_graphics
让我更详细地说明一下我想要的结果,以防有另一种方法可以实现这一点:图像色彩鲜艳---我想降低颜色级别,或者可能将它们渲染为灰度,如果可能的话,我宁愿不必进行外部预处理。
我正在使用 XeTeX。
答案1
不可以,\includegraphics
无法更改图像颜色。您需要使用外部图像编辑器。graphics
/graphicx
软件包或多或少只是将图像传递给输出驱动程序(如dvips
或 )的接口。因此,您只能使用这些驱动程序提供的功能。图像处理不是这些驱动程序的一部分,即使在/pdftex
中为这些驱动程序提供相同的接口也非常困难。graphics
graphicx
除了调整大小、修剪/剪辑和旋转之外,您需要使用外部图像编辑器。但是,使用 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}