XeLaTex includegraphics 尺寸太大

XeLaTex includegraphics 尺寸太大

Photoshop 似乎以某种方式保存了 JPG,这给 XeLaTeX 带来了一些问题。我的同事从 Photoshop 保存的图像导致出现错误:

! Dimension too large. <to be read again>

如果我对图像运行 imagemagik convert(保留尺寸),那么 XeLaTeX 将编译成功。

pdflatex 似乎能够编译而不会出现错误

\documentclass[10pt]{report}

\usepackage{graphicx}


\begin{document}

\includegraphics{peruvian.jpg}
\includegraphics{peruvian-converted.jpg}
% converted with: convert peruvian.jpg  peruvian-converted.jpg
\end{document}

文件具有相同的尺寸:

$ file peruvian.jpg peruvian-converted.jpg 
peruvian.jpg:           JPEG image data, baseline, precision 8, 1196x500, frames 3
peruvian-converted.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1196x500, frames 3

图片可以下载这里。我对其进行了 gzip 压缩,以避免 Dropbox 弄乱图像。

我在 Debian Stretch 上运行 xelatex,texlive-xetex 版本:2016.20170123-5

我知道我可以在使用每幅图像之前对其进行转换,但我更想知道为什么会发生这种情况,并找到一种在使用图像之前不必对其进行转换的方法。

答案1

原因是未设置尺寸 DPI。它们可以设置为任意值,但如果根本没有设置,您就会得到这样的结果。

您需要“修复”文件而不降低图像质量(例如,使用其他软件加载和保存 jpg 可能有效,但这不是个好主意)。需要做的是向文件添加适当的元数据。Imagemagik convert 不是无损的,而且所做的远不止修复丢失的标题。

一些图像软件包没有正确设置它,因为它很少使用(但 LaTex 在某些情况下可以使用它 - 见下文),但出于某些奇怪的原因,TeX 要求将其设置为(任何你喜欢的 - 因为它没有使用 - 无论你选择 100x100 还是 400x400,你都会得到相同的 LaTeX 输出)。除非你以原始分辨率包含图像而不指定尺寸,如

\includegraphics{秘鲁.jpg}

它被称为 JFIF 标头,实际上它不需要存在于 JPEG 中。

添加标头的一种方法是使用 ExifTool(可在各种平台上使用)。这些是 exiftool 的命令行参数:

-jfif:Xresolution=300  -jfif:Yresolution=300  -jfif:ResolutionUnit=inches

所以

exiftool peruvian.jpeg -jfif:Xresolution=300  -jfif:Yresolution=300  -jfif:ResolutionUnit=inches

此 zip 包含您的 jpeg 的原始版本和修复版本(但链接不会永远有效)。尝试一下。

https://www.dropbox.com/s/4dsx8kfbay4rc8u/peruvian.zip?dl=0

另外,是的,Photoshop 和其他软件的某些版本不会生成兼容的 jpeg 标头。例如: https://feedback.photoshop.com/photoshop_family/topics/jpeg_format_different_between_cs2_and_cs6

相关内容