•  » Outils
  •  » [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

#1 2026-07-24 09:32:19

polowigo
Membre
2019-04-11
789

[Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

Bonjour,

En local, je fais des essais de rotation d'images en utilisant la librairie libjpeg-turbo-progs.
Ce sont des images prises en mode portrait mais dont l'orientation est Top-left.

La commande jpegtran (celle-là même utilisée par le plugin Rotate Image) effectue une rotation sans perte de l'image principale en laissant sa méta Orientation à Top-left.
Résultat : aucun problème lors de la lecture sur navigateur ou lors de l'envoi sur le Piwigo.

Mais je trouve plus "économique" d'utiliser la commande jpegexiforient qui modifie seulement la méta Orientation :

Code:

jpegexiforient -8 mon-image.jpg

me passe l'orientation à Bottom-left, ce qu'il me faut pour une certaine photo.
Et ça marche tout aussi bien que jpegtran pour Piwigo.

Cependant, l'extraction des images secondaires :

Code:

exiftool -a -b -W %d%f_%t%-c.%s -preview:all  mon-image.jpg

donne des images PreviewImage et ThumbnailImage restées en paysage.
En vérifiant les métadonnées :

Code:

exiftran -d mon-image.jpg
   ifd 0
      0x0112  Orientation                    Bottom-left
   ifd 1
      0x0112  Orientation                    Top-left

on constate que l'Orientation en zone ifd1 est restée celle d'origine et que c'est peut-être ce qu'il faudrait modifier.

J'ai aussi essayé de pivoter les images extraites pour les réinjecter mais ça veut pas :

Code:

exiftool -PreviewImage=mon-image_PreviewImage.jpg mon-image.jpg
Warning: [Minor] Not a valid image for All:PreviewImage
    0 image files updated
    1 image files unchanged

Avez-vous une expérience en la matière ?

ancien titre : Libjpeg - comment pivoter PreviewImage et ThumbnailImage ?

Dernière modification par polowigo (2026-07-25 12:09:41)

Hors ligne

#2 2026-07-24 09:47:37

Gotcha
Ex Equipe Piwigo
Pierrelatte (26)
2007-03-14
13838

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

Je peux y jeter un oeil si tu me fournis des photos exemples.


Indépendant et autodidacte. Solutions sur mesures : Prestations

LE FAIRE EST LE RÉVÉLATEUR DE L'ÊTRE

Hors ligne

#3 2026-07-24 10:34:11

polowigo
Membre
2019-04-11
789

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

Bonjour Gotcha et merci !

Voici l'originale prise avec un vieil FinePix AV230 :

et celle traitée avec jpegexiforient switch à -8 :

edit : images supprimées car dénudées de leurs exif par l'hébergeur.

Dernière modification par polowigo (2026-07-24 11:20:41)

Hors ligne

#4 2026-07-24 10:43:37

Gotcha
Ex Equipe Piwigo
Pierrelatte (26)
2007-03-14
13838

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

Donc pas de balise EXIF native dans le fichier original :/ Ca oblige à devoir se coltiner chaque image à la main.


Indépendant et autodidacte. Solutions sur mesures : Prestations

LE FAIRE EST LE RÉVÉLATEUR DE L'ÊTRE

Hors ligne

#5 2026-07-24 10:47:41

polowigo
Membre
2019-04-11
789

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

Au départ elles y sont, je vais vérifier si zupimages ne les a pas squeezées.

Hors ligne

#6 2026-07-24 10:48:26

Gotcha
Ex Equipe Piwigo
Pierrelatte (26)
2007-03-14
13838

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

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 ?!


Indépendant et autodidacte. Solutions sur mesures : Prestations

LE FAIRE EST LE RÉVÉLATEUR DE L'ÊTRE

Hors ligne

#7 2026-07-24 10:50:51

polowigo
Membre
2019-04-11
789

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

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

Dernière modification par polowigo (2026-07-24 10:51:29)

Hors ligne

#8 2026-07-24 11:16:55

polowigo
Membre
2019-04-11
789

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

Du coup, je te les ai transmises par mail.

Hors ligne

#9 2026-07-24 14:50:51

Charles69
Membre
2023-01-12
493

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

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 ?

Dernière modification par Charles69 (2026-07-24 15:04:23)

Hors ligne

#10 2026-07-24 18:53:46

polowigo
Membre
2019-04-11
789

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

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.

Hors ligne

#11 2026-07-25 11:20:49

Charles69
Membre
2023-01-12
493

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

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.

Dernière modification par Charles69 (2026-07-25 11:32:56)

Hors ligne

#12 2026-07-25 11:38:02

polowigo
Membre
2019-04-11
789

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

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

Dernière modification par polowigo (2026-07-25 11:51:42)

Hors ligne

#13 2026-07-25 14:20:06

polowigo
Membre
2019-04-11
789

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

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.  :-)

Hors ligne

#14 2026-07-25 16:08:18

Gotcha
Ex Equipe Piwigo
Pierrelatte (26)
2007-03-14
13838

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

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

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


Indépendant et autodidacte. Solutions sur mesures : Prestations

LE FAIRE EST LE RÉVÉLATEUR DE L'ÊTRE

Hors ligne

#15 2026-07-26 07:50:53

polowigo
Membre
2019-04-11
789

Re: [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

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.

Hors ligne

  •  » Outils
  •  » [Résolu] pivoter les miniatures intégrées (libjpeg, exiftran, exiftool, pel)

Pied de page des forums

Propulsé par FluxBB