[SPIP 1.9 et GD2] Voici un filtre technique qui, dans son usage le plus immédiat, ne provoque aucun effet graphique : il se contente de supprimer la transparence d’une image et de sauvegarder l’image dans un format déterminé.
Nous en aurons certainement une utilité nettement plus créative par la suite, mais pour l’instant, contentons-nous de l’utiliser pour aplatir une image et, surtout, la convertir dans un certain format graphique.
Notez bien : ce filtre est désormais inclus en standard dans SPIP 1.9. Vous n’avez donc pas besoin de le recopier dans votre fichier mes_fonctions.php
.
Voici notre filtre :
- function image_aplatir($im, $format='jpg', $coul='000000')
- {
- $image = valeurs_image_trans($im, "aplatir-$coul", $format);
- if (!$image) return("");
- include_ecrire("filtres");
- $couleurs = couleur_hex_to_dec($coul);
- $dr= $couleurs["red"];
- $dv= $couleurs["green"];
- $db= $couleurs["blue"];
- $x_i = $image["largeur"];
- $y_i = $image["hauteur"];
- $im = $image["fichier"];
- $dest = $image["fichier_dest"];
- $creer = $image["creer"];
- if ($creer) {
- $im = $image["fonction_imagecreatefrom"]($im);
- for ($x = 0; $x < $x_i; $x++) {
- for ($y=0; $y < $y_i; $y++) {
- $a = ($rgb >> 24) & 0xFF;
- $r = ($rgb >> 16) & 0xFF;
- $g = ($rgb >> 8) & 0xFF;
- $b = $rgb & 0xFF;
- $a = (127-$a) / 127;
- if ($a == 1) { // Limiter calculs
- $r = $r;
- $g = $g;
- $b = $b;
- } else {
- }
- }
- }
- $image["fonction_image"]($im_, "$dest");
- }
- $class = $image["class"];
- $tags = "$tags alt='".$image["alt"]."'";
- $style = $image["style"];
- return "<img src='$dest'$tags />";
- }
On aurait pu encore limiter les calculs, dans le cas des fichiers JPEG, puisque ceux-ci n’étant jamais transparents, il suffisait de faire une conversion de fichier sans se poser de questions (ici, on parcourt tout de même l’image pixel par pixel pour « fusionner » les pixels semi-transparents et la couleur de fond choisie). Mais, en réalité, ce filtre n’est pas destiné à aux images qui sont déjà en JPEG, puisque justement c’est le meilleur compromis entre le poids et la qualité pour des photographies Web.
Utilisation simple et directe pour l’instant : convertir des fichiers PNG 24 en fichiers GIF ou en fichiers JPEG.
• Appliqué à des photographies, on réduit énormément le poids des fichiers (PNG 24 est un format excessivement lourd).
• Appliqué à des images typographiques, on peut par exemple supprimer la transparence, ce qui dans certains cas facilitera l’utilisation (par exemple en tant qu’image de fond d’une classe CSS). En revanche, sur les images typographiques, l’argument du poids du fichier n’est pas aussi pertinent, le PNG 24 compressant assez bien les aplats de couleurs.
- [(#TITRE
- |image_typo{police=stencil.ttf,couleur=000000,taille=40})]
- [(#TITRE
- |image_typo{police=stencil.ttf,couleur=000000,taille=40}
- |image_aplatir{gif,ff0000})]
On a donc notre image typographiques d’origine, fichier PNG avec transparence :
on obtient un fichier GIF, non transparent, dont on a fixé la couleur du fond :
N.B. Ne convertissez pas des images typographiques en JPEG : le JPEG provoque dans les images comportant d’importants aplats de couleurs des artefacts de compression hideux.