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);
?>