Tikz: resalta texto en una imagen

Tikz: resalta texto en una imagen

¿Cómo puedo resaltar texto en una imagen con tikz usando un rectángulo y llenar el resto de la página con un tono gris (o negro opaco)? Vea el ejemplo a continuación (tomado deaquí)?

ingrese la descripción de la imagen aquí

Puedes ver una captura de pantalla tomada de GIMP donde simplemente resalto el texto usando la herramienta de selección de rectángulos. ¿Cómo puedo lograr un efecto similar usando tikz en xetex (sin las líneas discontinuas amarillas en los bordes)?

Mi código que tengo hasta ahora es:

\begin{tikzpicture}[remember picture, overlay]
        \node [anchor=south west,inner sep=0] (A) at (0,0) {\includegraphics[width=\linewidth, height=\paperheight]{image}}{};
        \fill [draw=none, fill=black, fill opacity=0.3]
        (0,0) -- 
        (A.north west) -- (A.north east) -- (A.south east) -- 
        (0,0) -- (0,0) -- cycle;
        \filldraw [fill=white, draw=white, fill opacity=.3] (3.2,3.2) rectangle (14.6,10.5);
    \end{tikzpicture}

El problema con el que me encuentro con este código es que llenar toda la página con un negro opaco y llenar el rectángulo con un blanco opaco da como resultado un gris opaco.

Respuesta1

Aquí tenéis una receta y una aplicación. Primero la receta, usandoesta respuesta.

  1. Agrega una cuadrícula en la parte superior.
  2. Dibuja el contorno que deseas resaltar.
  3. Utilice el contorno en un even odd rulerelleno (y suelte la cuadrícula).

A propósito utilicé un documento en el que quizás no quieras usar un cuadro horizontal.

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\foreach \X in {0,1,2}
{\begin{tikzpicture}
    \node[anchor=south west,inner sep=0] (image) at (0,0) 
    {\includegraphics[width=0.9\textwidth]{Dunlap_broadside_copy_of_the_United_States_Declaration_of_Independence,_LOC.jpg}};
    % ^^^ https://upload.wikimedia.org/wikipedia/commons/4/4e/Dunlap_broadside_copy_of_the_United_States_Declaration_of_Independence%2C_LOC.jpg
    \begin{scope}[x={(image.south east)},y={(image.north west)}]
      \path[use as bounding box] (-0.1,-0.1) rectangle (1,1);
       % ^^^ only for animation
      \ifnum\X<2
        \draw[help lines,xstep=.1,ystep=.1] (0,0) grid (1,1);
        \foreach \x in {0,1,...,9} { \node [anchor=north] at (\x/10,0) {0.\x}; }
        \foreach \y in {0,1,...,9} { \node [anchor=east] at (0,\y/10) {0.\y}; }
      \fi   
      \ifnum\X=1    
        \draw (0.11,0.4) -- (0.37,0.404) --  (0.37,0.414) -- (0.11,0.41) -- cycle;
      \fi
      \ifnum\X=2
        \fill[even odd rule,opacity=0.4]
        (0.11,0.4) -- (0.37,0.404) --  (0.37,0.414) -- (0.11,0.41) -- cycle
        (0,0) rectangle (1,1);
      \fi       
    \end{scope} 
\end{tikzpicture}}
\end{document}

ingrese la descripción de la imagen aquí

Por supuesto, al final dejas todas las cosas auxiliares para llegar a

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}
    \node[anchor=south west,inner sep=0] (image) at (0,0) 
    {\includegraphics[width=0.9\textwidth]{Dunlap_broadside_copy_of_the_United_States_Declaration_of_Independence,_LOC.jpg}};
    % ^^^ https://upload.wikimedia.org/wikipedia/commons/4/4e/Dunlap_broadside_copy_of_the_United_States_Declaration_of_Independence%2C_LOC.jpg
    \begin{scope}[x={(image.south east)},y={(image.north west)}]
        \fill[even odd rule,opacity=0.4]
        (0.11,0.4) -- (0.37,0.404) --  (0.37,0.414) -- (0.11,0.41) -- cycle
        (0,0) rectangle (1,1);
    \end{scope} 
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Si mi elección del texto resaltado tiene o no algo que ver con un muro en la frontera con México, no quiero dar más detalles.

Respuesta2

Dependiendo del formato de las imágenes, no tikzse requiere:

\documentclass{article}
\usepackage{graphicx,stackengine,trimclip}
\begin{document}
\stackinset{l}{150pt}{b}{130pt}{%
  \clipbox{150pt 130pt 100pt 50pt}{\includegraphics{example-image.jpg}}%
}{%
  \includegraphics[decodearray={.3 .5 .3 .5 .3 .5}]{example-image.jpg}%
}
\end{document}

ingrese la descripción de la imagen aquí

Dependiendo de la paleta de colores, es decodearrayposible que sea necesario modificar:

\documentclass{article}
\usepackage{graphicx,stackengine,trimclip}
\begin{document}
\stackinset{l}{20pt}{b}{40pt}{%
  \clipbox{20pt 40pt 15pt 15pt}{\includegraphics{example-grid-100x100bp.png}}%
}{%
  \includegraphics[decodearray={.3 .6 .3 .6 .3 .6}]{example-grid-100x100bp.jpg}%
}
\end{document}

decodearrayno funcionará para cmykcombinaciones de colores y solo para un número limitado de formatos de imagen (uno de ellos es jpeg).

ingrese la descripción de la imagen aquí

información relacionada