png 파일에 투명 아이콘에 검정색이 있습니다. LaTeX 문서의 다른 위치에서 이 아이콘을 다른 색상으로 사용하고 싶습니다. 보너스로 아이콘의 위쪽 부분에 다른 배경의 테두리에 나타나는 경우가 있기 때문에 아래쪽 부분과 다른 색상을 지정할 수 있으면 좋을 것 같습니다.
이 답변회색조 png 파일을 색상화하는 방법을 보여 주며 위쪽 절반에 아래쪽 절반과 다른 색상을 지정하는 것은 쉽습니다. 안타깝게도 로고는 흰색 배경이어야 합니다.
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\fill[yellow!50!white] (0,1) rectangle (2,2);
\fill[gray!50!black] (0,0) rectangle (2,1);
\begin{scope}[blend group=screen]
\node[inner sep=0,line width=0] (logo) at (1,1) [anchor=center] {\includegraphics{icon-bw}};
\fill[blue] (logo.west) rectangle (logo.north east);
\fill[green] (logo.south west) rectangle (logo.east);
\end{scope}
\end{tikzpicture}
\end{document}
대신 검정색에서 투명 png를 사용하면 전체 노드가 파란색과 녹색으로 칠해집니다.
이 답변png 파일을 투명 마스크로 사용하는 방법을 보여줍니다. 하지만 (1,1)의 중앙에 오도록 아이콘을 어떻게 이동합니까?
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{fadings}
\begin{tikzfadingfrompicture}[name=icon]
\begin{scope}[transparency group]
\node (icon) [fill, draw, white] {\includegraphics[height=1cm]{icon}};
\begin{scope}[blend mode=difference]
\fill[white] (icon.south west) rectangle (icon.north east);
\end{scope}
\end{scope}
\end{tikzfadingfrompicture}
\begin{document}
\begin{tikzpicture}
\fill[yellow!50!white] (0,1) rectangle (2,2);
\fill[gray!50!black] (0,0) rectangle (2,1);
% How I intend to use it
\begin{scope}[scope fading=icon, fit fading=false]
\fill[blue] (0.5,1) rectangle (1.5,1.5);
\fill[green] (0.5,0.5) rectangle (1.5,1);
\end{scope}
% Approach of the original answer. The icon is not positioned correctly.
% The specified coordinate does not seem to make any difference.
\path[scope fading=icon,fit fading=false] (1,1);
\node[fill=yellow,minimum width=1cm,minimum height=1cm] {};
\end{tikzpicture}
\end{document}
내 실제 사용 사례에서 아이콘은 검정색과 투명도로만 구성됩니다. 따라서 중간 회색 톤에서는 답변이 작동하지 않는 경우 허용됩니다.
답변1
페이딩 패턴은 (0,0)을 중심으로 하며 이를 이동하는 유일한 방법은 \hspace
및 등을 사용하여 노드 내용을 이동하는 것입니다 \raisebox
. 구현을 이동하면 해당 위치(가장자리에서 벗어난)의 패턴이 사용됩니다. 중심에 있기 때문에 실제로 움직이는 거리의 두 배만큼 움직여야 합니다.
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{fadings}
\begin{tikzfadingfrompicture}[name=icon,inner sep=0]
\node [fill=transparent!0]
{\hspace{2cm}\raisebox{2cm}{\includegraphics[height=2cm, width=2cm]{images/icon}}};
\end{tikzfadingfrompicture}
\begin{document}
\begin{tikzpicture}
\fill[yellow!50!white] (0,1) rectangle (2,2);
\fill[gray!50!black] (0,0) rectangle (2,1);
\begin{scope}[shift={(1,1)}]
\path[scope fading=icon, fit fading=false];
\node[bottom color=blue,top color=green,minimum width=2cm,minimum height=2cm]{};
\end{scope}
\end{tikzpicture}
\end{document}
답변2
이 답변은 주로 두 가지 점에서 John Kormylo의 답변과 다릅니다.
- 나는 페이딩 정의 대신에 페이딩
fading transform
을 적용하는 곳을 사용하고 있습니다. 또한 . 그것이 얼마나 큰 차이인지는 잘 모르겠지만 패스 와 환경 에 대한 작업을 수행하지 못했습니다 .\hspace
\raisebox
path fading
scope fading
scope fading
fading transform
scope
- 투명한 부분 대신 검은색 부분이 채워지도록 png 파일의 색상을 반전시키고 있습니다.
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{fadings}
\newcommand\IconNodeContent{%
\includegraphics[height=1cm]{icon}%
}
\begin{tikzfadingfrompicture}[name=icon]
% I am using \fill[white] with blend mode=difference to invert the colors
% so that I can use my black on transparent icon without needing to convert it to white on transparent/black.
% This has the down side that the area around the icon node is not transparent but opaque.
% I am increasing the transparent area a little with draw thick to avoid a visible rectangle around the icon when filling it later.
\begin{scope}[transparency group]
\node (icon) [fill, draw, thick, white] {\IconNodeContent};
\begin{scope}[blend mode=difference]
\fill[white] (icon.south west) rectangle (icon.north east);
\end{scope}
\end{scope}
\end{tikzfadingfrompicture}
\begin{document}
\begin{tikzpicture}
% draw background
\fill[yellow!50!white] (0,1) rectangle (2,2);
\fill[gray!50!black] (0,0) rectangle (2,1);
% create an invisible node to define size and position of icon
\node (icon) at (1,1) [anchor=center, transparent] {\IconNodeContent};
% draw the top half of the icon in one color, shifting the coordinates 1pt inwards to make sure no border is visible
\fill[blue, path fading=icon, fit fading=false, fading transform={shift=(icon.center)}] ([shift={(1pt,-1pt)}] icon.north west) rectangle ([shift={(-1pt,+0pt)}] icon.east);
% draw the bottom half of the icon in another color, shifting the coordinates 1pt inwards to make sure no border is visible
\fill[green, path fading=icon, fit fading=false, fading transform={shift=(icon.center)}] ([shift={(1pt,+1pt)}] icon.south west) rectangle ([shift={(-1pt,-0pt)}] icon.east);
\end{tikzpicture}
\end{document}