2020-09-29 10:41:53 +02:00
|
|
|
|
\chapter{Image}
|
|
|
|
|
\label{chap:image}
|
|
|
|
|
|
2020-11-10 02:40:30 +01:00
|
|
|
|
Le traitement des images est un art à part entière. Nous allons
|
|
|
|
|
voir quelques grands classiques de la catégorie pas du tout
|
|
|
|
|
interactif. Le genre de machin que l'on peut ranger au fond
|
|
|
|
|
d'un script shell pour le réutiliser la semaine prochaine.
|
|
|
|
|
|
2020-09-29 10:41:53 +02:00
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
\section{ImageMagick}\index{ImageMagick}
|
|
|
|
|
|
2020-11-01 19:32:45 +01:00
|
|
|
|
Attention, ça va devenir \textsl{hardu}%
|
2020-11-10 02:40:30 +01:00
|
|
|
|
\footnote{Nous attendons tous avec impatience l'ouvrage magistral
|
|
|
|
|
de maitre Brunus},
|
2020-11-13 01:35:31 +01:00
|
|
|
|
l'abondance d'options des outils ImageMagick est vraiment énorme,
|
|
|
|
|
et leurs interactions parfois troublantes\dots
|
|
|
|
|
|
|
|
|
|
\subsection{\texttt{geometry}}
|
|
|
|
|
|
|
|
|
|
C'est une notion importante, car elle est utilisée comme paramètre
|
|
|
|
|
par beaucoup d'options. C'est avec ça que l'on peut définir des
|
|
|
|
|
choses comme la taille (largeur et hauteur) d'une image, ou
|
|
|
|
|
la position d'un texte dans l'image, ou une zone sur laquelle
|
|
|
|
|
on va travailler.
|
2020-11-01 19:32:45 +01:00
|
|
|
|
|
|
|
|
|
\subsection{Écrire du texte}
|
|
|
|
|
|
|
|
|
|
Voici un exemple concret
|
|
|
|
|
(tiré du script d'encodage du \textsc{cloître}\index{cloître})
|
|
|
|
|
qui montre l'essentiel pour bien débuter. C'est une fonction
|
2020-11-10 02:40:30 +01:00
|
|
|
|
écrite en bash\index{bash} qui rajoute un texte sur une image. :
|
2020-11-01 19:32:45 +01:00
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
function tagpic
|
|
|
|
|
{
|
|
|
|
|
infile="$1"
|
|
|
|
|
outfile="$2"
|
|
|
|
|
texte="$3"
|
|
|
|
|
txtfont=" -font Utopia "
|
|
|
|
|
fontsize=" -pointsize 96 -kerning 6 "
|
|
|
|
|
color=" -fill Gray20 -stroke White "
|
|
|
|
|
txtopts=" -antialias -alpha off $txtfont "
|
|
|
|
|
convert $infile \
|
|
|
|
|
${txtopts} \
|
|
|
|
|
${txtfont} ${fontsize} \
|
|
|
|
|
${color} \
|
|
|
|
|
-gravity South \
|
|
|
|
|
-annotate +0+85 "${texte}" \
|
|
|
|
|
$outfile
|
|
|
|
|
}
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
2020-11-10 02:40:30 +01:00
|
|
|
|
Quelques explications semblent nécessaires, parce que certaines
|
|
|
|
|
options sont un peu ésotériques...
|
|
|
|
|
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item{txtfont}
|
|
|
|
|
\item{fontsize}
|
|
|
|
|
\item{colors}
|
|
|
|
|
\item{txtopts}
|
|
|
|
|
\item{-gravity}
|
|
|
|
|
\item{-annotate}
|
|
|
|
|
\end{itemize}
|
|
|
|
|
|
|
|
|
|
\subsection{Faire des GIFs animées}\index{GIF}
|
|
|
|
|
|
|
|
|
|
Ces images clignotantes sont l'essence même du Web\index{Web}
|
|
|
|
|
moderne depuis 1992, et \texttt{convert} sait très bien les
|
|
|
|
|
générer.
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
convert -delay 20 -loop 0 a.png b.png c.png foo.gif
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
Ce sujet pertinent est abordé plus en détails en
|
|
|
|
|
page \pageref{chap:gif89a}
|
|
|
|
|
|
|
|
|
|
\subsection{Extraire une partie de l'image}
|
|
|
|
|
|
|
|
|
|
Dans cette fonctionnalité aussi, il semble y avoir quelques
|
|
|
|
|
subtilités.
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
2020-11-13 01:35:31 +01:00
|
|
|
|
DIMENSION="1024x768"
|
|
|
|
|
POSITION="+R12+0"
|
|
|
|
|
convert -crop ${DIMENSION}${POSITION} +repage $img $dst
|
2020-11-10 02:40:30 +01:00
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
2020-11-13 01:35:31 +01:00
|
|
|
|
\textsl{Use +repage to completely remove/reset the virtual canvas meta-data
|
|
|
|
|
from the images.} En gros, on en a besoin quand une opération va
|
|
|
|
|
changer la dimension de l'image.
|
|
|
|
|
|
2020-09-29 10:41:53 +02:00
|
|
|
|
|
|
|
|
|
|
2020-11-01 19:32:45 +01:00
|
|
|
|
% -------------------------------------------------------------------
|
2020-09-29 10:41:53 +02:00
|
|
|
|
|
2020-11-01 19:32:45 +01:00
|
|
|
|
\section{Gmic}\index{Gmic}
|
2020-09-29 10:41:53 +02:00
|
|
|
|
|
2020-11-10 02:40:30 +01:00
|
|
|
|
XXX\index{XXX}
|
2020-09-29 10:41:53 +02:00
|
|
|
|
|
2020-11-10 02:40:30 +01:00
|
|
|
|
Existe aussi en plugin pour Gimp\index{Gimp}.
|
2020-09-29 10:41:53 +02:00
|
|
|
|
|
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
|
2020-11-10 02:40:30 +01:00
|
|
|
|
\section{NetPBM}\index{netpbm}\label{netpbm}
|
|
|
|
|
|
|
|
|
|
With the Netpbm file formats, it’s trivial to output pixels using
|
|
|
|
|
nothing but text based IO%
|
|
|
|
|
\footnote{https://www.vidarholen.net/contents/blog/?p=904}.
|
2020-09-29 10:41:53 +02:00
|
|
|
|
|
2020-11-10 02:40:30 +01:00
|
|
|
|
\begin{verbatim}
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
exec > my_image.ppm # All echo statements will write here
|
|
|
|
|
echo "P3 250 250 255" # magic, width, height, max component value
|
|
|
|
|
for ((y=0; y<250; y++)) {
|
|
|
|
|
for ((x=0; x<250; x++)) {
|
|
|
|
|
echo "$((x^y)) $((x^y)) $((x|y))" # r, g, b
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-11-13 01:35:31 +01:00
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
\subsection{Questions}
|
|
|
|
|
|
|
|
|
|
Comment faire un resize ?
|
|
|
|
|
|
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
\section{Portable Network Graphic}\index{PNG}
|
|
|
|
|
|
|
|
|
|
Voici le problème du soir%
|
|
|
|
|
\footnote{\textsl{trollday}Fri Nov 13 00:07:19 CET 2020} :
|
|
|
|
|
j'utilise pour lire ce format de fichier la bibliothèque
|
|
|
|
|
\texttt{pnglite} qui a de gros soucis avec beaucoup de
|
|
|
|
|
ceux-ci, par exemple ceux qui sont en \texttt{sRGB} crées
|
|
|
|
|
par des outils essentiels comme POVray\index{POVray}.
|
|
|
|
|
|
|
|
|
|
pngcrush ?
|
|
|
|
|
|
|
|
|
|
\texttt{pngtopnm \$png | pnmtopng > \$goodpng}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
% -------------------------------------------------------------------
|