![TikZ - 如何通过过滤器传递图像](https://linux22.com/image/422355/TikZ%20-%20%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E8%BF%87%E6%BB%A4%E5%99%A8%E4%BC%A0%E9%80%92%E5%9B%BE%E5%83%8F.png)
我有一张类似于此处重现的纹理背景的图像,我想在两个对角上显示从深蓝色到白色的不同颜色,就像被彩色镜片观看一样。
我尝试了一些方法,例如:
\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
)。