TikZ - 如何通过过滤器传递图像

TikZ - 如何通过过滤器传递图像

我有一张类似于此处重现的纹理背景的图像,我想在两个对角上显示从深蓝色到白色的不同颜色,就像被彩色镜片观看一样。

这里有纹理背景

我尝试了一些方法,例如:

\documentclass{report}

\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
        \node[opacity=0.4,fill=blue] at (0, 0) {\includegraphics[scale=0.5]{DvhfC.jpg}};
\end{tikzpicture}
\end{document}

但变化并没有完全达到白色,它还会在整个图片周围留下一个蓝色框架,如下所示:

在此处输入图片描述

TikZ 中是否有可以实现该功能的转换?

答案1

OP 中使用的方法是将不透明度添加到两个单独的对象(JPEG 图像、节点背景填充)并随后将它们叠加。但是,添加不透明度会消除原始 JPEG 的对比度,从而模糊其提供的纹理。结果,只能得到一张略显苍白的合成图片。

然而,规范方法是从 JPEG 图像中定义一个透明度蒙版(淡入淡出),稍后可用于遮盖其他图形对象。与阴影一样,pgf/TikZ 淡入淡出在使用前会缩放(参见PGF 手册,第 114.3 节)。因此,为了在应用蒙版时使用完整的 JPEG 图像,我们将其缩放到 50bp x 50bp 大小,并在创建蒙版时添加 25bp 的边距。

\documentclass{report}

\usepackage{tikz}
\usetikzlibrary{fadings}

\begin{document}

\begin{tikzfadingfrompicture}[name=mask image]
  \node [inner sep=25bp] {\includegraphics[width=50bp,height=50bp]{DvhfC}};
\end{tikzfadingfrompicture}%
% Now we use the mask in another picture:
\begin{tikzpicture}
  \fill [blue,path fading=mask image] (0,0) rectangle (1,1);
  \fill [red,path fading=mask image] (1,1) rectangle (4,4);
  \fill [green,path fading=mask image] (2,0) circle [radius=1cm];
\end{tikzpicture}

\end{document}

请注意,蒙版图像的较亮区域增加的透明度较少,而较暗区域则为被蒙版对象增加的透明度更多:

在此处输入图片描述

答案2

您可以将图像放在其上,然后shade在其上放置一些内容(TikZ 手册 15.7,“阴影路径”)。

\documentclass{report}

\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
    \node[opacity=0.5, inner sep=0pt](A) at (0, 0) {\includegraphics[scale=0.5]{DvhfC.jpg}};
    \shade [left color=blue, right color=white, shading angle=135, opacity=0.5]
           (A.south west) rectangle (A.north east);
\end{tikzpicture}
\end{document}

在此处输入图片描述

请注意,这种透明度技巧有时可以触发 PDF 查看器“功能”,因此请检查它是否正常工作(抓取自okular)。

相关内容