https://www.purebasic.fr/french/viewtop ... 46#p200946
Voici une bafouille pour lire le Tag d'orientation d'une image JPG dans les EXIFs.
Prenez quelques photos en mode vertical et horizontal avec un APN ou un téléphone et testez.
Oui, une lib existe sur le forum us, mais j'aime bien réinventer le roue (pour comprendre) et surtout ne pas charger des centaines de lignes là où une dizaine suffit.
Commentaires et liens dans le sources pour ceux que ça intéresse.
Optimisation bienvenue.
Code : Tout sélectionner
; Lire le Tag EXIF concernant l'orientation d'une image
; Marc56 - 15/08/18
; Tag ID Tag Name Writable Group
; 0x0112 Orientation int16u IFD0
; DEC 274
; Values / Notes
; 1 = Horizontal (normal)
; 2 = Mirror horizontal
; 3 = Rotate 180
; 4 = Mirror vertical
; 5 = Mirror horizontal And rotate 270 CW
; 6 = Rotate 90 CW
; 7 = Mirror horizontal And rotate 90 CW
; 8 = Rotate 270 CW
; Ressources:
; https://fr.wikipedia.org/wiki/Exchangeable_image_file_format
; http://owl.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html
; Editeur Hexa https://mh-nexus.de/en/ ou http://frhed.sourceforge.net/
Declare Search_Orientation(Fichier$)
; Test
; Utiliser une photo prise à la verticale et une à l'horizontale
; Vérifier avant dans un viewer (ie: irfanview) que le tag orientation est rempli
; On devrait normalement trouver
; 1 pour une photo normale (horizontale)
; 6 ou 8 pour une photo prise à la verticale
Search_Orientation("C:\DataTest\EXIF_V6.JPG")
Search_Orientation("C:\DataTest\EXIF_H.JPG")
Search_Orientation("C:\DataTest\EXIF_V8.JPG")
; --- Procédures
Procedure Search_Orientation(Fichier$)
Debug "Fichier: " + Fichier$
If Not ReadFile(0, Fichier$, #PB_Unicode)
Debug "Fichier illisible"
ProcedureReturn
EndIf
length = Lof(0)
Debug "Taille : " + FormatNumber(length, 0) + " octets"
For i = 0 To length
FileSeek(0, i)
If ReadUnicodeCharacter(0) = $0112 ; ou 274 den décimal
Debug "Offset : " + i
FileSeek(0, 6, #PB_Relative)
ID = ReadCharacter(0)
Debug "Valeur : " + ID
Select ID
Case 1 : Debug "Image Horizontale"
Case 6 : Debug "Image à tourner vers Gauche"
Case 8 : Debug "Image à tourner vers Droite"
EndSelect
Break
EndIf
Next
CloseFile(0)
Debug ""
EndProcedure
Code : Tout sélectionner
Fichier: C:\DataTest\EXIF_V6.JPG
Taille : 6,818,304 octets
Offset : 46
Valeur : 6
Image à tourner vers Gauche
Fichier: C:\DataTest\EXIF_H.JPG
Taille : 2,832,384 octets
Offset : 46
Valeur : 1
Image Horizontale
Fichier: C:\DataTest\EXIF_V8.JPG
Taille : 3,677,696 octets
Offset : 46
Valeur : 8
Image à tourner vers Droite
Logiquement 1 position aurait suffit.
Peut-être que je m’embête aussi à scanner tout le fichier alors que l'offset est le même (46)
À voir sur d'autres exemples, selon la version d'EXIF générée par l'APN...