将裁剪后的图像放置在其他图像上的最简单方法(Tikz)

将裁剪后的图像放置在其他图像上的最简单方法(Tikz)

(我确信很多人以前遇到过同样的问题,但我找不到任何地方。)

我有两个 PNG 文件,A 和 B。图像 A 就像一个框架,因此中间有一个空白区域。我想在这个区域中放置图像 B 的某些部分。我可能不想更改“纵横比”,因此在两个维度上对该部分进行相同的缩放。

在此处输入图片描述

因此,图像 B 中从 X,Y 开始的大小为 A,B 的矩形应占据图像 A 中 100,100 处的 400x600 像素空间(假设距离 B = 3/2 * A)。

我还想任意缩放图像 A。目前我有(例如):

\begin{tikzpicture}
\node {\includegraphics[witdh=0.5\textwidth]{image_a.png}};
\end{tikzpicture}

我如何才能最轻松地添加来自图像 B () 的位image_b.png。我觉得这应该是可能的,而无需定义任何新命令或引入任何命名变量。

澄清:我希望能够轻松改变距离 X、Y、A、B,所以最好它们各自恰好出现一次。

更多的:图像 B 中裁剪和缩放的部分不必完全适合图像 A 上的区域。此外,长度不必是像素。它可以是公制或分数或其他任何单位。我只想要一段相当紧凑的代码。

答案1

这展示了将裁剪的图像插入另一幅图像的孔中的一种方法。

保存框为我们提供了图像的尺寸(以像素以外的其他单位表示)。范围仅用于使剪辑本地化。它\fill仅用于显示洞的位置。

请注意,剪辑是根据 A 中的孔定义的。您所要做的就是移动图像 B,然后孔上方的内容将被裁剪以适应。

\documentclass{standalone}
\usepackage{graphicx}
\usepackage{tikz}

\newsavebox{\tempboxa}
\newsavebox{\tempboxb}

\begin{document}

\begin{tikzpicture}% start local definitions
  \savebox{\tempboxa}{\includegraphics[scale=2]{example-image-a}}% measure image A
  \savebox{\tempboxb}{\includegraphics[scale=2]{example-image-b}}% measure image B
  \node[inner sep=0pt] (A) {\usebox\tempboxa};
  \begin{scope}[shift=(A.south west)]
    \clip (0.25\wd\tempboxa, 0.8\ht\tempboxa) rectangle ++(0.5\wd\tempboxa,-0.6\ht\tempboxa);% hole in A
    \fill[red] (A.south west) rectangle (A.north east);% show hole in A (optional)
    \path (0.25\wd\tempboxa, 0.8\ht\tempboxa)% (left, top) of hole in A
      ++(-0.5\wd\tempboxb, -0.5\ht\tempboxb)% (-left, -top) of crop from B
      node[above right,inner sep=0pt]{\usebox\tempboxb};
  \end{scope}
\end{tikzpicture}
\end{document}

相关内容