Manipulations d'images courantes sous Linux
-
Redimensionner en masse des photos pour que la hauteur (en paysage) ou la largeur (en portrait) ne dépasse pas 1080 pixels :
mogrify -verbose -resize "1080^>" *.jpg
(c'est une commande du logiciel ImageMagick) -
Convertir une image PNG transparente en JPEG sur fond blanc :
convert -flatten image.png image.jpg
(c'est aussi une commande du logiciel ImageMagick) -
Convertir en masse des PNG en JPEG :
mogrify -format jpg *.png
(argument cumulable avec -resize …) -
Comparer deux images avec ImageMagick :
compare image1.png image2.png différence.png
Les pixels différents sont affichés en rouge. -
Optimiser des JPEG, mieux que GIMP :
jpegoptim
-
Optimiser des PNG, mieux que GIMP :
pngquant
(pour l'anecdote, pngquant a été réécrit en Rust) -
Optimiser des SVG sans lancer Inkscape :
scour --remove-metadata --enable-id-stripping --disable-embed-rasters image.svg image-optim.svg
Produit le même résultat qu'Inkscape, puisque c'est ce logiciel qui est utilisé par Inkscape quand on fait Enregistrer sous > SVG optimisé -
Créer un PDF à partir de plusieurs images :
convert -verbose image1.png image2.jpeg image3.jpg document.pdf
Si convert affiche "not authorized" ou "operation not allowed by the security policy" :- modifier
/etc/ImageMagick-6/policy.xml
- à la place de
<policy domain="coder" rights="none" pattern="PDF" />
- mettre
<policy domain="coder" rights="read|write" pattern="PDF" />
- modifier
-
Mettre 2 pages par feuille avant d'imprimer un PDF :
pdfnup fichier.pdf
(remplacé par pdfxup qui est bugué)
oupdfjam --nup '2x1' --suffix 2up --landscape fichier.pdf
(pour créer fichier-2up.pdf) -
Créer une URL "data" à partir d'une image :
FICHIER=image.png; echo "data:$( file --mime-type -b $FICHIER );base64,$( base64 $FICHIER )" | tr -d '\n'
-
Modifier la date dans les données EXIF d'une image (par exemple une vieille photo papier scannée) :
exiftool -AllDates="1984:06:29 15:38:00" image.jpg
-
Afficher la position GPS EXIF dans un format décimal compréhensible par OpenStreetMap ou Google Maps :
exiftool -c '%.6f' -GPSPosition photo.jpg
-
Modifier la position GPS :
exiftool photo.jpg -gpslatitude=47.987004 -gpslongitude=0.278588 -gpslatituderef=N -gpslongituderef=E
-
Effacer toutes les infos EXIF :
exiftool -all= image.jpg
(radical) -
Décaler la date de prise de vue d'une heure pour un appareil que j'ai oublié de mettre à l'heure d'été :
exiftool -AllDates+=1 *.JPG
oujhead -ta+1:00 *.JPG
-
Dater le fichier à la date de prise de vue EXIF :
exiftool '-FileModifyDate<DateTimeOriginal' *.JPG
(le < impose de mettre des guillemets) oujhead -ft *.JPG
-
Obtenir une liste triée par date EXIF :
exiftool -p '$DateTimeOriginal $directory/$filename' des/répertoires/* 2>/dev/null | sort | cut -d' ' -f3-
(je ne suis pas sûr qu'il n'y a pas une commande plus simple avec exiftool seulement)
2>/dev/null pour ne pas voir d'avertissement pour les fichiers qui n'ont pas de tag EXIF Date/Time Original
Ça marche pour les vidéos aussi...
On peut enchaîner avec feh pour avoir une mosaïque des photos| feh -t -f -
-
Extraire les images d'une GIF animée (oui, ça existe encore en 2023) :
convert -verbose -coalesce truc.gif truc/%02d.png
le répertoire truc doit exister au préalable
%02d
pour des images de 00 à 99, à adapter si plus de 100 images
-coalesce
parce que les images peuvent être partielles dans la GIF animée -
Afficher toutes les photos d'un répertoire de manière très compacte, à la façon des smartphones :
feh -t --index-info ''
Raccourci Bash :function feh { if [[ "$1" = "-t" ]]; then shift /usr/bin/feh -t --index-info '' -P -W 1920 "$@" else /usr/bin/feh "$@" fi }
-
Mieux que feh pour afficher les SVG sans bidouiller avec ImageMagick qui ne sait pas gérer les fichiers d'Inkscape 1.2 :
pqiv
(Powerful Quick Image Viewer) puis touche m pour le mode "montage" (équivalent de feh -t)
pqiv est récursif par défaut (équivaut à feh -r) -
Trouver des photos plus ou moins similaires (ou carrément des doublons) dans un ou plusieurs répertoires :
czkawka
(mot polonais qui se prononce tch'kavka)