使用 \includegraphics 的 bb 参数时,只有某些图像的图像尺寸不正确?

使用 \includegraphics 的 bb 参数时,只有某些图像的图像尺寸不正确?

我有一段代码,我曾用它(显然)与tex4ht(用 编译latex)来获取 html 文档 - 并且据我所知(是一段时间以前)它运行正常。现在我尝试用 编译相同的代码片段pdflatex,结果出现了错误的图像大小 - 但这仅在使用bb=(边界框)参数时发生。

显然,我需要添加参数bb=以避免在latex处理此代码时出现单独的 bbox 文件,据我所知,它运行良好。问题是,我想在pdflatex编译运行中也保留相同的代码。

为此,我制作了一个包含原始源图像的 zip 文件:

...我已经设法用这个 MWE 重建了错误:

\documentclass{book}
\usepackage{graphicx}

\begin{document}

\begin{figure}[hbt]
\centering
\includegraphics[bb=0 0 1408 1056,width=0.49\textwidth]{IMG1.JPG}  \includegraphics[width=0.49\textwidth]{IMG2.jpg} %bb=0 0 1629 1221
\ifdefined\ifHtml\HCode{<br/>}\else\fi
\caption{Left: some text here; right: some text there}
\label{fig:fig1}
\end{figure}

\begin{figure}[tb]
\centering
\includegraphics[bb=0 0 1000 1415,width=0.49\textwidth,trim=90 540 250 380,clip]{IMG3} \includegraphics[bb=0 0 1600 1200,width=0.49\textwidth]{IMG4}
\ifdefined\ifHtml\HCode{<br/>}\else\fi
\caption{Left: some text here; right: some text there}
\label{fig:fig2}
\end{figure}

\end{document}

输出如下(单击可查看高分辨率):

测试.png

这就是问题:

  • 在第一个图(前两幅图)中,每当我使用参数时bb=\includegraphics我都会得到错误的图像尺寸(比小得多width=0.49\textwidth
  • 在第二张图(下面两张图)中,我使用bb=参数来\includegraphics- 这里是问题,大小是正确的?!

IMG* 图像最初来自相机;我在 Gimp 中用红色填充替换了它们的内容,然后重新保存 - 奇怪的是,错误仍然发生;这些图像是测试图片.zip。因此,即使图像数据本身消失了,EXIF 数据仍然存在于这些图像中,我尝试过:

exiftool -f IMG*

...但我看不出前两幅图有什么奇怪之处,bb=在第一幅图中使用时可能会导致此错误。以下是图像大小的快速概览:

$ identify IMG*
IMG1.JPG    JPEG 1408x1056 1408x1056+0+0 8-bit DirectClass 13KB 0.010u 0:00.000
IMG2.jpg[1] JPEG 1629x1221 1629x1221+0+0 8-bit DirectClass 16.1KB 0.000u 0:00.000
IMG3.jpg[2] JPEG 1000x1415 1000x1415+0+0 8-bit DirectClass 8.7KB 0.010u 0:00.000
IMG4.JPG[3] JPEG 1600x1200 1600x1200+0+0 8-bit DirectClass 15.6KB 0.000u 0:00.000

但请注意编译时 pdflatex 在日志中输出的内容:

Package pdftex.def Warning: Option `bb' does not make sense,
(pdftex.def)                using `viewport' instead on input line 8.

<IMG1.JPG, id=1, 565.312pt x 423.984pt> <use IMG1.JPG>
<IMG2.jpg, id=2, 654.0435pt x 490.2315pt> <use IMG2.jpg>

Package pdftex.def Warning: Option `bb' does not make sense,
(pdftex.def)                using `viewport' instead on input line 16.

<IMG3.jpg, id=3, 1003.75pt x 1420.30624pt> <use IMG3.jpg>

Package pdftex.def Warning: Option `bb' does not make sense,
(pdftex.def)                using `viewport' instead on input line 16.

<IMG4.JPG, id=5, 1606.0pt x 1204.5pt> <use IMG4.JPG> 

因此,它有点“解释”前两张图像变得更小,但我真的不明白为什么。

有人能解释为什么会发生这种情况吗?以及如何才能使代码在命令中也能正确编译pdflatex,同时保留原始代码和参数?bb=\includegraphics


编辑:发现了为什么前两幅图像的解释不同——它们有不同的打印尺寸/分辨率:

$ identify -verbose IMG* | grep 'Image:\|Resolution:\|Print'
Image: IMG1.JPG
  Resolution: 180x180
  Print size: 7.82222x5.86667
    exif:FocalPlaneXResolution: 2816000/225
    exif:FocalPlaneYResolution: 2112000/169
    exif:XResolution: 180/1
    exif:YResolution: 180/1
Image: IMG2.jpg
  Resolution: 180x180
  Print size: 9.05x6.78333
    exif:FocalPlaneXResolution: 2816000/225
    exif:FocalPlaneYResolution: 2112000/169
    exif:XResolution: 180/1
    exif:YResolution: 180/1
Image: IMG3.jpg
  Resolution: 72x72
  Print size: 13.8889x19.6528
Image: IMG4.JPG
  Resolution: 72x72
  Print size: 22.2222x16.6667
    exif:FocalPlaneXResolution: 1600000/225
    exif:FocalPlaneYResolution: 1200000/169
    exif:XResolution: 72/1
    exif:YResolution: 72/1

因此,显然,分辨率为 72 dpi 的那些的bb=解释是正确的,但是那些没有该打印分辨率的(前两个是 180 dpi)在bb=与 一起使用时尺寸不正确pdflatex

我想我可以只更改 Gimp 中图像的 DPI 打印分辨率并完成它 - 但假设我不想更改图像或代码,我该怎么做?我试过了texdoc graphicx,但它似乎没有参数resolution...

答案1

如果需要 bb 参数,则必须给出正确的值。

\includegraphics[bb=0 0 1408 1056,width=0.49\textwidth]{IMG1.JPG}
\includegraphics[width=0.49\textwidth]{IMG2.jpg} %bb=0 0 1629 1221

应该改为

\includegraphics[bb=0 0 563 422,width=0.49\textwidth]{IMG1.JPG}
\includegraphics[width=0.49\textwidth]{IMG2.jpg} %bb=0 0 652 488

命令

extractbb IMG1.JPG

可能会告诉您创建的 IMG1.xbb 中的正确边界框。

相关内容