• Accueil forums
  •  » Outils
  •  » pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

Écrire une réponse

Veuillez écrire votre message et l'envoyer

Cliquez dans la zone sombre de l'image pour envoyer votre message.

Retour

Résumé de la discussion (messages les plus récents en premier)

polowigo
2026-07-26 11:32:20

Une modification du script suite aux bons conseils de Charles :

Code:

directory="ccw"
for file in "$directory"/*; do
  if [ -f "$file" ]; then
      exiftool -Orientation#=6 "$file"
      exiftool -overwrite_original "-IFD1:Orientation<IFD0:Orientation" "$file"
      echo "$file"
  fi
done
directory="cw"
for file in "$directory"/*; do
  if [ -f "$file" ]; then
      exiftool -Orientation#=8 "$file"
      exiftool -overwrite_original "-IFD1:Orientation<IFD0:Orientation" "$file"
      echo "$file"
  fi
done

plus économique !  :-)

Gotcha
2026-07-26 11:10:43

Crois moi qu'elles le sont déjà très bien sur ce genre de tâches !
Ca va juste te coûter très cher si tu demandes une analyse pour un paquet d'images :p Car non content de récupérer gratos tes images, elles te font payer l'emprunt xD Vive le capitalisme.

Avant c'était la gratuité, maintenant tu payes pour te faire piller ^_^

polowigo
2026-07-26 11:07:34

Gotcha a écrit:

cette IA pourra ainsi directement te retourner l'image pour peu que tu lui donnes les bonnes directives.

Je n'en suis pas si sûr, j'ai déjà du mal à imaginer comment mon cerveau reconnait le haut du bas, je pense que c'est le fruit d'un long apprentissage de l'être humain.
Il faudrait donc sacrément l'entraîner cette IA.

Gotcha
2026-07-26 11:00:59

Si. Les IA maintenant sont capable du pire comme du meilleur et si tu en viens à offrir tes données à l'IA en échange d'un coup d'oeil, cette IA pourra ainsi directement te retourner l'image pour peu que tu lui donnes les bonnes directives.

Du coup on s'éloigne de Piwigo si c'est un traitement 100% local - que je préconise !

polowigo
2026-07-26 09:20:56

Voici le script que j'utilise :

Code:

directory="ccw"
for file in "$directory"/*; do
  if [ -f "$file" ]; then
      exiftool -Orientation#=6 "$file"
      exiftool -overwrite_original -Orientation#=6 "-IFD1:Orientation<IFD0:Orientation" "$file"
      echo "$file"
  fi
done
directory="cw"
for file in "$directory"/*; do
  if [ -f "$file" ]; then
      exiftool -Orientation#=8 "$file"
      exiftool -overwrite_original -Orientation#=8 "-IFD1:Orientation<IFD0:Orientation" "$file"
      echo "$file"
  fi
done

Mais il faut un humain pour classer les photos en cw et ccw, je ne pense pas qu'une IA en soit capable.  :-p

polowigo
2026-07-26 07:50:53

Oui mais je suis encore loin d'un script car, bien sûr, j'ai pivoté l'appareil dans les deux sens, désolation que je suis.
Je ne vois que le tri visuel en deux classes : sens direct et sens inverse, c'est toujours mieux que rien.

Gotcha
2026-07-25 16:08:18

Plus c'est simple, mieux c'est :D

(Dit-il alors qu'il est premier ingénieur à construire des centrales à énergie infinie xD)

polowigo
2026-07-25 14:20:06

Au final, j'adopte la solution exiftool qui est simple à comprendre et facile à mettre en œuvre dans un script avec le code obtenu par Charles pour une rotation de 90° dans le sens antihoraore :

Code:

exiftool -Orientation#=8 mon-image.jpg
exiftool -overwrite_original -Orientation#=8 "-IFD1:Orientation<IFD0:Orientation" mon-image.jpg

Merci à vous trois pour votre aide.  :-)

polowigo
2026-07-25 11:38:02

Bonjour Charles,

Effectivement j'ai fait les deux opérations à la suite avec exiftool et je t'ai envoyé le résultat.
Ça fonctionne bien d'après mon amie Katryne, hormis pour photofiltre.

J'ai le même comportement pour ImageMagick mais, après tout, ça peut se défendre : afficher une image "brute" et pouvoir afficher toutes les informations disponibles sous différentes formes.
D'ailleurs, il m'affiche bien ce qu'il faut par la commande identify -verbose DSCF9302.jpg :
...
Orientation: LeftBottom
...
Properties:
...
    exif:thumbnail:Orientation: 8

Charles69
2026-07-25 11:20:49

Bonjour polowigo,

J'ai testé avec exiftool

Tourner de 90° anti-horaire
exiftool -overwrite_original -Orientation#=8 photo.jpg

Mettre IFD1 (miniature embarquée) en conformité avec IFD0 (l'image)
exiftool -overwrite_original "-IFD1:Orientation<IFD0:Orientation" photo.jpg

Afficher les deux orientations
exiftool -G1 -a -s -Orientation photo.jpg
affiche
[IFD0]          Orientation                     : Rotate 270 CW
[IFD1]          Orientation                     : Rotate 270 CW

Si tu essaies de faire les deux opérations en une seule fois (exiftool -overwrite_original -Orientation#=8 "-IFD1:Orientation<IFD0:Orientation" photo.jpg) , ça ne fonctionne pas  !! l'image est bien tournée mais l'orientation de la miniature n'est pas modifiée.

polowigo
2026-07-24 18:53:46

Bonsoir Charles,
Ça, pour alimenter, tu alimentes,  merci !
Il va me falloir un peu de temps pour assimiler, je ne suis pas une IA moi  :-D

Charles69 a écrit:

C'est un peu plus complexe que ce que je pensais au départ.

Pratiquerais-tu l'art de la litote ?  :-p

Charles69 a écrit:

Ce qui est sûr c'est qu'il faut exclure les solutions qui réécrivent le jpg et donc le dégrade.

Même jpegtran qui est censé être sans perte ?

Charles69 a écrit:

Si j'ai bien compris ton problème c'est une image qui apparaît correctement dans un visualiseur mais qui perd l'orientation dans Piwigo

Pas exactement, c'est une image prise en pivotant un compact âgé (Fujifilm FinePix AV230) et pour lui c'est du format paysage.
J'essaye de faire au mieux pour que si je l'envoie sur le site familial, elle devienne du portrait, complètement (images secondaires y comprises).

J'ai quelques pistes de prétraitement qui semblent satisfaisantes par rapport à Piwigo :
- une rotation à l'aide de la commande jpegtran qui redresse l'image principale du fichier sans toucher à l'exif Orientation ;
- une modification de l'orientation sans toucher l'image, avec la commande jpegexiforient.
Mais, dans les deux cas, les images secondaires incluses par l'appareil restent "couchées" et je souhaite changer leur orientation.

Sur les conseils de Gotcha, j'ai utilisé XnView qui a pu en redresser une des deux, la ThumbnailImage, en la reconstruisant je pense.

Voila mon souci. Je vais t'envoyer l'objet du délit.

Charles69
2026-07-24 14:50:51

Bonjour polowigo,

Je me suis intéressé à la problématique des orientations avec face_tag_editor, et à l'écriture des métadonnées sans exiftool avec geo_tag_editor.
Dans ce dernier cas j'utilise la librairie PEL (PHP Exif Library ) pour écrire les métadonnées.

J'ai posé la question à Claude concernant l'écriture de l'orientation (rotation et miroir) avec PEL.
Voilà sa réponse :

Claude a écrit:

Oui, techniquement PEL fait exactement ça : il réécrit le segment APP1 sans toucher aux données image, donc c'est du sans perte, comme exiftool -Orientation#=. Et l'avantage pour un plugin distribuable, c'est que c'est du PHP pur, sans dépendance externe (contrairement à ExifTool, qu'on ne peut pas supposer installé chez tout le monde).

Rappel des valeurs : 1 = normal, 2 = miroir H, 3 = 180°, 4 = miroir V, 5 = miroir H + 90° CCW, 6 = 90° CW, 7 = miroir H + 90° CW, 8 = 90° CCW.

Si tu veux composer une rotation avec l'orientation existante (et pas l'écraser), il te faut deux tables de transition, sinon tu casses le résultat pour les images déjà orientées :

php
// rotation 90° CW appliquée à l'orientation courante
$rot90 = [1=>6, 2=>7, 3=>8, 4=>5, 5=>2, 6=>3, 7=>4, 8=>1];
// miroir horizontal
$flipH = [1=>2, 2=>1, 3=>4, 4=>3, 5=>8, 6=>7, 7=>6, 8=>5];
Le vrai piège, côté Piwigo

Modifier le tag ne suffira pas : Piwigo ne relit pas l'EXIF à l'affichage. Il stocke un code dans la colonne rotation de piwigo_images (0/1/2/3 = 0/90/180/270), calculé à la synchro via pwg_image::get_rotation_code_from_orientation(). Donc après l'écriture PEL il faut :

mettre à jour rotation en base pour cette image ;
purger les dérivées — delete_element_derivatives($infos) dans include/functions.inc.php, sinon les vignettes en cache restent dans l'ancien sens.

Et surtout : Piwigo ne gère pas les miroirs. Le mapping orientation → code de rotation ne retient que 1/3/6/8 ; les valeurs 2/4/5/7 sont ramenées à une rotation pure ou ignorées. Pour le miroir, tu as donc deux options :

retourner réellement les pixels (Imagick flopImage()) et remettre l'orientation à 1 — mais ça réencode le JPEG ;
gérer le flip toi-même à la génération des dérivées via un hook, en lisant ta propre valeur d'orientation stockée en base.
Limites de PEL à connaître
JPEG et TIFF uniquement. Pas de PNG, WebP, HEIC, ni de RAW propriétaires (ORF exclu, donc).
Mémoire : PEL charge tout le fichier en objets PHP. Sur ton NAS, avec des JPEG de 20-25 Mpx, surveille memory_limit — c'est le point qui fait le plus souvent capoter un traitement par lot.
La vignette embarquée (IFD1) n'est pas retournée. Certains logiciels l'affichent telle quelle. Le plus propre est de la supprimer ou de la régénérer.
XMP non synchronisé : si tes images portent un tiff:Orientation en XMP (c'est fréquent quand elles sont passées par digiKam), PEL ne le touchera pas et certains lecteurs privilégient le XMP. Divergence garantie.
Maker notes : PEL les recopie en bloc, mais leurs offsets internes ne sont pas relocalisés. Sur des fichiers OM System, teste avant de lancer un batch.

C'est un peu plus complexe que ce que je pensais au départ.
Ce qui est sûr c'est qu'il faut exclure les solutions qui réécrivent le jpg et donc le dégrade.

Si j'ai bien compris ton problème c'est une image qui apparaît correctement dans un visualiseur mais qui perd l'orientation dans Piwigo
Voilà la réponse de Claude

Claude a écrit:

Ah, ça change complètement le diagnostic. Si l'image est correcte dans digiKam et fausse dans Piwigo, le tag EXIF est probablement déjà bon — c'est Piwigo qui a une valeur périmée en base. Dans ce cas, écrire avec PEL ne corrigerait rien : tu réécrirais une valeur déjà correcte, et l'affichage resterait faux.

Ce qui se passe très probablement

Piwigo ne relit pas l'EXIF à l'affichage. Il fige un code dans la colonne rotation de piwigo_images au moment où la photo entre dans la galerie, et c'est cette valeur qui pilote la génération des dérivées ensuite.

Or ce moment-là n'est pas fiable selon la voie d'entrée. C'est un classique du forum Piwigo : à l'upload via l'interface web, Piwigo lit l'EXIF et renseigne correctement l'entrée « rotation » ; en revanche avec un dépôt FTP suivi d'une synchronisation, l'orientation EXIF n'est pas vérifiée. Vu ton setup NAS, tu es sans doute dans le second cas.

Deuxième cause fréquente, à vérifier en premier parce que c'est gratuit : l'extension PHP EXIF doit être installée pour que la rotation soit gérée correctement, précisément pour les images orientées par métadonnées et non tournées physiquement. Sur DSM, selon le paquet PHP actif, elle n'est pas toujours chargée. Un php -m | grep -i exif te le dira tout de suite, et $conf['use_exif'] doit être à true.
Piwigo

Troisième piste : le miroir. Si digiKam a écrit une orientation 2, 4, 5 ou 7, Piwigo ne sait pas la traduire (il ne connaît que 0/90/180/270) et tombera à côté quoi que tu fasses.

Le diagnostic à faire sur une image fautive
bash
exiftool -Orientation# -Orientation photo.jpg

puis en base :

sql
SELECT id, path, width, height, rotation FROM piwigo_images WHERE id = ...;

Correspondance attendue : orientation 1 → rotation 0, 6 → 1, 3 → 2, 8 → 3. Si ça ne colle pas, c'est bien la base qui est décalée, pas le fichier.

La correction propre, au cas par cas

Ne touche pas au JPEG. Deux instructions suffisent :

php
single_update(IMAGES_TABLE, array('rotation' => $code), array('id' => $image_id));
delete_element_derivatives($infos);   // include/functions.inc.php

C'est instantané, sans perte, et ça règle vignettes et tailles dérivées d'un coup. Si les dimensions sont aussi inversées en base (largeur > hauteur sur un portrait), corrige width/height dans la même requête.

En espérant alimenter ta réflexion.
Tu peux m'envoyer la photo ?

polowigo
2026-07-24 11:16:55

Du coup, je te les ai transmises par mail.

polowigo
2026-07-24 10:50:51

Effectivement, elles ont été lessivées par zupimages !  :-/

Gotcha
2026-07-24 10:48:26

Là pour le coup je comprendrais qu'une "altération" du fichier original soit nécessaire pour lui adjoindre une balise d'orientation.
La bonne question est "qui doit faire cela ?" Piwigo (web galerie, import uniquement) ou un logiciel spécialisé qui permet l'export vers Piwigo ?!

Pied de page des forums

Propulsé par FluxBB