Je travaille sur un script destiné à afficher des images dont le
poids soit inférieur à une taille maximale donnée.
Tout marche parfaitement en Jpeg, voici comment le code fonctionne:
* Calcul du poids de l'image avec quality = 99
* Si poids > poids_max alors on retente en décrementant quality de 1
* Si poids < poids_max alors on affiche l'image
Là, où ça se complique, c'est lorsque tente la même chose au format
PNG (ou GIF). J'ai tenté de programmer un script fonctionnant comme
ceci :
* Calcul du poids de l'image en 256 couleurs
* Si poids > poids_max alors on retente en décrementant couleur de 1
* Si poids < poids_max alors on affiche l'image
Il semble qu'une fois qu'une image en True Color est transformée en
image à palette avec imagetruecolortopalette, il est impossible de
remodifier la palette par la suite.
Pire, lorsque le script appelle imagetruecolortopalette, on dirait que
cela affecte toutes les images que pourraient traiter le script. Les
appels suivant à imagetruecolortopalette ne donnent aucun résultat.
En clair, il me faudrait une fonction capable de passer d'une image à
palette à une autre image à palette plus réduite.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
clifden
wrote:
Bonjour à tous,
Je travaille sur un script destiné à afficher des images dont le poids soit inférieur à une taille maximale donnée. Tout marche parfaitement en Jpeg, voici comment le code fonctionne: * Calcul du poids de l'image avec quality = 99 * Si poids > poids_max alors on retente en décrementant quality de 1 * Si poids < poids_max alors on affiche l'image
Cela ne réponds pas à ton problème, mais: Ne pourrais-tu pas faire de manière dichotomique afin d'optimiser un peu le temps de fabrication? $a=0; $b0; while ($b>$a+1) { $q=($a+$b)/2; // fabrique l'image ...
if ($poids>$poids>$max) $b=$q; if ($poids<$poids>$max) $a=$q; }
edo999@gmail.com wrote:
Bonjour à tous,
Je travaille sur un script destiné à afficher des images dont le
poids soit inférieur à une taille maximale donnée.
Tout marche parfaitement en Jpeg, voici comment le code fonctionne:
* Calcul du poids de l'image avec quality = 99
* Si poids > poids_max alors on retente en décrementant quality de 1
* Si poids < poids_max alors on affiche l'image
Cela ne réponds pas à ton problème, mais:
Ne pourrais-tu pas faire de manière dichotomique afin d'optimiser un peu
le temps de fabrication?
$a=0;
$b0;
while ($b>$a+1) {
$q=($a+$b)/2;
// fabrique l'image
...
if ($poids>$poids>$max) $b=$q;
if ($poids<$poids>$max) $a=$q;
}
Je travaille sur un script destiné à afficher des images dont le poids soit inférieur à une taille maximale donnée. Tout marche parfaitement en Jpeg, voici comment le code fonctionne: * Calcul du poids de l'image avec quality = 99 * Si poids > poids_max alors on retente en décrementant quality de 1 * Si poids < poids_max alors on affiche l'image
Cela ne réponds pas à ton problème, mais: Ne pourrais-tu pas faire de manière dichotomique afin d'optimiser un peu le temps de fabrication? $a=0; $b0; while ($b>$a+1) { $q=($a+$b)/2; // fabrique l'image ...
if ($poids>$poids>$max) $b=$q; if ($poids<$poids>$max) $a=$q; }
Edo
Excellente optimisation. Maintenant, la boucle n'est répétée que 7 fois au lieu de 25 dans le cas d'une qualité à 85% ! Merci beaucoup.
Quelqu'un peut m'aider à réduire la palette d'une image ? cf. 1er post.
Excellente optimisation. Maintenant, la boucle n'est répétée que 7
fois au lieu de 25 dans le cas d'une qualité à 85% !
Merci beaucoup.
Quelqu'un peut m'aider à réduire la palette d'une image ? cf. 1er
post.
Excellente optimisation. Maintenant, la boucle n'est répétée que 7 fois au lieu de 25 dans le cas d'une qualité à 85% ! Merci beaucoup.
Quelqu'un peut m'aider à réduire la palette d'une image ? cf. 1er post.
Xavier Garreau
Excellente optimisation. Maintenant, la boucle n'est répétée que 7 fois au lieu de 25 dans le cas d'une qualité à 85% ! Merci beaucoup.
Quelqu'un peut m'aider à réduire la palette d'une image ? cf. 1er post.
En C, depuis gd2.0.28, il existe la fonction gdImagePtr gdImageCreatePaletteFromTrueColor(gdImagePtr im, int ditherFlag, int colorsWanted) qui conserve l'image originale.
Tu peux donc: 1. vérifier que l'équivalent n'existe pas dans php (sait-on jamais, même si ce n'est pas dans la doc) 2. transformer ton script en cgi 3. essayer de modifier le module gd pour ajouter le wrapper autour de cette fonction. 4. utiliser imagecopy avant imagetruecolortopalette pour garder ton image d'origine intacte
a+ -- Xavier Garreau http://www.xgarreau.org/
Excellente optimisation. Maintenant, la boucle n'est répétée que 7
fois au lieu de 25 dans le cas d'une qualité à 85% !
Merci beaucoup.
Quelqu'un peut m'aider à réduire la palette d'une image ? cf. 1er
post.
En C, depuis gd2.0.28, il existe la fonction gdImagePtr
gdImageCreatePaletteFromTrueColor(gdImagePtr im, int ditherFlag, int
colorsWanted) qui conserve l'image originale.
Tu peux donc:
1. vérifier que l'équivalent n'existe pas dans php (sait-on jamais, même si ce
n'est pas dans la doc)
2. transformer ton script en cgi
3. essayer de modifier le module gd pour ajouter le wrapper autour de cette
fonction.
4. utiliser imagecopy avant imagetruecolortopalette pour garder ton image
d'origine intacte
Excellente optimisation. Maintenant, la boucle n'est répétée que 7 fois au lieu de 25 dans le cas d'une qualité à 85% ! Merci beaucoup.
Quelqu'un peut m'aider à réduire la palette d'une image ? cf. 1er post.
En C, depuis gd2.0.28, il existe la fonction gdImagePtr gdImageCreatePaletteFromTrueColor(gdImagePtr im, int ditherFlag, int colorsWanted) qui conserve l'image originale.
Tu peux donc: 1. vérifier que l'équivalent n'existe pas dans php (sait-on jamais, même si ce n'est pas dans la doc) 2. transformer ton script en cgi 3. essayer de modifier le module gd pour ajouter le wrapper autour de cette fonction. 4. utiliser imagecopy avant imagetruecolortopalette pour garder ton image d'origine intacte