将图片限制在节点上的形状内

将图片限制在节点上的形状内

tikzpicture在 内有一个平铺,tikzpictureshape星芒 为中心,重复node。我想用图片填充星芒。通常,对于这里的问题,我会将星芒从平铺中取出,并使用更简单的 MWE。但是,我不想要与使用 进行平铺不兼容的变通解决方案\sbox。我有这个,它可以按预期在平铺中产生星芒:

\documentclass[tikz]{standalone}

\usepackage[skins]{tcolorbox}
\usetikzlibrary{shapes}

\begin{document}
\newsavebox{\tileone}
\sbox{\tileone}{\let\newpage\relax%
 \begin{tikzpicture}[x=0.975cm,y=0.975cm]
    \clip (0,0.15) rectangle (2,2.15);
    \foreach \x in {0,1} {
            \foreach \y in {0,1} {
                \node[]  at (2*\x, 2*\y)
                { \includegraphics[width=0.065\textwidth]{globe.png}};
            \node[shape=starburst, fill=yellow, draw=red, very thin, rotate=10,
                /pgf/starburst point height=0.25cm, line width=0.25pt,
                minimum height=1.20cm, minimum width=1.20cm, name=ystar
                ] at (2*\x+1, 2*\y+1) {  };
                }
        }
    \begin{scope}[dashed,black]
        \draw plot (\x,\x-1);
        \draw plot (\x,\x+1);
        \draw plot (\x,-\x+1);
        \draw plot (\x,-\x+3);
    \end{scope}
\end{tikzpicture}%
}

\begin{tikzpicture}[x=1.0cm, y=1.0cm] 
        \tikzstyle{every node}=[font=\tiny]
    
        \path[draw,fill tile picture={\node[inner sep=0pt,outer sep=0pt,
                                    fill=blue!40!yellow, rounded corners=0.5ex]
                             {\scalebox{0.5}{\usebox{\tileone}}};
                                    }, rounded corners=1ex]  (0.0, 0.0) rectangle (4.0, 4.0);
\end{tikzpicture}
\end{document}

平铺中的星爆

当我] at (2*\x+1, 2*\y+1) { };用替换时] at (2*\x+1, 2*\y+1) {path picture bounding box.center={\node {\includegraphics[width=0.065\textwidth]{Fireball.png} } } };,我收到一条错误消息,即path picture未定义的控制序列,尽管Tikz & PGF manualforVersion 2.10-cvs表示节点已放置在路径上。当我ystar.center用替换时path picture bounding box.center,我收到另一个未定义的控制序列错误。

通过替换\node at (2*\x+1, 2*\y+1) {\includegraphics[width=0.065\textwidth]{Fireball.png}};整个星爆节点,我可以得到这个,但是图片已经是圆形了,而我想要的是星爆。

火热圆环

最后,我可以绘制一个形状并使用该边界框来修剪图片,但我不想绘制星芒的每个部分:

\draw[path picture={\node at (path picture bounding box.center) {
                              \includegraphics[height=2.50cm, trim=70 0 0 30, clip]
                                      {Fireball.png} };}, 
      draw=blue, thick] (2*\x+1, 2*\y+1) -- ++ (0,0.75) -- ++ (0.75, 0) -- cycle;

这不是我实际要使用的形状,但是这个过程确实根据形状修剪了图片。

其他答案

这是谈论shapes节点内部的事情,但我想要一个形状作为节点内部图片的边界框。TikZ:节点内部的不同形状

这显示了如何用图片填充(绘制的)矩形,但正如我上面所说,我并不想绘制形状。我想使用形状库中的形状:如何使用 TikZ 创建填充图像的矩形?

这解决了绘制用于修剪图片的矩形的一个特定功能,但不是我想要的:如何使用 TikZ 创建填充图像的矩形?

这谈论的是节点中包含图形,而不是边界框问题:在背景层上的范围内移动图片

这很接近,但不包括边界方面,这才是真正让我困惑的地方:如何在节点内排版 TikZ 图片?

答案1

我认为问题在于您尝试放置的位置path picture。它应该放在node选项中,而不是作为节点内容。

我没有globeFireball图像,但正如您所看到的,结果保持了star节点形状。

\documentclass[tikz]{standalone}

\usepackage[skins]{tcolorbox}
\usetikzlibrary{shapes}

\begin{document}
\newsavebox{\tileone}
\sbox{\tileone}{\let\newpage\relax%
 \begin{tikzpicture}[x=0.975cm,y=0.975cm]
    \clip (0,0.15) rectangle (2,2.15);
    \foreach \x in {0,1} {
            \foreach \y in {0,1} {
                \node[]  at (2*\x, 2*\y)
                { \includegraphics[width=0.065\textwidth]{example-image-A}};
            \node[shape=starburst, fill=yellow, draw=red, very thin, rotate=10,
                /pgf/starburst point height=0.25cm, line width=0.25pt,
                minimum height=1.20cm, minimum width=1.20cm, name=ystar,
                path picture={\node at (path picture bounding box.center) {\includegraphics[width=1cm]{example-image-B}};}
                ] at (2*\x+1, 2*\y+1) {  };
                }
        }
    \begin{scope}[dashed,black]
        \draw plot (\x,\x-1);
        \draw plot (\x,\x+1);
        \draw plot (\x,-\x+1);
        \draw plot (\x,-\x+3);
    \end{scope}
\end{tikzpicture}%
}

\begin{tikzpicture}[x=1.0cm, y=1.0cm] 
        \tikzstyle{every node}=[font=\tiny]
    
        \path[draw,fill tile picture={\node[inner sep=0pt,outer sep=0pt,
                                    fill=blue!40!yellow, rounded corners=0.5ex]
                             {\scalebox{0.5}{\usebox{\tileone}}};
                                    }, rounded corners=1ex]  (0.0, 0.0) rectangle (4.0, 4.0);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容