使用 pdflatex 为外部图片着色

使用 pdflatex 为外部图片着色

我有几个灰度图片,我想在 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}

相关内容