1

Forcer le passage d’une image en PNG 24 bits

27 février 2006
par ARNO*

[SPIP 1.9 et GD 2] On veut transformer des images (documents joints de portfolio, logos...) au format PNG 24. Le but de la manipulation est de pouvoir ensuite appliquer une batterie complète de filtres (redimensionnements, recadrages, rotations, inversions, etc.), sans accumuler les recompressions JPEG (qui sont à chaque fois destructives).

En passant les images, dès le début des opérations, au format PNG, on travaillera tout au long de la chaîne, dans ce format non destructif.

— Si l’image est en GIF transparent, alors c’est le PNG 24 qui récupérera sa transparence.
— Si l’image est en JPEG, alors on obtient un PNG 24 sans niveau de transparence.
— Si l’image est en PNG, l’opération la laissera inchangée.

Le filtre dont nous avons besoin est : image_alpha{0}. Ce filtre modifie la transparence de l’image : avec la valeur 0 on ne modifie pas la transparence ; avec 63 on passe en transparence à 50% ; avec 127 on rend l’image complètement transparente. On l’utilisera ainsi :

pour éventuellement démarrer une chaîne de traitements :

Attention ! Les images PNG sont notoirement plus lourdes que les fichiers JPEG. Par ailleurs, les traitements sur de grosses images peuvent ne pas être possibles sur un hébergeur mutualisé : soit parce que l’opération prendra trop de temps pour être terminée, soit parce qu’on dépassera le quota de mémoire attribué à PHP. Selon les besoins, prévoir de d’abord appliquer des filtres de réduction de la taille de l’image avant de tout passer en PNG.

Puisque la réduction de taille, si elle se fait en JPEG, provoquera une première « destruction » d’informations (compression JPEG), on peut préférer réduire à une taille supérieure à la taille finale, appliquer le filtre image_alpha{0} pour forcer le passage en PNG, en ensuite seulement on opérera une seconde réduction.

Complément. Le passage d’un format à l’autre peut être réalisé avec la fonction image_aplatir que j’ai postée ici.

Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.