흰색이 아닌 배경에서 회색조 아이콘을 색상화하는 방법은 무엇입니까?

흰색이 아닌 배경에서 회색조 아이콘을 색상화하는 방법은 무엇입니까?

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}

흰색 배경이 추가된 아이콘 예시: icon-bw.png

대신 검정색에서 투명 png를 사용하면 전체 노드가 파란색과 녹색으로 칠해집니다.

배경이 투명한 아이콘 예시: icon.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\raiseboxpath fadingscope fadingscope fadingfading transformscope
  • 투명한 부분 대신 검은색 부분이 채워지도록 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}

산출

관련 정보