我有几个灰度图片,我想在 pdflatex 中对其进行着色(这样它就会自动着色为给定的颜色,从黑到白,比如从黑到红)。
有没有办法直接在 pdflatex 中操作外部图形?
如果这不可能,您会建议用什么方法在 Linux 系统上对数百张图片执行此操作?(也许imagemagick
?)
例子:
应该是这样的:
答案1
据我所知,您无法在 LaTeX 本身中更改光栅图像。但是,您可以像您建议的那样调用 ImageMagic 来在包含图像之前对其进行转换。这里有一个宏,允许您编写
\redify{image.jpg}
转换并包含图像(此处显示与使用以下方法包含的未改变图像相比\includegraphics{image.jpg}
:
每次\redify
调用宏时都会调用 ImageMagick,无论图像是否已经转换。如果您有许多非常大的图像,您可能需要在启用转换的情况下编译文档一次,然后在后续运行时从宏中注释掉转换行:
\documentclass{article}
\usepackage{graphicx}
\newcommand{\redify}[2][]{%
\immediate\write18{convert #2 -fill red -tint 40 blurred#2}%
\includegraphics[#1]{blurred#2}%
}
\begin{document}
\includegraphics{image.jpg}\redify{image.jpg}
\end{document}
答案2
这个答案是对Jakes 先前的回答,如果您对我的回答不满意,请阅读他的回答。
使用 ImageMagick 可能是按照我需要的方式处理光栅图片的唯一方法。
此输出通过放置
\includegraphics{image.jpg}\redify{image.jpg}
但正如杰克提到的,可能存在速度问题:
每次调用 \redify 宏时都会调用 ImageMagick,无论图像是否已经转换。如果您有很多非常大的图像,您可能希望在启用转换的情况下编译文档一次,然后在后续运行时从宏中注释掉转换行。
因此我添加了executeifnewer
-routine,它将检查源图像是否比重新生成的图像更新。如果是,它将调用转换,如果不是,它将只包含图片。这可能会为您节省大量时间,并且可以轻松移植到其他(不仅仅是对话)应用程序。
以下是代码:
\documentclass{article}
\usepackage{graphicx}
\newcommand{\executeifnewer}[3]{%
\ifnum\pdfstrcmp{\pdffilemoddate{#1}}{\pdffilemoddate{#2}}>0%
{\immediate\write18{#3}}%
\fi}
\newcommand{\redify}[2][]{%
\executeifnewer{#2}{blurred#2}{convert #2 -fill red -tint 40 blurred#2}%
\includegraphics[#1]{blurred#2}%
}
\begin{document}
\includegraphics{image.jpg}\redify{image.jpg}
\end{document}