我想要这种效果:用半透明的灰色/白色矩形遮蔽图像(假设它们大小相同且位于相同位置)。
现在的关键问题是:
除了在外部创建一个空的 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
这使