Graphics and media/Custom image processing

From Wiki
Jump to navigation Jump to search

The following example changes the width of images based on file name extensions:

\setupexternalfigures[
  location={local,global,default},
  width=\textwidth
]
\defineexternalfigure[svg][width=1cm]
\defineexternalfigure[jpg][width=2cm]
\defineexternalfigure[png][width=4cm]

% Won't be applied because there's no process action.
% Default (\textwidth) is used, as defined above.
\defineexternalfigure[pdf][width=6cm]

\starttexdefinition includegraphics #1
  \splitfilename{#1}

  \processaction[\splitofftype][
    jpg=>{\externalfigure[#1][jpg]},
    png=>{\externalfigure[#1][png]},
    svg=>{\externalfigure[#1][svg][conversion=mp]},
    default=>{\externalfigure[#1]},
    unknown=>{\externalfigure[#1]}
  ]
\stoptexdefinition

\starttext
  \includegraphics{kitten.jpg}
  \includegraphics{mill.png}
  \includegraphics{cow.pdf}
  \includegraphics{tiger.svg}
\stoptext

It's also possible to use \setfigureconversion to instruct ConTeXt to use MetaPost when rendering SVG files. Such as:

\setfigureconversion[svg][mp]

\starttext
   \externalfigure[kitten.jpg][width=2cm]
   \externalfigure[mill.png]  [width=4cm]
   \externalfigure[cow.pdf]   [width=6cm]
   \externalfigure[tiger.svg] [width=1cm]
\stoptext