\includegraphics 可以读取和报告哪些元数据?

\includegraphics 可以读取和报告哪些元数据?

我使用 TeXlive 2016 和 LuaTeX。我的 TeX 文档包含图像,必须是 8 位扁平灰度(无透明度)或 1 位单色,采用 PNG 格式。我擅长使用图形程序,并能正确准备具有适当模型和分辨率的图像,使用 Magick 完成mogrify -strip并使用 进行验证identify -verbose

显然\includegraphics知道如何根据像素和分辨率以 100% 比例调整图像大小。我猜它读取了元数据。现在我要问的是:(\includegraphics或 LuaLaTeX 中的其他命令,而不是 shell)能否给出图像是灰度还是单色的“是”或“否”答案?图像始终是 PNG。

我担心的是,可能会意外包含未处理的图像(例如,在 rgba 模型中,仅使用灰色阴影)。我不希望 TeX 以任何方式转换或操作图像。我只想检查它。如果不是扁平灰色或单色,那么我会向日志中写入警告消息。然后我就会知道我错误地包含了错误类型的图像。

可能吗,不需要大量的代码?我有 PDF 规范,但阅读它并不适合业余爱好者。

我的问题比看上去的要广泛得多。任何准备用于黑白按需打印的 PDF 的人都会遇到类似的问题。我意识到 PDF 中的图像不是 PNG;但这就是它们输入 TeX 的方式。

编辑:在查看了下面 David 的回复后,我更详细地研究了图像格式。JPG 也有类似的情况,但我将重点介绍 PNG。

PNG 规范要求IHDR在文件开头有一个块。字符串后面的第十个字节IHDR是图像颜色模型的代码。没有 alpha 通道的灰度(或单色)图像00在此处有十六进制代码。因此,如果 Lua 能够直接读取图像文件字节,它应该能够扫描 IHDR、数到十并报告字节。

显然这不是 Lua 所做的img.colorspace,因为nil无论我输入什么 PNG 图像(灰色、彩色),它总是返回结果。要么img.colorspace不是我期望的,要么它尝试但未能获得正确的代码。

答案1

\includegraphics(latex 宏) 基本上对图像一无所知。在传统 tex 中,tex 根本看不到图像文件。

然而,在 Luatex 中,您可以img使用 lua 库,它包含以下图像信息字段

field name      type    description
attr            string  the image attributes for LuaTEX
bbox            table   table with 4 boundingbox dimensions llx, lly, urx and ury over-
                        ruling the pagebox entry
colordepth      number  the number of bits used by the color space
colorspace      number  the color space object number
depth           number  the image depth for LuaTEX
filename        string  the image file name
filepath        string  the full (expanded) file name of the image
height          number  the image height for LuaTEX
imagetype       string  one of pdf, png, jpg, jp2 or jbig2
index           number  the pdf image name suffix
objnum          number  the pdf image object number
page            number  the identifier for the requested image page
pagebox         string  the requested bounding box, one of none, media, crop, bleed, trim,
                        art
pages           number  the total number of available pages
rotation        number  the image rotation from included pdf file, in multiples of 90 deg.
stream          string  the raw stream data for an /Xobject /Form object
transform       number  the image transform, integer number 0..7
width           number  the image width for LuaTEX
xres            number  the horizontal natural image resolution (in dpi)
xsize           number  the natural image width
yres            number  the vertical natural image resolution (in dpi)
ysize           number  the natural image height
visiblefileame  string  when set, this name will find its way in the pdf file as PTEX specifi-
                        cation; when an empty string is assigned nothing is written to file;
                        otherwise the natural filename is taken

这可能(也许)有您需要的信息,但 latex 目前没有通过 latex 图形宏提供该接口,您需要进入 Lua 代码。


在此处输入图片描述

该示例为每个图像加上了其单色状态的标题

\documentclass{article}
\usepackage{graphicx}
\begin{document}

\includegraphics{c1.png}

monochrome: 
\directlua{
img1=img.scan{filename="c1.png"}
tex.print(tostring(img1.colordepth==1))
}

\includegraphics{m1.png}

monochrome: 
\directlua{
img2=img.scan{filename="m1.png"}
tex.print(tostring(img2.colordepth==1))
}

\end{document}

相关内容