将图像裁剪为精确尺寸

将图像裁剪为精确尺寸

我知道有\includegraphics修剪图像的选项,但这只适用于我知道其大小的图像,因此我可以按照适合给定图像的方式修剪它们。

假设我想向我的文档添加一个随机图像(我使用的是 XeLaTex)。我想将其大小调整为精确的尺寸 - 比如 250x300px - 而不知道图像的实际尺寸(但假设它至少与这些尺寸一样大)。

是否有一个像上面描述的一样可以自动裁剪图像的包?

编辑:为了进一步形象化,我将添加一个小草图来描述我想要实现的目标。

假设我有一个文档,我想在其中放置具有特定高度和宽度的图像(我的占位符)。现在我想添加带有棕榈树的图像,但该图像的尺寸显然不适合占位符。

1

我想要的是在某个地方裁剪图像(不一定很漂亮)以适合给定的尺寸:

2

实际上,给定的图像实际上与占位符的大小相似,因此“随机”裁剪不会那么难看。但出于我的设计考虑,每张图片都必须完全满足给定的高度和宽度属性。

答案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}%
}

相关内容