2020-09-29 19:41:53 +11:00
|
|
|
|
\chapter{Image}
|
|
|
|
|
\label{chap:image}
|
|
|
|
|
|
2020-11-10 12:40:30 +11: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.
|
|
|
|
|
|
2022-06-24 12:19:32 +11:00
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item{ImageMagick}
|
|
|
|
|
\item{Gmic}
|
|
|
|
|
\item{NetPBM}
|
|
|
|
|
\item{Portable Network Graphic}
|
|
|
|
|
\item{TIFF}
|
|
|
|
|
\end{itemize}
|
|
|
|
|
|
2020-09-29 19:41:53 +11:00
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
\section{ImageMagick}\index{ImageMagick}
|
|
|
|
|
|
2020-11-02 05:32:45 +11:00
|
|
|
|
Attention, ça va devenir \textsl{hardu}%
|
2020-11-10 12:40:30 +11:00
|
|
|
|
\footnote{Nous attendons tous avec impatience l'ouvrage magistral
|
|
|
|
|
de maitre Brunus},
|
2020-11-13 11:35:31 +11:00
|
|
|
|
l'abondance d'options des outils ImageMagick est vraiment énorme,
|
|
|
|
|
et leurs interactions parfois troublantes\dots
|
|
|
|
|
|
2020-12-12 14:13:54 +11:00
|
|
|
|
Il y a plusieurs binaires dans le paquet : \texttt{convert} pour
|
|
|
|
|
la plupart des traitements,
|
|
|
|
|
\texttt{display} et \texttt{animate} pour visualiser des images,
|
|
|
|
|
\texttt{identify} pour en lire les méta-données.
|
|
|
|
|
|
2022-06-24 12:19:32 +11:00
|
|
|
|
Ils partagent un certain nombre d'options communes.
|
|
|
|
|
Certains d'entre eux peuvent avoir un effet destructif%
|
|
|
|
|
\footnote{En plus d'avoir un nom de série $Z$.},
|
|
|
|
|
vous êtes prévenus.
|
|
|
|
|
|
2020-12-12 14:13:54 +11:00
|
|
|
|
\subsection{L'option \texttt{-geometry}}
|
2020-11-13 11:35:31 +11:00
|
|
|
|
|
|
|
|
|
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-02 05:32:45 +11:00
|
|
|
|
|
2021-04-16 07:50:39 +11:00
|
|
|
|
Et c'est assez compliqué, mais pas que.
|
|
|
|
|
|
|
|
|
|
\begin{tabular}{|l|p{7cm}|}
|
|
|
|
|
\hline
|
|
|
|
|
Code & Signification \\
|
|
|
|
|
\hline
|
|
|
|
|
scale\% & Height and width both scaled by specified percentage. \\
|
|
|
|
|
scale-x\%xscale-y\% & Height and width individually scaled by specified percentages. (Only one \% symbol needed.) \\
|
|
|
|
|
width & Width given, height automagically selected to preserve aspect ratio. \\
|
|
|
|
|
xheight & Height given, width automagically selected to preserve aspect ratio. \\
|
|
|
|
|
widthxheight & Maximum values of height and width given, aspect ratio preserved. \\
|
|
|
|
|
widthxheight\^ & Minimum values of width and height given, aspect ratio preserved. \\
|
|
|
|
|
widthxheight! & Width and height emphatically given, original aspect ratio ignored. \\
|
|
|
|
|
widthxheight> & Shrinks an image with dimension(s) larger than the corresponding width and/or height argument(s). \\
|
|
|
|
|
widthxheight< & Enlarges an image with dimension(s) smaller than the corresponding width and/or height argument(s). \\
|
|
|
|
|
area@ & Resize image to have specified area in pixels. Aspect ratio is preserved. \\
|
|
|
|
|
x:y & Here x and y denotes an aspect ratio (e.g. 3:2 = 1.5). \\
|
|
|
|
|
\hline
|
|
|
|
|
\end{tabular}
|
|
|
|
|
|
2022-09-12 10:36:48 +11:00
|
|
|
|
% !!!
|
|
|
|
|
% est-il nécessaire de traduire ce tableau ?
|
2021-04-16 07:50:39 +11:00
|
|
|
|
|
2020-11-02 05:32:45 +11: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-12-12 14:13:54 +11:00
|
|
|
|
écrite en bash\index{bash} qui rajoute un texte sur une image~:
|
2020-11-02 05:32:45 +11:00
|
|
|
|
|
2020-11-24 10:42:06 +11:00
|
|
|
|
\lstinputlisting[language=sh]{code/tagpic.sh}
|
2020-11-02 05:32:45 +11:00
|
|
|
|
|
2022-09-12 10:36:48 +11:00
|
|
|
|
Une petite commande toute bête pour rajouter la date facilement à une photo
|
|
|
|
|
d’après les données EXIF\index{EXIF}~:
|
|
|
|
|
|
|
|
|
|
\begin{lstlisting}
|
2022-10-31 08:51:57 +11:00
|
|
|
|
convert nom_du_fichier_source.jpg -gravity SouthEast \
|
|
|
|
|
-font Fudd-Regular -pointsize 40 -fill white \
|
|
|
|
|
-annotate +20+20 "%[exif:DateTimeOriginal]" \
|
2022-09-12 10:36:48 +11:00
|
|
|
|
-quality 100 nom_du_fichier_destination.jpg
|
|
|
|
|
\end{lstlisting}
|
|
|
|
|
|
2020-11-10 12:40:30 +11:00
|
|
|
|
Quelques explications semblent nécessaires, parce que certaines
|
2020-11-24 10:42:06 +11:00
|
|
|
|
options sont un peu ésotériques et parfois inter-dépendantes\dots
|
2020-11-10 12:40:30 +11:00
|
|
|
|
|
2022-10-31 08:51:57 +11:00
|
|
|
|
\begin{tabular}{|l|p{7cm}|}
|
|
|
|
|
\hline
|
2022-12-17 06:41:32 +11:00
|
|
|
|
Code & Signification \\
|
2022-10-31 08:51:57 +11:00
|
|
|
|
\hline
|
2022-12-17 06:41:32 +11:00
|
|
|
|
-txtfont & \\
|
|
|
|
|
-fontsize & taille des caractères \\
|
|
|
|
|
-kerning & espacement entre les caractères \\
|
|
|
|
|
-color & couleur de l'encre \\
|
|
|
|
|
-stroke & couleur 'bord' de caractère \\
|
|
|
|
|
-strokewidth & largeur de la bordure \\
|
|
|
|
|
-txtopts & \textsl{Gni?} \\
|
|
|
|
|
-gravity & vers quel point cardinal le texte va-t-il être \textsl{tiré} ? \\
|
|
|
|
|
-annotate & \texttt{+30+30 "texte à écrire"} \\
|
2022-10-31 08:51:57 +11:00
|
|
|
|
\hline
|
|
|
|
|
\end{tabular}
|
|
|
|
|
|
2022-12-17 06:41:32 +11:00
|
|
|
|
Pour avoir la liste des couleurs disponibles : \texttt{convert -list color}
|
2024-01-11 11:49:15 +11:00
|
|
|
|
et celles des polices de caractère : \texttt{convert -list font}.
|
2022-10-31 08:51:57 +11:00
|
|
|
|
|
2020-11-10 12:40:30 +11:00
|
|
|
|
\begin{itemize}
|
2022-10-31 08:51:57 +11:00
|
|
|
|
\item{Comment mettre une couleur de fond à ce texte ?}
|
2023-01-30 08:16:13 +11:00
|
|
|
|
\item{Et un texte semi-transparent ?}
|
2020-11-10 12:40:30 +11:00
|
|
|
|
\end{itemize}
|
|
|
|
|
|
2023-01-30 08:16:13 +11:00
|
|
|
|
% ------------------------------------------
|
|
|
|
|
% faire des affiches
|
|
|
|
|
\subsection{montage}\index{montage}
|
2021-01-20 14:53:48 +11:00
|
|
|
|
|
2022-09-12 10:36:48 +11:00
|
|
|
|
\begin{quote}
|
|
|
|
|
create a composite image by combining several separate images. The images are
|
|
|
|
|
tiled on the composite image optionally adorned with a border, frame,
|
|
|
|
|
image name, and more.
|
|
|
|
|
\end{quote}
|
|
|
|
|
|
|
|
|
|
Krkrkr\dots
|
2020-12-12 14:13:54 +11:00
|
|
|
|
|
2023-01-30 08:16:13 +11:00
|
|
|
|
% ------------------------------------------
|
|
|
|
|
|
2022-12-17 06:41:32 +11:00
|
|
|
|
\subsection{Faire des GIFs animées}\index{gif89a}
|
2020-11-10 12:40:30 +11:00
|
|
|
|
|
2020-12-12 14:13:54 +11:00
|
|
|
|
Ces petites images clignotantes sont l'essence même du
|
|
|
|
|
Web\index{web} moderne depuis 1992 malgré leurs limitations,
|
2023-01-30 08:16:13 +11:00
|
|
|
|
et \texttt{convert} sait très bien\footnote{modulo un taux de
|
|
|
|
|
compression pas génial.} les générer.
|
2022-09-12 10:36:48 +11:00
|
|
|
|
Encore un grand merci à Compuserve\index{Compuserve} pour cette
|
|
|
|
|
création essentielle à l'art graphique moderne.
|
2020-11-10 12:40:30 +11:00
|
|
|
|
|
|
|
|
|
\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
|
2023-01-30 08:16:13 +11:00
|
|
|
|
page \pageref{chap:gif89a} avec, nous l'espérons, un exemple
|
|
|
|
|
de dithering avec la palette de couleur \texttt{EGA}\index{EGA}.
|
2020-11-10 12:40:30 +11:00
|
|
|
|
|
2021-04-16 07:50:39 +11:00
|
|
|
|
% ------------------------------------------
|
|
|
|
|
|
2020-11-10 12:40:30 +11:00
|
|
|
|
\subsection{Extraire une partie de l'image}
|
|
|
|
|
|
|
|
|
|
Dans cette fonctionnalité aussi, il semble y avoir quelques
|
|
|
|
|
subtilités.
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
2020-11-13 11:35:31 +11:00
|
|
|
|
DIMENSION="1024x768"
|
|
|
|
|
POSITION="+R12+0"
|
|
|
|
|
convert -crop ${DIMENSION}${POSITION} +repage $img $dst
|
2020-11-10 12:40:30 +11:00
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
2020-12-12 14:13:54 +11: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
|
2021-04-16 07:50:39 +11:00
|
|
|
|
changer la dimension de l'image. En détail, j'ai pas tout compris.
|
|
|
|
|
|
|
|
|
|
% ------------------------------------------
|
2020-11-13 11:35:31 +11:00
|
|
|
|
|
2022-09-12 10:36:48 +11:00
|
|
|
|
\subsection{conversion vers TGA} \index{TGA}
|
|
|
|
|
|
|
|
|
|
On trouve encore en circulation de très vieux logiciels qui ne savent lire
|
|
|
|
|
qu'un encore plus ancien format : \textsl{Targa file format}.
|
2022-12-17 06:41:32 +11:00
|
|
|
|
Et dans une variante bien précise : mode \textsc{rgb} et non compressé%
|
|
|
|
|
\footnote{Un jour, peut-être, ça va changer\dots}.
|
2022-09-12 10:36:48 +11:00
|
|
|
|
|
2022-12-17 06:41:32 +11:00
|
|
|
|
Il nous faut donc une incantation bien précise avec, heureusement, des
|
|
|
|
|
arguments aux noms évocateurs :
|
2022-09-12 10:36:48 +11:00
|
|
|
|
|
|
|
|
|
\begin{lstlisting}
|
|
|
|
|
GOTO_TGA ()
|
|
|
|
|
{
|
|
|
|
|
convert $1 \
|
|
|
|
|
-compress none \
|
|
|
|
|
-alpha off \
|
|
|
|
|
-colorspace RGB \
|
|
|
|
|
-type truecolor \
|
|
|
|
|
$2
|
|
|
|
|
}
|
|
|
|
|
\end{lstlisting}
|
|
|
|
|
|
|
|
|
|
On peut aussi procéder autrement, avec les outils PNM\index{PNM} :
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
pngtopnm \$negatif | ppmtotga -rgb -norle > \$picz
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
% ------------------------------------------
|
|
|
|
|
|
2023-01-30 08:16:13 +11:00
|
|
|
|
\subsection{identify}\index{identify}
|
|
|
|
|
|
|
|
|
|
Cette commande nous fournit un ensemble d'informations\footnote{aka metadata}
|
|
|
|
|
pertinentes sur un fichier image~: format, résolution, couleur ou n/b,
|
|
|
|
|
nombre de bits par pixel\dots
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
tth@konrad:~/GravityField $ identify WS/nanim//00000.pgm graph.png
|
|
|
|
|
WS/nanim//00000.pgm PGM 2048x2048 2048x2048+0+0 16-bit Grayscale
|
|
|
|
|
Gray 20.5765MiB 0.690u 0:00.690
|
|
|
|
|
graph.png PNG 640x640 640x640+0+0 8-bit sRGB 102c 18165B 0.000u 0:00.000
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
https://imagemagick.org/script/escape.php
|
|
|
|
|
|
|
|
|
|
Et ces données peuvent être utilisé pour rajouter une simili
|
|
|
|
|
\textsc{IA}\footnote{Sorry, private joke inside\dots}
|
|
|
|
|
|
|
|
|
|
% ------------------------------------------
|
|
|
|
|
|
2024-01-11 11:49:15 +11:00
|
|
|
|
%
|
|
|
|
|
% http://al.howardknight.net/?ID=170228531600
|
|
|
|
|
%
|
|
|
|
|
|
2023-12-11 19:55:45 +11:00
|
|
|
|
\subsection{Configuration}
|
|
|
|
|
|
|
|
|
|
La configuration est dans le répertoire \texttt{/etc/ImageMagick-6/}, et
|
|
|
|
|
on y trouve en particulier le fichier
|
|
|
|
|
\texttt{policy.xml}\footnote{Le XML, c'est comme la violence...} où
|
|
|
|
|
certaines ressources, comme la mémoire utilisable, peuvent être réglées.
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
$ identify -list resource
|
|
|
|
|
Resource limits:
|
|
|
|
|
Width: 16KP
|
|
|
|
|
Height: 16KP
|
|
|
|
|
List length: 18.446744EP
|
|
|
|
|
Area: 128MP
|
|
|
|
|
Memory: 256MiB
|
|
|
|
|
Map: 512MiB
|
|
|
|
|
Disk: 1GiB
|
|
|
|
|
File: 768
|
|
|
|
|
Thread: 4
|
|
|
|
|
Throttle: 0
|
|
|
|
|
Time: unlimited
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
2024-01-11 11:49:15 +11:00
|
|
|
|
Vous pouvez aussi tenter de comprendre le contenu du fichier
|
|
|
|
|
\texttt{thresholds.xml} puis revenir me l'expliquer juste après
|
2023-12-11 19:55:45 +11:00
|
|
|
|
ma sieste, je pense que ça permet de jouer sur différentes méthodes
|
|
|
|
|
de \textsl{dithering}, par exemple pour faire du Bayer.
|
|
|
|
|
|
|
|
|
|
% ------------------------------------------
|
|
|
|
|
|
2022-01-30 08:46:41 +11:00
|
|
|
|
\subsection{Trucs}
|
|
|
|
|
|
2022-09-12 10:36:48 +11:00
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item{convert -average frame*.png output.png}
|
2024-01-11 11:49:15 +11:00
|
|
|
|
\item{convert -brightness-contrast 20\% foo.png bar.png}
|
2022-09-12 10:36:48 +11:00
|
|
|
|
\end{itemize}
|
|
|
|
|
|
2023-01-30 08:16:13 +11:00
|
|
|
|
Il y en plein d'autres, des tricks \textsl{àlc} à découvrir.
|
|
|
|
|
Ce sera, pour vous amis lecteurs, une dure mission à assumer.
|
|
|
|
|
|
2022-01-30 08:46:41 +11:00
|
|
|
|
|
2024-01-11 11:49:15 +11:00
|
|
|
|
|
2022-01-30 08:46:41 +11:00
|
|
|
|
% ------------------------------------------
|
|
|
|
|
|
2020-12-12 14:13:54 +11:00
|
|
|
|
\subsection{Ressources}
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
2023-10-09 06:56:41 +11:00
|
|
|
|
Le futur livre de Brunus.
|
|
|
|
|
|
2024-01-11 11:49:15 +11:00
|
|
|
|
Réclamez les premiers drafts dans
|
2023-10-09 06:56:41 +11:00
|
|
|
|
l'IRC\index{IRC} \texttt{libera.chat\#paulla} \textit{:)}
|
2020-12-12 14:13:54 +11:00
|
|
|
|
|
|
|
|
|
\texttt{http://www.fmwconcepts.com/imagemagick/index.php}
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
2021-04-16 07:50:39 +11:00
|
|
|
|
% https://legacy.imagemagick.org/Usage/resize/
|
|
|
|
|
|
2020-11-02 05:32:45 +11:00
|
|
|
|
% -------------------------------------------------------------------
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
2020-11-02 05:32:45 +11:00
|
|
|
|
\section{Gmic}\index{Gmic}
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
2020-12-12 14:13:54 +11:00
|
|
|
|
\textsl{Perform generic image processing operations, through the G'MIC
|
|
|
|
|
language interpreter. gmic: GREYC's Magic for Image Computing.}
|
|
|
|
|
|
2022-09-12 10:36:48 +11:00
|
|
|
|
Gmic se base sur une grosse\footnote{énorme, même. dans les deux sens\dots}
|
|
|
|
|
bibliothèque de fonctions écrite
|
2022-04-03 20:56:49 +11:00
|
|
|
|
en \texttt{C++}\index{C++} dont l'utilisation est bien
|
2022-12-17 06:41:32 +11:00
|
|
|
|
documentée dans le livre ???\index{XXX} mais nécessite quand même
|
|
|
|
|
de solides bases dans les subtilitées fourbes du \texttt{C++}.
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
2022-06-10 06:08:46 +11:00
|
|
|
|
Gmic existe aussi en plugin pour Gimp\index{Gimp} avec une interface
|
2022-04-03 20:56:49 +11:00
|
|
|
|
pleine de curseurs et de boutons, qui facilite (ou pas) l'exploration
|
|
|
|
|
des possibles.
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
|
2020-11-10 12:40:30 +11: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 19:41:53 +11:00
|
|
|
|
|
2020-11-10 12:40:30 +11: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 11:35:31 +11:00
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
\subsection{Questions}
|
|
|
|
|
|
2020-12-12 14:13:54 +11:00
|
|
|
|
Comment faire un \textsl{resize} avec NetPBM ?
|
2020-12-23 08:53:57 +11:00
|
|
|
|
Est-il nécessaire d'apprendre la bibliothèque de fonctions
|
2022-04-03 20:56:49 +11:00
|
|
|
|
\texttt{libnetpbm}\footnote{Réponse: oui.} ?
|
2020-11-13 11:35:31 +11:00
|
|
|
|
|
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
\section{Portable Network Graphic}\index{PNG}
|
|
|
|
|
|
|
|
|
|
Voici le problème du soir%
|
2020-12-12 14:13:54 +11:00
|
|
|
|
\footnote{\textsl{trollday} Fri Nov 13 00:07:19 CET 2020} :
|
2020-11-13 11:35:31 +11:00
|
|
|
|
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
|
2022-06-10 06:08:46 +11:00
|
|
|
|
par des outils essentiels comme POVray\index{Povray}.
|
2020-12-23 08:53:57 +11:00
|
|
|
|
Il serait bon de voir la \texttt{libpng} officielle.
|
2020-11-13 11:35:31 +11:00
|
|
|
|
|
2020-12-23 08:53:57 +11:00
|
|
|
|
pngcrush ? optipng ?
|
2020-11-13 11:35:31 +11:00
|
|
|
|
|
|
|
|
|
\texttt{pngtopnm \$png | pnmtopng > \$goodpng}
|
|
|
|
|
|
2020-12-23 08:53:57 +11:00
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
\section{Tag Image File Format} \index{TIFF} \label{TIFF}
|
|
|
|
|
|
|
|
|
|
\begin{quote}
|
|
|
|
|
Yes, but tiffcp is by far the most significant case. And perhaps one of the
|
|
|
|
|
most used of the tools. I may not be impartial on this, though :-) because I
|
|
|
|
|
use it heavily.
|
|
|
|
|
\end{quote}
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
tiffcp combines one or more files created according to the Tag Image
|
|
|
|
|
File Format, Revision 6.0 into a single TIFF file. Because the output
|
|
|
|
|
file may be compressed using a different algorithm than the input
|
|
|
|
|
files, tiffcp is most often used to convert between different compres‐
|
|
|
|
|
sion schemes.
|
|
|
|
|
\end{verbatim}
|
2020-11-13 11:35:31 +11:00
|
|
|
|
|
2022-12-17 06:41:32 +11:00
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
|
\section {EXIF} \index{EXIF}
|
|
|
|
|
|
2023-01-01 01:39:58 +11:00
|
|
|
|
Un \textit{tag} EXIF est un petit morceau d'information nommée inclus
|
|
|
|
|
dans un fichier image. Il peut contenir des données comme la sensibilité
|
|
|
|
|
ISO\index{ISO} du capteur, ou le modèle d'objectif utilisé.
|
|
|
|
|
|
|
|
|
|
D'autres informations en page \pageref{whatisExdif}
|
2022-12-17 06:41:32 +11:00
|
|
|
|
|
2022-06-24 12:19:32 +11:00
|
|
|
|
% -------------------------------------------------------------------
|
2020-11-13 11:35:31 +11:00
|
|
|
|
|
2022-06-24 12:19:32 +11:00
|
|
|
|
\section{Cimg} \index{Cimg}
|
|
|
|
|
|
|
|
|
|
\texttt{Cimg} est l'énorme bibliothèque de fonctions
|
|
|
|
|
(écrites en \texttt{C++}\footnote{\textsc{wtf?}}) sur lesquelles
|
2022-12-17 06:41:32 +11:00
|
|
|
|
est basé Gmic. C'est long à compiler, ça produit des binaires
|
2022-06-24 12:19:32 +11:00
|
|
|
|
énormes, mais il semble bien que ça puisse faire des trucs géniaux.
|
|
|
|
|
|
2023-01-01 01:39:58 +11:00
|
|
|
|
Peut-être\footnote{Les rêves ne sont pas interdits.}, existe-il une
|
|
|
|
|
interface pour le Fortran moderne ?
|
|
|
|
|
|
2022-09-12 10:36:48 +11:00
|
|
|
|
\subsection{\textsc{hello world}}
|
|
|
|
|
|
2022-06-24 12:19:32 +11:00
|
|
|
|
\begin{lstlisting}
|
|
|
|
|
#define cimg_use_png
|
|
|
|
|
#include "CImg.h"
|
|
|
|
|
using namespace cimg_library;
|
|
|
|
|
|
|
|
|
|
#define BLUR 0.35
|
|
|
|
|
int main(int argc,char **argv)
|
|
|
|
|
{
|
|
|
|
|
if (3 != argc) {
|
|
|
|
|
fprintf(stderr, \
|
|
|
|
|
"Usage: %s infile.png outfile.png\n", argv[0]);
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
CImg<unsigned char> imgIn (argv[1]);
|
|
|
|
|
CImg<unsigned char> imgOut = \
|
|
|
|
|
imgIn.get_norm().blur(BLUR).normalize(0, 255);
|
|
|
|
|
imgOut.save(argv[2]);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
\end{lstlisting}
|
2020-11-13 11:35:31 +11:00
|
|
|
|
|
2022-12-17 06:41:32 +11:00
|
|
|
|
Un concept interessant, mais pas évident au premier abord. Un peu comme
|
|
|
|
|
les branchements dans Chuck\index{Chuck} ou les pipes du shell\dots
|
|
|
|
|
|
2022-09-12 10:36:48 +11:00
|
|
|
|
\subsection{Questions...}
|
|
|
|
|
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item{Comment virer le canal alpha à l'enregistrement d'une image en PNG ?}
|
|
|
|
|
\end{itemize}
|
|
|
|
|
|
|
|
|
|
|
2020-11-13 11:35:31 +11:00
|
|
|
|
% -------------------------------------------------------------------
|