一位作者 (Janusz Bie\'n) 给我发了一张 png 图像,我将其转换为 jpg ( pngtopnm Rubricella.png | pnmtojpeg >Rubricella.jpg
) 以减小文件大小(jpg 损失在这里不是问题)。生成的图像的像素大小完全相同(宽度 = 2568 高度 = 4221)。令我惊讶的是,我发现 \includegraphics 对原始 png 和新 jpg 的剪辑方式不同。示例:
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\leftline{png: \includegraphics[width=2.2in,trim=15 15 15 15,clip]
{Rubricella.png}}
\bigskip
\leftline{jpg: \includegraphics[width=2.2in,trim=15 15 15 15,clip]
{Rubricella.jpg}}
\end{document}
我将附上结果的屏幕截图。可以看到,原始 png 被紧密地剪切到页面图像上(如预期的那样),而 jpg 显示黑色边框,也就是说,jpg 几乎没有被剪切。我不确定是否发生了任何剪切。
如果我运行pngtopnm Rubricella.png | pnmtopng >x.png
并包含 x.png,剪辑同样很少/不存在。因此,罪魁祸首不是转换为 jpg,而是原始图像有些不同。
由于所有图像像素大小都相同...还有什么会影响剪辑?数学溢出?我没有在日志或终端上看到任何消息。
明显的区别是原始图像文件大小超过 20mb;转换后的图像(无论是 png 还是 jpg)都接近 2mb。为什么在像素尺寸相同的情况下文件大小很重要,或者为什么剪辑适用于较大的图像而不是较小的图像,这对我来说很神秘。我尝试过对其他随机图像进行同样的测试,但从未发现任何差异。
原始图像和转换后的图像超出了这里的限制,所以我把它们放在https://tug.org/~karl/Rubricella.png和https://tug.org/~karl/Rubricella.jpg。
这是用 pdflatex 做的。也许是 pdftex 读取这个特定 png 时出了问题?
答案1
像素没有大小,您需要考虑分辨率。png 的内部 dpi 设置是 300x300。jpg 没有,这意味着使用 pdftex 时假定 dpi 为 72(例如,参见 pdftex 手册)。
因此,如果您以原始尺寸插入图形,则会看到它们的尺寸有很大差异:jpg 的宽度约为 35.6 英寸 = 2568 点/72 dpi。(Rubricella.jpg,id=11,2577.63pt x 4236.82875pt)而 png 的宽度约为 8.5 英寸(Rubricella.png,id=1,618.6312pt x 1016.8389pt),当然,修剪对它们的影响也会不同。
如果您设置\pdfimageresolution=300
或为 jpg 添加 300dpi 的分辨率,则图像将具有相同的大小。