Fairweb

Développement WordPress, WordPress Mu, BuddyPress

Librairie gd : symétrie horizontale et verticale

| 2 Commentaires

logo phpLa librairie gd de php qui permet de travailler sur les images ne propose pas de fonction pour appliquer une symétrie à une image. Il faut donc créer sa propre fonction qui aura pour mission de recopier l’image, pixel par pixel, en en inversant l’ordre, tout en respectant la transparence des png.

J’avais trouvé une bonne base sur roscript que j’ai adaptée à mes besoins, notamment pour gérer la transparence.
<?php function image_flip($img, $type=''){
$width = imagesx($img);
$height = imagesy($img);
$dest = imagecreatetruecolor($width, $height);
imagealphablending($dest, false);
imagesavealpha($dest, true);
switch($type){
case 'v':
for($i=0;$i<$height;$i++){
imagecopy($dest, $img, 0, ($height - $i - 1), 0, $i, $width, 1);
}
break;
case 'h':
for($i=0;$i<$width;$i++){
imagecopy($dest, $img, ($width - $i - 1), 0, $i, 0, 1, $height);
}
break;
default : return $img; break;
}
return $dest;
} ?>

Prenons pour exemple la photo de Tux en png.

tux

Appliquons-lui un flip vertical et enregistrons le nouveau fichier :
<?php $img = imagecreatefrompng('images/tux.png');
$symetrie = 'v';
$img = image_flip($img, $symetrie);
// Désactivation de l'alphablending
imagealphablending($img, false);
// Sauvegarde des données alpha pour conserver la transparence
imagesavealpha($img, true);
// si le fichier existe on le supprime
if (file_exists("images/tux_".$symetrie.".png")) { unlink("images/tux_".$symetrie.".png"); }
// on crée le fichier en png
imagepng($img, "images/tux_".$symetrie.".png");
// destruction de l'image gd
imagedestroy( $img ); ?>

tux_v

si on remplace $symetrie = ‘v’ par $symetrie = ‘h’

tux_h1

Et maintenant, pour s’assurer que la transparence du fond a bien été conservée, affichons l’image avec style css backgroundcolor :
<img style="background-color:#006699" src="http://www.fairweb.fr/wp-content/uploads/2009/03/tux_h1.png" alt="tux_h1" />

tux_h1

Share

Auteur : Fairweb

Développement php/mysql, conception de sites internet

2 Commentaires

  1. Le maître a parlé!
    Excellent script! Jamais pensé faire ça aussi simplement!
    Purement brillant et génial!

  2. Ca sert à ça le web ;) Quand on s’est bien cassé la tête à trouver un truc, on le partage. Ainsi, on trouve à notre tour des solutions que les autres ont résolues.

Laisser un commentaire

Champs Requis *.

*