我生成了一张图片:
如果色彩管理正常工作,您应该会看到蓝色(好!),否则它将是红色(坏……)。
但是,如果我将此图像包含在 PDF 中,ICC 配置文件将无法正确打印,而其他文件(如https://www.color.org/version4pdf.pdf打印正确)。我尝试使用 Evince、Okular、Adobe reader(linux 和 windows 版本):
知道我做错了什么吗?
下列的如何提高位图图片从原生格式到目标pdf文件的颜色一致性?我用了:
\documentclass[a4paper]{article}
\usepackage{graphicx}
\usepackage{etoolbox}
\makeatletter
\let\GPT@colorspacefile\ltx@empty
\define@key{Gin}{colorspacefile}{\def\GPT@colorspacefile{#1}}%
\patchcmd\Gread@@pdftex
{\pdfximage\GPT@RuleAttr}
{%
\ifx\GPT@colorspacefile\ltx@empty
\else
\immediate\pdfobj stream attr{/N 4} file{\GPT@colorspacefile}%
\@tempcnta\the\pdflastobj
\fi
\pdfximage\GPT@RuleAttr
\ifx\GPT@colorspacefile\ltx@empty
\else
colorspace \@tempcnta
\fi
}%
{}{}
\makeatother
\begin{document}
\noindent
\includegraphics[width=.5\linewidth]{should_be_blue.jpg}\includegraphics[width=.5\linewidth,colorspacefile={gbr.icc}]{./should_be_blue.jpg}
\end{document}
编辑
我也尝试过其他解决方案https://tex.stackexchange.com/a/146853/116348...这更奇怪,我现在得到的输出真的很糟糕:
在 Okular 和 evince 中...(但它似乎在 Adobe Reader 中起作用)知道发生了什么吗?
编辑
我找到了一个解决方案,使用img2pdf
(https://pypi.org/project/img2pdf/nix-shell -p img2pdf
,如果你使用 nix,你可以使用 来获取它)。然后只需执行以下操作:
$ img2pdf yourfile.jpg -o yourfile.pdf
然后,只需\includegraphics
包含.pdf
而不是.jpg
。已成功使用 Okular、Evince、acroread 进行测试(仅测试了 Linux 版本,但我希望它也能在 Windows 上运行)。无法使用 Firefox 和 Chromium(我猜它们不支持 PDF 的 ICC 配置文件)。
如果您不想浪费时间自己运行这些命令,您可以安装我的库robust-externalize
(最近的 CTAN 中也可用),然后运行(使用-shell-escape
,如果您不想使用 shell 转义,请参阅文档):
\documentclass{article}
\usepackage{graphicx}
\usepackage{robust-externalize}
\robExtConfigure{
enable fallback to manual mode,
new preset={img2pdf}{
set compilation command={img2pdf "__ROBEXT_WAY_BACK____IMG_SOURCE_FILE__" -o "__ROBEXT_OUTPUT_PDF__"},
set template={},
command if no externalization/.code={%
\robExtDisableTikzpictureOverwrite\evalPlaceholder{\includegraphics[__ROBEXT_INCLUDEGRAPHICS_OPTIONS__]{__IMG_SOURCE_FILE__}}%
}%
},
}
\NewDocumentCommand{\includegraphicsICC}{D<>{}O{}m}{%
\cacheMe[
img2pdf,
set includegraphics options={#2},
dependenciesList={#3},
set placeholder={__IMG_SOURCE_FILE__}{#3}
]{}
}
\begin{document}
Compare:
\includegraphics[width=5cm]{should_be_blue.jpg}
With:
\includegraphicsICC[width=5cm]{should_be_blue.jpg}
\end{document}
% Local Variables:
% TeX-command-extra-options: "--shell-escape -halt-on-error"
% End:
然而,我很好奇上述方法为什么会失败。