Manipulation d'images en PHP - Librairie GD

Auteur: Mohamed CHINY Durée necessaire pour le cours de Manipulation d'images en PHP - Librairie GD Niveau recommandé pour le cours de Manipulation d'images en PHP - Librairie GD Supports vidéo non disponibles pour ce cours Exercices de renforcement disponibles pour ce cours Quiz non disponibles pour ce cours

Page 10: Manipulations d'images existantes avec GDlib - Deuxième partie

Toutes les pages

Transformation d'images avec GDlib - Suite

Rotation d'images: fonction imagerotate()

La fonction imagerotate($img , $angle , $couleur , $ign_transparence) permet de faire pivoter l'image $img autour de son centre. La rotation s'effectue dans la sens anti-horaire et elle est spécifiée par l'entier $angle (exprimé en degrés). Après la rotation, des zones seront découverts et seront alors colorées de $couleur. Le paramètre $ign_transparence permet d'indiquer si on ignore les couleurs transparentes sur les zones découvertes ou non. Si ce paramètre vaut 0 alors la transparence des couleurs n'est pas prise en compte.

Pour rendre une couleur transparente on fait appel à la fonction imagecolortransparent($img , $couleur). Désormais, la couleur $couleur est transparente.

Exemple:
<?php
   header("content-type:image/png");
   $img = imagecreatefromjpeg("monimage.jpg");
   $gris=imagecolorallocate($img,200,200,200);
   imagecolortransparent($img,$gris);
   $rotate=imagerotate($img,45,$gris);
   imagepng($rotate);
?>
Dans ce cas, la transparence du gris n'est pas prise en compte. On obtient alors:
<?php
   header("content-type:image/png");
   $img = imagecreatefromjpeg("monimage.jpg");
   $gris=imagecolorallocate($img,200,200,200);
   imagecolortransparent($img,$gris);
   $rotate=imagerotate($img,45,$gris,1);
   imagepng($rotate);
?>
Là par contre, la transparence est prise en compte:

Redimensionnement d'images: fonctions imagecopyresized() et imagecopyresampled()

La fonction imagecopyresized($img1 , $img2 , $x1 , $y1 , $x2 , $y2 , $l1 , $h1 , $l2 , $h2) permet de copier l'image $img2 sur $img1 avec la possibilité de redimensionner l'image copiée.

La copie commence à partir du point dont les coordonnées sont $x1 et $y1 sur $img1. On peut cependant copier juste une partie de $img2 en désignant les coordonnées $x2 et $y2 du point où on souhaite commencer la copie ainsi que la largeur $l2 et hauteur $h2 de la zone à copier. $l1 et h1 désignent la largeur et la hauteur de $img1 sur lesquelles la partie de l'image à copier sera étalée. On obtient ainsi le redimensionnement souhaité.

Exemple:
<?php
   header("content-type:image/png");
   $img1 = imagecreatefromjpeg("monimage.jpg");
   $img2 = imagecreatefrompng("logo.png");
   imagecopyresized($img1,$img2,10,10,0,0,imagesx($img2)*2,imagesy($img2)*2,imagesx($img2),imagesy($img2));
   imagepng($img1);
?>
On obtient donc:
La fonction imagecopyresampled($img1 , $img2 , $x1 , $y1 , $x2 , $y2 , $l1 , $h1 , $l2 , $h2) effectue le même traitement que imagecopyresized(). Cependant, imagecopyresampled rééchantillonne les pixels de l'images, ce qui donne une image redimensionnée de meilleur qualité.

L'exemple précédent peut se faire ainsi:
<?php
   header("content-type:image/png");
   $img1 = imagecreatefromjpeg("monimage.jpg");
   $img2 = imagecreatefrompng("logo.png");
   imagecopyresampled($img1,$img2,10,10,0,0,imagesx($img2)*2,imagesy($img2)*2,imagesx($img2),imagesy($img2));
   imagepng($img1);
?>