我知道有\includegraphics
修剪图像的选项,但这只适用于我知道其大小的图像,因此我可以按照适合给定图像的方式修剪它们。
假设我想向我的文档添加一个随机图像(我使用的是 XeLaTex)。我想将其大小调整为精确的尺寸 - 比如 250x300px - 而不知道图像的实际尺寸(但假设它至少与这些尺寸一样大)。
是否有一个像上面描述的一样可以自动裁剪图像的包?
编辑:为了进一步形象化,我将添加一个小草图来描述我想要实现的目标。
假设我有一个文档,我想在其中放置具有特定高度和宽度的图像(我的占位符)。现在我想添加带有棕榈树的图像,但该图像的尺寸显然不适合占位符。
我想要的是在某个地方裁剪图像(不一定很漂亮)以适合给定的尺寸:
实际上,给定的图像实际上与占位符的大小相似,因此“随机”裁剪不会那么难看。但出于我的设计考虑,每张图片都必须完全满足给定的高度和宽度属性。
答案1
\picdims[...]{<x-dim>}{<ydim>}{<image-file>}
提供,用户可以指定裁剪图像的 x 和 y 尺寸。裁剪是对称进行的。
首先,我将未裁剪图像的副本存储在临时文件中\box0
。这样我就可以确定它的总宽度\wd0
和高度\ht0
。用户在#2
和中提供了所需的 x,y 图像尺寸#3
。因此,总共\wd0-#2
必须水平裁剪并且\ht0-#3
必须垂直裁剪才能达到最终的裁剪尺寸。我将这些尺寸减半.5\dimexpr...\relax
,然后将这些裁剪量分别对称地应用于左/右和顶部/底部。此裁剪是通过完成的,\clipbox
其中<left bottom right top>
裁剪量作为第一个参数中的空格分隔列表提供\clipbox
。
\documentclass{article}
\usepackage{graphicx,trimclip}
\newcommand\picdims[4][]{%
\setbox0=\hbox{\includegraphics[#1]{#4}}%
\clipbox{.5\dimexpr\wd0-#2\relax{} %
.5\dimexpr\ht0-#3\relax{} %
.5\dimexpr\wd0-#2\relax{} %
.5\dimexpr\ht0-#3\relax}{\includegraphics[#1]{#4}}}
\parskip 1ex
\begin{document}
\includegraphics[width=2in]{example-image}\par
\picdims[width=2in]{1in}{1in}{example-image}\par
\picdims[width=2in]{1.5in}{1in}{example-image}\par
\picdims[width=2in]{1in}{.5in}{example-image}\par
\end{document}
答案2
作为上述方法的替代,我发现了一种类似的方法,它只使用 graphicx 而不使用 trimclip。它也以 开头,\box0
但使用trim
选项includegraphics
。其余部分与 Steven B. Segletes 之前的解决方案类似:
\usepackage{graphicx}
\newcommand\picdims[4][]{%
\setbox0=\hbox{\includegraphics[#1]{#4}}%
\includegraphics[trim={.5\dimexpr\wd0-#2\relax{},
.5\dimexpr\ht0-#3\relax{},
.5\dimexpr\wd0-#2\relax{},
.5\dimexpr\ht0-#3\relax{}},
clip,#1]{#4}%
}