SaveImage creer une rotation

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

SaveImage creer une rotation

Message par venom »

Bonjour,

Je suis sur un petit soft qui redimensionne une image et la sauvegarde ensuite.
Il s’avère que si on sauvegarde une image qui a la base est en .bmp ou .png vers n'importe quel format, aucune rotation ne s’exécute.
En revanche, si l'image de base est un .jpg et bien l'image final va subir une rotation. 8O :?

Voici le code de base dans l'aide de purebasic

Code : Tout sélectionner

LoadImage(0, #PB_Compiler_Home+"Examples\Sources\Data\GeeBee2.bmp") ; Charge l'image depuis un fichier
  SaveImage(0, GetTemporaryDirectory() + "ok.bmp") ; Enregistre
ce dernier fonctionne très bien puisque l'image d'origine choisi est une .bmp

Voici un second code qui vous fait choisir une image, et vous demande ou la sauvegarder.

Code : Tout sélectionner

UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()

CheminImage$ = OpenFileRequester("Choisir une image", "", "images|*.jpg;*.bmp;*.png", 0)
LoadImage(0, CheminImage$) ; Charge l'image

CheminSave$ = SaveFileRequester("Sauvegarde de l'image", "", "images jpg|*.jpg", 0)
SaveImage(0, CheminSave$+".jpg") ; Enregistre l'image
et bien si avec ce deuxième code, vous ouvrez une image .jpg elle va subir une rotation.
EDIT :Le pire, c'est que cela ne se produit pas sur tout les .jpg :? certaines images ne subissent pas cette rotation :twisted:

Ma question est pourquoi ? 8O
D'avance merci






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: SaveImage creer une rotation

Message par Ar-S »

Salut,
Je me suis rendu compte de ce phénomène sur la version 5.6x depuis quelques temps via mon Resizer Gold. Je n'ai pas eu le temps de tenter de voir pourquoi mais c'est en effet gênant.
Ma 1ère théorie serait que ça viendrait d'une gestion bancale des infos exif mais j'avoue que si Fred ou quelqu'un pouvait nous en donner la raison et surtout comment gérer ce soucis ce serait vraiment bien.
En attendant, essaye de le compiler avec une version plus ancienne de PB pour voir si ça se produit histoire de cibler si ça bien bien d'une version PB en particulier comme je le pense.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: SaveImage creer une rotation

Message par Marc56 »

Le jpg que tu ouvres et qui tourne "tout seul" ne serait-il pas une photo prise à la verticale et qui s'affiche alors à l'horizontal ?
:arrow: EXIF

Loadimage ne fait que lire l'image telle qu'elle est enregistrée (et elle est normalement à l'horizontal même si l'apn était en mode vertical).

À mon avis il est donc bien que PB lise le fichier tel qu'il est. Ou alors il faudrait une fonction (ou une option à LoadImage) capable de lire l'EXIF et de tourner ou pas l'image.

La rotation d'une image n'est pas une fonction native, c'est à l'utilisateur de lire l'EXIF et de tourner l'image.
(Ex: Irfanview: Propriété > JPG > Auto rotoate image according exif info)

:idea: La lib image ne permet pas de faire tourner une image, par contre la nouvelle lib VectorDrawing le permet
https://www.purebasic.com/french/docume ... nates.html

:wink:
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: SaveImage creer une rotation

Message par venom »

Marc56 a écrit :ne serait-il pas une photo prise à la verticale et qui s'affiche alors à l'horizontal ?
Je n'en ai pas la certitude mais je pense que oui. Je ferais un test avec mon appareil photo.

En revanche le terme exif m'est inconnu. Je vais me renseigner surle sujet.
Marc56 a écrit :Ou alors il faudrait une fonction (ou une option à LoadImage) capable de lire l'EXIF et de tourner ou pas l'image.
Ce genre d'option pourrait être sympa en effet :P


Merci a vous:wink:







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: SaveImage creer une rotation

Message par poshu »

venom a écrit :En revanche le terme exif m'est inconnu. Je vais me renseigner surle sujet.
Exif, aka EXchangeable Image file Format, c'est un ensemble de données sur les images et les sons comme la géolocalisation, l'exposition ou ... l'inclinaison de l'appareil.
Marc56 a écrit :Ou alors il faudrait une fonction (ou une option à LoadImage) capable de lire l'EXIF et de tourner ou pas l'image.

Code : Tout sélectionner

Procedure RemoveExif(Image)
	Protected tmpImage
	
	tmpImage = CopyImage(Image,#PB_Any)
	
	FreeImage(Image)
	CreateImage(Image,ImageWidth(tmpImage),ImageHeight(tmpImage),ImageDepth(tmpImage))
	StartDrawing(ImageOutput(Image))
	DrawImage(ImageID(tmpImage),0,0)
	StopDrawing()
	
	FreeImage(tmpImage)
EndProcedure
Un simple bricolage comme celui là suffit pour supprimer les info exifs, plus de retournement intempestif.
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: SaveImage creer une rotation

Message par Marc56 »

JJe suis sur un petit soft qui redimensionne une image et la sauvegarde ensuite.
Il s’avère que si on sauvegarde une image qui a la base est en .bmp ou .png vers n'importe quel format, aucune rotation ne s’exécute.
En revanche, si l'image de base est un .jpg et bien l'image final va subir une rotation.
Si tu fais un simple chargement, redim, puis sauvegarde avec les fonctions PB, tu perds les infos EXIF et tu sauvegarde l'image telle qu'elle s'affiche.
Une photo prise en mode portrait apparaitra donc tournée de 90° dans un sens ou l'autre selon la rotation de l'APN
Il serait plus intéressant de lire l'info EXIF et tourner l'image dans le bon sens avant de sauvegarder

EXIF
https://fr.wikipedia.org/wiki/Exchangea ... ile_format

Info pour l'orientation
http://owl.phy.queensu.ca/~phil/exiftoo ... /EXIF.html

0x0112 Orientation int16u IFD0
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

Tu auras principalement 6 ou 8 selon que l'image doit être tournée de 90° dans un sens ou l'autre
(CW = clockwise direction = sens horaire)

Avec un "peek" au bon endroit, tu devrait pouvoir récupérer l’orientation sans avoir à utiliser une lib qu'on trouve sur le forum.

:wink:
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: SaveImage creer une rotation

Message par venom »

Merci pour vos infos. En effet les images en question sont a 270°
8O c'est fou, je ne savais pas qu'une image stocker autant d'information. Il y a même les coordonnées GPS. (Un peu comme les tag ID3 des musiques)

Je vais regarder a tout ça.






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre