始终缩放和裁剪背景图像,使其填满页面

始终缩放和裁剪背景图像,使其填满页面

我从其他答案中了解到如何使用图像文件作为背景使其透明。由于我的背景文件不一定具有精确的页面尺寸(它们由用户提供),因此我需要缩放和剪辑它们以适应。

然而,我发现使用

\includegraphics[width=\paperwidth,height=\paperheight,keepaspectratio,clip]{#1}

缩放并不总是正确;横向图像会缩放,以便宽度适合,如果它们非常平坦,则根本不会裁剪,因此会保留白色条。例如,这是使用1600x750 图像在美国信件横向页面上:

\documentclass[landscape]{article}
\usepackage{eso-pic,graphicx}
\pagestyle{empty}
\begin{document}
  \AddToShipoutPicture*{%
    \put(0,0){%
      \parbox[b][\paperheight]{\paperwidth}{%
        \includegraphics[width=\paperwidth,height=\paperheight,keepaspectratio,clip]{test.png}%
      }%
    }%
  }%
  \phantom{lorem ipsum}
\end{document}

在此处输入图片描述

我怎样才能知道includegraphics总是缩放较短的尺寸以适应?

答案1

据我所知,你不能。adjustbox,总是值得一看,似乎也没有提供必要的选项。

幸运的是,我们可以破解它。观察

\includegraphics[width=\paperwidth,keepaspectratio,clip]{img}

非常适合肖像图像 - 缩放它们以便宽度适合并剪辑 - 反之亦然

\includegraphics[height=\paperheight,keepaspectratio,clip]{img}%

适用于风景图像。因此我们可以根据图像尺寸使用哪个版本:

\settoheight\imageheight{\includegraphics{img}}%
\settowidth\imagewidth{\includegraphics{img}}%
\ifthenelse{\dimtest{\imageheight}{>=}{\imagewidth}}{%
  \includegraphics[width=\paperwidth,keepaspectratio,clip]{img}%
}{%
  \includegraphics[height=\paperheight,keepaspectratio,clip]{img}%
}%

请注意,这需要包xifthen。该示例最终编译为:

在此处输入图片描述

我还没有弄清楚在裁剪时如何选择图像中一个明确的部分,比如中间部分;默认情况下,它似乎从左侧或底部开始。此外,裁剪后的图像似乎会产生Overful \hbox警告。

相关内容