PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Compresser une image
Compresser une image
Débuté par Pampi, 28 oct. 2005 13:24 - Aucune réponse
Posté le 28 octobre 2005 - 13:24
Bonjour,

Un client me demande la chose suivante :

A partir d'une photo que l'utilisateur sélectionnera dans un répertoire, il faut créer dans un répertoire PHOTOS 3 photos de type JPEG avec les caractéristiques suivantes (bien entendu, les proportions de la photo originale doivent être respectées dans ces 3 photos) :

Photo 1 : Largeur en pixels : 150
Hauteur en pixels : définie par homothétie
Taux de compression : 60 %

Photo 2 : Largeur en pixels : 800
Hauteur en pixels : définie par homothétie
Taux de compression : 33 %

Photo 3 : Largeur en pixels : 1024
Hauteur en pixels : définie par homothétie
Taux de compression : 33 %

J'ai regardé l'aide sur dSauveImageJPEG, fait des tests mais je n'y arrive pas.

- le paramètre "Qualité" de dSauveImageJPEG ne permet pas de définir un taux de compression précis.
- j'ai essayé d'utiliser 3 champs image invisibles avec pour chacun la largeur demandée et la hauteur calculée à partir d'une règle de trois, mais les photos 2 et 3 ne sont pas du tout nettes.

Je vous mets le code que j'ai créé mais je sais qu'il me manque quelque chose et peut-être suis-je parti sur une mauvaise piste ? ...

Merci par avance pour votre aide.


Pampi


Procédure Clic sur bouton (pour sélectionner la photo)

nomimage est une chaîne
repdefaut est une chaîne
InfoImage, Format sont des chaînes
Largeur est un entier
Hauteur est un entier

repdefaut = ComplèteRep(VG_CheminMedias)+ComplèteRep(IDvendeur)+"PHOTOS"

nomimage = gsSélectionnerImage(repdefaut, "Fichier.JPEG", "Sélectionner une image", ...
"JPG (*.JPG)"+ TAB + "*.jpg" + RC + "JPEG (*.JPEG)"+TAB+".jpeg")

// PHOTO1 est un champ image en liaison avec un champ de type texte du fichier
PHOTO1..Valeur = nomimage

// Récupération des caractéristiques de l'image sélectionnée
InfoImage = InfoBitmap (nomimage)
Format = ExtraitChaîne(InfoImage, 1)
Largeur = Val(ExtraitChaîne(InfoImage, 2))
Hauteur = Val(ExtraitChaîne(InfoImage, 3))

// Copie de l'image sélectionnée vers les 3 images invisibles (elles ont toutes HQ+Homothétique étendu centré comme mode d'affichage)
// Image 1: Largeur 150 pixels - taux de compression 60%
// Image 2: Largeur 800 pixels - taux de compression 33 %
// Image 3: Largeur 1024 pixels - taux de compression 33%
dCopieImage(PHOTO1, Image1, copieSrcCopie)
dCopieImage(PHOTO1, Image2, copieSrcCopie)
dCopieImage(PHOTO1, Image3, copieSrcCopie)

// On calcule la largeur des photos 1 2 et 3 pour respecter les proportions de
// la photo d'origine
SI Largeur <> 0 ALORS
Image1..Hauteur = (Image1..Largeur * Hauteur) / Largeur
Image2..Hauteur = (Image2..Largeur * Hauteur) / Largeur
Image3..Hauteur = (Image3..Largeur * Hauteur) / Largeur
FIN

// On enregistre les photos A, B et C
dSauveImageJPEG(Image1,ComplèteRep(VG_CheminMedias)+ComplèteRep(IDvendeur)+ComplèteRep("PHOTOS")+IDvendeur+"-01A."+Format,60)

dSauveImageJPEG(Image2,ComplèteRep(VG_CheminMedias)+ComplèteRep(IDvendeur)+ComplèteRep("PHOTOS")+IDvendeur+"-01B."+Format,33)

dSauveImageJPEG(Image3,ComplèteRep(VG_CheminMedias)+ComplèteRep(IDvendeur)+ComplèteRep("PHOTOS")+IDvendeur+"-01C."+Format,33)

// La photo stockée dans le fichier pour affichage à l'écran est la 1
PHOTO1 = ComplèteRep(VG_CheminMedias)+ComplèteRep(IDvendeur)+ComplèteRep("PHOTOS")+IDvendeur+"-01A."+Format