TikZ:参考外部图片定义图案

TikZ:参考外部图片定义图案

我想根据外部图片用图案填充 tikz 图片。可以吗?如果可以,怎么做?

我尝试用定义一个新模式\pgfdeclarepatternformonly,但\pgfuseimage里面似乎没有有效的命令\pgfdeclarepatternformonly

评论:

  • 在我的例子中我使用了一个大理石-图片,但我的问题与这张特殊的图片无关。
  • 我强制将图块设置为 1cm。使用图块图像的实际尺寸可能更好。
  • 如果我定义\pgfdeclarepatternformonly后,\begin{document}LaTeX 错误就会消失,但模式不起作用。

我的 MNWE(最小不起作用的示例):

\documentclass[]{standalone}
\usepackage{tikz}
\usetikzlibrary{patterns}

%Source: http://upload.wikimedia.org/wikipedia/de/thumb/f/f9/LapG.jpg/83px-LapG.jpg
%But could be any other picture
\pgfdeclareimage[width=1cm,height=1cm]{marble}{83px-LapG}%force quadratic tile

\pgfdeclarepatternformonly{marble}{\pgfpoint{0cm}{0cm}}{\pgfpoint{1cm}{1cm}}{\pgfpoint{1cm}{1cm}}{
\pgfuseimage{marble}%! LaTeX Error: Missing \begin{document}.
}

\begin{document}

\begin{tikzpicture}
% This should create a rectangle with 15*15 tiles.
\draw[pattern=marble] (0,0) rectangle (15,15);
\end{tikzpicture} 

\end{document}

答案1

使用 是不可能的pattern,但使用path picture密钥和一些计算就可以。

我已经使用了纹理-s.blogspot.de


我把代码变成了一个小型的 TikZ 库,这是我的tikz-ext包裹

它的用法可以在下面或者手册中看到。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{shapes.geometric, ext.patterns.images}
\pgfsetupimageaspattern[width=1cm]{marble}{marble.jpg}
\pgfsetupimageaspattern[width=2cm]{wall}{concretewall8.jpg}
\pgfsetupimageaspattern[width=2cm]{floor}{pattern4183.jpg}
\begin{document}
\tikz\matrix[column sep=2mm]{
  \path[image as pattern={name=marble}] (0,0) circle[radius=1cm];
& \node[image as pattern={name=wall},star, star point ratio=2, minimum size=2cm] {};
& \path[even odd rule, image as pattern={name=floor}]
  (0,0) circle[radius=1cm] circle[radius=5mm];
& \draw[green, even odd rule, image as pattern={name=floor}]
  (0,0) circle[radius=1cm] circle[radius=5mm];
  \draw[blue, image as pattern={name=floor}]
    (-1cm, -1cm) (0,0) to[bend left] (2,1)
    --++(right:.1) to[bend left] (.1,0) -- cycle;
\\};
\end{document}

输出

在此处输入图片描述

答案2

使用 PSTricks 是可以实现的。

在此处输入图片描述

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{graphicx}
\usepackage{pst-fill}
\psboxfill{\includegraphics[scale=0.1]{example-image-A}}
\begin{document}
\begin{pspicture}(4,4)
    \pscircle[fillstyle=boxfill](2,2){2}
    \pscircle(2,2){2}
\end{pspicture}
\end{document}

答案3

对于非重复图案,path picture={\node{whatever thing to draw};}提供了极大的灵活性,例如,允许您在绝对位置的背景中绘制图像。否则,您可以按照建议使用 tcolorbox 包中的 TikZ 图像填充扩展这里

在此处输入图片描述

\documentclass{article}

\usepackage[skins]{tcolorbox}

\begin{document}

\noindent\begin{tikzpicture}
  \path[fill overzoom image=example-image-a] (0,0) rectangle (\textwidth,4cm);
\end{tikzpicture}

\medskip

\noindent\begin{tikzpicture}
  \path[fill stretch image=example-image-b] (0,0) rectangle (\textwidth,4cm);
\end{tikzpicture}

\medskip

\noindent\begin{tikzpicture}
  \path[fill tile image*={height=3cm}{example-image-c}] (0,0) rectangle (\textwidth,4cm);
\end{tikzpicture}

Absolute positioning:
% absolute coordinates
\noindent\begin{tikzpicture}
  [
    remember picture,
    absolute fill image/.style={
      path picture={
        \node[anchor=center] at (current page.center) {\includegraphics[width=\paperwidth,height=\paperheight]{#1}};
      }
    }
  ]
  \path[draw=green,absolute fill image={example-image-b}] (0,0) circle[radius=1cm];
  \path[draw=red,absolute fill image={example-image-b}] (.5,.5) circle[radius=1cm];
\end{tikzpicture}


\end{document}

相关内容