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