遮蔽的最佳方法是什么?

遮蔽的最佳方法是什么?

我想要这种效果:用半透明的灰色/白色矩形遮蔽图像(假设它们大小相同且位于相同位置)。

现在的关键问题是:

除了在外部创建一个空的 eps 灰色/白色图形然后进行叠加之外,还有更好的解决方案吗?

答案1

我以前用过下面的方法(取自一些非常古老的tikz代码,并且肯定可以使用node) 进行改进:

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}% http://ctan.org/pkg/pgf
\begin{document}

\noindent
\setbox1=\hbox{\includegraphics[width=\linewidth]{example-image-a}}\usebox1
\vskip-\baselineskip
\smash{%
  \tikz{%
    \filldraw[blue,semitransparent] (0mm,0mm) -- (0mm,\ht1) -- (\wd1,\ht1) -- (\wd1,0mm) -- cycle;
  }%
}

\end{document}

您可以设置您的图像,然后叠加\tikz填充semitransparent


下面利用了Harish 的回答,但添加了可以与混合的键值选项graphicx\includegraphics

在此处输入图片描述

\documentclass{article}
\usepackage{xkeyval,graphicx,tikz}% http://ctan.org/pkg/{xkeyval,graphicx,pgf}
\makeatletter
\define@key{tikznode}{opacity}{\def\tikznode@opacity{#1}}
\define@key{tikznode}{fill}{\def\tikznode@fill{#1}}
\newcommand{\customizedIncludeGraphics}[2][,]{%
  \begin{tikzpicture}
    \setkeys*{Gin,tikznode}{fill = blue!50, opacity = 0.7, #1}% Set defaults
    \node [inner sep=0pt, outer sep = 0pt, fill = \tikznode@fill, opacity = \tikznode@opacity]
      {\includegraphics{#2}};
  \end{tikzpicture}%
}
\makeatother
\begin{document}

\customizedIncludeGraphics[width=50pt]{example-image-a}
\customizedIncludeGraphics[width=100pt, fill=brown]{example-image-a}
\customizedIncludeGraphics[width=123pt, opacity=0.2]{example-image-a}
\customizedIncludeGraphics[height=2\baselineskip, fill=green, opacity=0.9]{example-image-a}

\end{document}

默认值为fill=blue!50(50% 蓝色填充)和opacity=0.7(70% 透明;0 = 完全不透明)。

答案2

再次使用tikz

\documentclass{article}
\usepackage{tikz}
\newcommand{\myimage}[4]{%
\begin{tikzpicture}
\node [inner sep=0pt, outer sep = 0pt,fill = #1,opacity=#2]{\includegraphics[width=#3]{#4}};
\end{tikzpicture}%
}
\begin{document}
%% \myimage{<color>}{<transparency>}{<width>}{<image file name>}
\noindent\myimage{blue!40}{.7}{.4\linewidth}{example-image-a}
\hfill
\myimage{magenta!40}{.7}{.4\linewidth}{example-image-b}

\noindent\myimage{green!40}{.7}{.4\linewidth}{example-image-c}
\hfill
\myimage{blue!40!green!30}{.7}{.4\linewidth}{example-image}

\end{document}

在此处输入图片描述

答案3

使用 PSTricks。请使用 进行编译pdflatex -shell-escape inputfilename.tex

% this filename is inputfilename.tex
% compile it with pdflatex -shell-escape inputfilename.tex
\documentclass[preview,border=12pt]{standalone}
\usepackage{filecontents}
\begin{filecontents*}{image.tex}
\documentclass[pstricks]{standalone}
\usepackage{graphicx}
\newsavebox\IBox
\savebox\IBox{\includegraphics{example-image-a}}

\psset{xunit=\wd\IBox,yunit=\ht\IBox}
\begin{document}
\begin{pspicture}(1,1)
    \rput[bl](0,0){\usebox\IBox}
    \psframe[fillstyle=solid,fillcolor=orange,opacity=.25](1,1)
\end{pspicture}
\end{document}
\end{filecontents*}

\usepackage{pgffor,graphicx}
\foreach \compiler/\ext in {latex/tex,dvips/dvi,ps2pdf/ps}{\immediate\write18{\compiler\space image.\ext}}



\begin{document}
Is this the image, with a yellow transparent layer, you are looking for?

\section*{Original}
\includegraphics[scale=.5]{example-image-a}

\section*{With a yellow transparent layer}
\includegraphics[scale=.5]{image}
\end{document}

在此处输入图片描述

奖励答案

% this filename is inputfilename.tex
% compile it with pdflatex -shell-escape inputfilename.tex
\documentclass{article}
\usepackage[a4paper,hmargin=2cm,vmargin=1cm]{geometry}
\usepackage{filecontents}
\begin{filecontents*}{images.tex}
\documentclass[pstricks,dvipsnames,cmyk]{standalone}
\usepackage{etoolbox}

\def\temp{}

\begingroup
\renewcommand\DefineNamedColor[4]{\listgadd{\temp}{#2}}
\input{dvipsnam.def}
\endgroup
\def\do#1{#1,}
\edef\ColorList{\dolistloop{\temp}end}

\usepackage{graphicx,bera}
\newsavebox\IBox
\savebox\IBox{\includegraphics{example-image-a}}
\psset{xunit=\wd\IBox,yunit=\ht\IBox}

\begin{document}
\fontsize{40pt}{15pt}\selectfont
\psforeach{\x}{\ColorList}
{
    \expandafter\ifstrequal\expandafter{\x}{end}{}
    {
        \begin{pspicture}(1,1)
            \rput[bl](0,0){\usebox\IBox}
            \psframe[fillstyle=solid,fillcolor=\x,opacity=.75](1,1)
            \rput(0.5,.85){\x}
        \end{pspicture}
    }
}
\end{document}
\end{filecontents*}

\usepackage{pgffor,graphicx}
\foreach \compiler/\ext in {latex/tex,dvips/dvi,ps2pdf/ps}{\immediate\write18{\compiler\space images.\ext}}

\pdfximage{images.pdf}
\begin{document}
\noindent\foreach \x in {1,...,\the\pdflastximagepages}{\includegraphics[page=\x,scale=.25]{images} }
\end{document}

在此处输入图片描述

答案4

为了进行比较,您可以这样在 ConTeXt 中实现相同的效果

% Search figures in TEXMF tree
\setupexternalfigures
    [location={local,global,default}]

\definecolor[transparentblue][b=1,t=.5,a=1]

\starttext

\startcombination[nx=2]
  {\externalfigure[mill.png]]}
  {Normal figure}
  {\externalfigure[mill.png][background={foreground,color}, backgroundcolor=transparentblue]}
  {Transparent overshadow}
\stopcombination

在此处输入图片描述

这个想法很简单。每个externalfigure都是frame,并且框架的属性之一是您可以设置background。默认背景之一是color,它用 填充背景backgroundcolor

现在你想要的可以被认为是背景放置在内容上方,而不是下方。指定background={foreground,color}告诉 ConTeXt 首先放置foreground图层(即包含内容的图层),然后将图层放置color在其上方。

这个想法适用于任何接受background键的 ConTeXt 环境:framed、framedtext、TABLE、页面背景等。

如果要将其应用于多张图片,那么您可以定义

\defineexternalfigure[tint][background={foreground,color}, backgroundcolor=transparentblue]

并按如下方式使用

\externalfigure[filename][tint]

这将为图形添加阴影。如果需要,可以使用以下方法覆盖阴影颜色

\externalfigure[filename][tint][backgroundcolor=transparentred]

这是一个完整的例子。

% Search figures in TEXMF tree
\setupexternalfigures
    [location={local,global,default}]

\definecolor[transparentblue][b=1,t=.5,a=1]
\definecolor[transparentred][r=1,t=.5,a=1]

\defineexternalfigure[tint][background={foreground,color}, backgroundcolor=transparentblue]

\starttext

\startcombination[nx=2]
  {\externalfigure[mill.png][tint]}
  {Default tint}
  {\externalfigure[mill.png][tint][backgroundcolor=transparentred]}
  {Override shadow color}
\stopcombination

\stoptext

这使

在此处输入图片描述

相关内容