|
Réduire la taille ET LE POIDS d'une image |
Débuté par Jennifer Broyer, 05 avr. 2024 09:09 - 15 réponses |
| |
| | | |
|
| |
Posté le 05 avril 2024 - 09:09 |
Bonjour,
Je souhaite redimensionner une image pour en réduire la taille ET LE POIDS avant de la stocker en bdd.
J'ai essayé en utilisant la fonction dRedimensionne(), ça redimensionne bien mon image mais son poids augmente : => au départ mon image est en 2048x1536 pixels, et à un poids de 689Ko
Une fois l'image redimensionnée, quand je vais l'analyser dans le fichier de la bdd, avec la fonction "Modifier le mémo" : => l'image indique un poids de 1,84Mo (elle a donc grossit !!!), et si je l'exporte, et l'ouvre avec Paint elle est pourtant bien réduit au dimension demandé par la fonction dRedimensionne(), soit 1036x777 pixels.
J'ai essayé avec plusieurs options de dRedimensionne() : drHomothétiqueCentré, drHauteQualité Dans tous les cas le poids de l'image est toujours supérieure après redimensionnement. Et ensuite, même si j'essaye de compacter les mémo, l'image reste avec un poids de 1.84Mo
J'ai testé de stocker l'image en bdd sans la redimensionner et c'est pire, car elle passe de 689Ko à 9Mo en bdd. Donc le redimensionnement permet tout de même une réduction mais je ne comprends malgré tout pas pourquoi elle grossit.
Quelqu'un à une idée pour réussir à vraiment réduire le poids d'une image en plus de sa dimension ?
Merci d'avance pour votre aide
Jennifer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 901 messages Popularité : +227 (347 votes) |
|
Posté le 05 avril 2024 - 10:20 |
Bonjour, Cela ne viendrait il pas des vignettes ? (Gestion auto activée)
-- Il y a peut être plus simple, mais, ça tourneMessage modifié, 05 avril 2024 - 10:20 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 126 messages Popularité : +8 (8 votes) |
|
Posté le 08 avril 2024 - 15:15 |
Voici le code fonctionnel que j'utilise et qui je l'espere vous sera utile;
Procedure AjusteImage(LOCAL iImage est Image) xRatio est un numérique nNouvLarg est un entier = 400 nNouvHaut est un entier = 400 iImagetemp est Image
SI iImage.Largeur > iImage.Hauteur xRatio = iImage.Largeur/iImage.Hauteur nNouvHaut = nNouvLarg/xRatio SINON xRatio = iImage.Largeur/iImage.Hauteur nNouvLarg = nNouvHaut*xRatio FIN dRedimensionne(iImage, nNouvLarg, nNouvHaut, drHauteQualité) iImagetemp = dSauveImageJPEG(iImage, enMémoire, 60) RENVOYER iImagetemp
-- Jean Turcotte WX 28 Android 9.0 sur Galaxy S8 Laptop Lenovo I7 12GB Ram |
| |
| |
| | | |
|
| | |
| |
Posté le 08 avril 2024 - 15:42 |
Bonjour Voroltinquo,
Je ne comprends pas de quoi vous parlez, comment puis-je voir si les vignettes sont activées ?
Merci pour votre aide.
Jennifer |
| |
| |
| | | |
|
| | |
| |
Posté le 08 avril 2024 - 15:44 |
Bonjour Jean,
Merci pour votre extrait de code. J'ai essayé et malheureusement c'est pire, l'image est bien redimensionnée mais elle fait maintenant 2.3 Mo (pour 1036x777 pixels). Alors qu'à l'origine elle faisait 689Ko (pour 2048x1536 pixels).
Vous quand vous utilisez ce code, votre image se redimensionne et son poids se réduit ?
Merci Jennifer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 901 messages Popularité : +227 (347 votes) |
|
Posté le 08 avril 2024 - 17:12 |
Jennifer Broyer a écrit :
Je ne comprends pas de quoi vous parlez, comment puis-je voir si les vignettes sont activées ?
Cela se passe au niveau de la description de la colonne du mémo :
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 126 messages Popularité : +8 (8 votes) |
|
Posté le 08 avril 2024 - 23:15 |
Jennifer Broyer a écrit :
Bonjour Jean,
Merci pour votre extrait de code. J'ai essayé et malheureusement c'est pire, l'image est bien redimensionnée mais elle fait maintenant 2.3 Mo (pour 1036x777 pixels). Alors qu'à l'origine elle faisait 689Ko (pour 2048x1536 pixels).
Vous quand vous utilisez ce code, votre image se redimensionne et son poids se réduit ?
Merci Jennifer Bonjour Jennifer, le code que je t'ai envoyé me permet de réduite toutes mes images de 5 ou 6 Mo aux alentours de 30ko et la qualité est encore bonne avec la dimension de 400x400. Peux-tu nous envoyer ton code pour vérifier. Un exemple serait le best.
-- Jean Turcotte WX 28 Android 9.0 sur Galaxy S8 Laptop Lenovo I7 12GB Ram |
| |
| |
| | | |
|
| | |
| |
Posté le 09 avril 2024 - 09:44 |
Merci pour cette précision. En effet, la gestion des vignettes était activée, avec une seule vignette générée en 160x160. Je l'ai désactivé, mais ça n'a pas changé la taille de l'image dans le mémo. Elle passe toujours de 698Ko à l'origine à 2.3 Mo (avec le code de Jean).
Je ne comprends pas !! |
| |
| |
| | | |
|
| | |
| |
Posté le 09 avril 2024 - 10:05 |
Jean,
J'avais retravaillé un peu ton code pour l'adapté à mon besoin. Je viens de reprendre ton code à l'identique et j'arrive à une réduction de la taille, l'image passe de 689ko (pour 2048x1536 pixels) à 352ko (pour 400x300 pixels).
Et si je reprends la taille souhaitée (1036x728), je retombe sur la taille de 2.30Mo.
Pour le tester, je suis partie d'une image faisant 689ko et 2048x1536pixels, que vous pouvez récupérer là : https://we.tl/t-NHvYX1Swse
Et voici mon code :
gsCheminImage est chaîne = "" gsCheminImage = fSélecteurImage("C:\Répertoires", "", "Sélectionner une image","<Toutes les images> (*.gif;*.jpg;*.jpeg;*.png)" + TAB + "*.gif;*.jpg;*.jpeg;*.png" + RC + "JPEG (*.JPG)" + TAB + "*.jpg;*.jpeg" + RC + "BMP (*.BMP)" + TAB + "*.gif" + RC + "PNG - Portable Network Graphic (*png)" + TAB + "*.png")
gIPhotoCategorie est Image = gsCheminImage
gIPhotoCategorie = RedimensionnementPhoto(gIPhotoCategorie, 1036,728, 518, 364)
IMG_Categorie = gIPhotoCategorie
Procedure RedimensionnementPhoto(iImage est une Image, nLargeurRenseigner est un entier, nHauteurRenseigner est un entier,nLargeurMin est un entier, nHauteurMin est un entier)
SI iImage.Valide = Vrai ALORS SI iImage.Largeur < nLargeurMin OU iImage.Hauteur < nHauteurMin ALORS Info("Votre image est un peu trop petite, si vous choisissez cette image alors elle risque d'être floue sur votre site") FIN
xRatio est un numérique nNouvLarg est un entier = nLargeurRenseigner nNouvHaut est un entier = nHauteurRenseigner iImagetemp est Image SI iImage.Largeur > iImage.Hauteur xRatio = iImage.Largeur/iImage.Hauteur nNouvHaut = nNouvLarg/xRatio SINON xRatio = iImage.Largeur/iImage.Hauteur nNouvLarg = nNouvHaut*xRatio FIN dRedimensionne(iImage, nNouvLarg, nNouvHaut, drHauteQualité) iImagetemp = dSauveImageJPEG(iImage, enMémoire, 60)
RENVOYER iImagetemp SINON RENVOYER iImage FIN
Jennifer |
| |
| |
| | | |
|
| | |
| |
Posté le 09 avril 2024 - 10:44 |
J'ai oublié de mettre la dernière partie de mon code :
HLitRecherche(CategorieProduit,IDCategorieProduit,gIdCategorie)
EcranVersFichier()
CategoriePrestation.ImageCategorie = gIPhotoCategorie
HModifie(CategorieProduit)
Merci d'avance pour votre aide Bonne journée Jennifer |
| |
| |
| | | |
|
| | |
| |
Posté le 09 avril 2024 - 12:42 |
Bonjour,
Avec le code ci-dessous de Jean Turcotte, je passe de 689Ko à 78Ko.
sFicOrigine est une chaîne ="C:\317320608_197793182776389_4701864000077823352_n.jpg" sFicDestination est une chaîne ="C:\317320608_197793182776389_4701864000077823352_bis.jpg"
img est une Image = dChargeImage(sFicOrigine) dRedimensionne(img, img.Largeur/2, img..Hauteur/2, drHauteQualité) dSauveImageJPEG(img, sFicDestination, 60)
NN12 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 126 messages Popularité : +8 (8 votes) |
|
Posté le 09 avril 2024 - 14:04 |
Jennifer, tu ne dois pas utiliser EcranVersFichier car c'est l'image du Champ IMG qui est sauvegardée et elle contient le chemin de l'image d'origine. Tu dois enregistrer gIPhotoCategorie dans ta BD pour que ça fonctionne.
-- Jean Turcotte WX 28 Android 9.0 sur Galaxy S8 Laptop Lenovo I7 12GB Ram |
| |
| |
| | | |
|
| | |
| |
Posté le 09 avril 2024 - 17:19 |
Merci Jean pour ton aide. Le problème viendrait du fait que j'ai lié le champ image IMG_Categorie à ma rubrique CategoriePrestation.ImageCategorie en bdd. Je l'ai donc détachée. Mais désolé pour ma question qui va surement paraitre bête mais si je ne lie pas mon champ image à ma rubrique en bdd, comment je fais pour lui renvoyer l'image en bdd ?
J'ai essayé :
CategoriePrestation.ImageCategorie = gIPhotoCategorie..Image
ou
CategoriePrestation.ImageCategorie = gIPhotoCategorie
Mais à chaque fois la rubrique est vide.
Pouvez-vous m'aider ?
Merci Jennifer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 901 messages Popularité : +227 (347 votes) |
|
Posté le 09 avril 2024 - 19:35 |
Regarde du côté de fChargeBuffer ou de HAttacheMémo en fonction des besoins (cf doc de HExtratMémo et de HInfoMémo)
CategoriePrestation.ImageCategorie=fChargeBuffer(gsChemin) ou
HAttacheMémo(CatégoriePrestation,ImageCatégorie,gsCHeminFichier,hMemoImg) -- Il y a peut être plus simple, mais, ça tourneMessage modifié, 09 avril 2024 - 19:47 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 126 messages Popularité : +8 (8 votes) |
|
Posté le 09 avril 2024 - 19:58 |
Tu peux employé ceci, ce qui te permet de modifier la qualité de la sauvegarde
iImage est une Image = ZR_Vehicules[1].ATT_Image T_INVENTAIRE_VEHICULE.iPhoto1 = dSauveImageJPEG(iImage, enMémoire, 60) ou directement lié au du code que je t'ai fourni plushaut;
iTest est Image = AjusteImage(IMG_LogoEntreprise) T_COMMERCANT.iLogo = iTest
-- Jean Turcotte WX 28 Android 9.0 sur Galaxy S8 Laptop Lenovo I7 12GB Ram |
| |
| |
| | | |
|
| | |
| |
Posté le 11 avril 2024 - 10:00 |
Merci à tous pour votre aide.
C'est bon ça fonctionne.
Le problème venait bien du fait que le champ Image était lié à la rubrique en BDD.
En faisant bien le rattachement avec la variable image qui a été redimensionné, ça marche très bien. Et mon image ne pèse plus que 113 Ko.
Et je n'affectait pas le bon fichier, je faisais :
CategoriePrestation.ImageCategorie = gIPhotoCategorie au lieu de :
CategorieProduit.ImageCategorie = gIPhotoCategorie Ca pouvait pas marché et vous pouviez pas m'aider là-dessus
Merci Bonne journée |
| |
| |
| | | |
|
| | | | |
| | |
|