PRATIQUE PHP 
Appliquer une rotation à une image via GD
 
"Comment puis-je afficher une image choisie au hasard, penchée selon un angle également choisi au hasard, le tout dans un fond blanc ?" (12/09/2005)
  Forum

Réagissez dans les forums de JDN Développeurs

La bibliothèque GD de PHP offre des fonctionnalités très puissantes, mais également assez délicates à maîtriser. Ici le défi n'est pas tant de choisir une image ou un angle au hasard, mais le fond de l'image. En effet, une fois tournée, l'image sera dans une surface rectangulaire agrandie par rapport à l'originale, et les angles ajoutés prendront par défaut la couleur noire, ce qui n'est pas toujours idéal.

Partons du principe que les fichiers sont toujours nommés sous la forme pic1.jpg à pic25.jpg, et que l'angle doit être compris en 0 et 45°. Voici notre code :

<?php
header('Content-type: image/jpeg');

$fichier = "./img/pic".rand(1, 26).".jpg";
$image = imagecreatefromjpeg($fichier);
$angle = 360 - rand(1, 45);

$coul_blanc = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$rotation = imagerotate($image, $angle, $coul_blanc);

imagejpeg($rotation);
imagedestrot($rotation);
?>


La fonction rand() sert à obtenir une valeur au hasard entre deux limites rapidement, ce que nous faisons pour le nom du fichier comme l'angle.

La couleur de fond ne peut malheureusement pas être définie comme en HTML, avec une chaîne "white" ou "#ffffff". Il nous faut définir une couleur pour le fond de l'image, au travers d'une autre fonction GD, imagecolorallocate(). Celle-ci prend les valeurs hexadécimales équivalentes à un code HTML.

Enfin, nous indiquons l'entête HTTP à envoyer : c'est d'un fichier JPeg qu'il s'agit ici. Ainsi, on pourra appeller ce code directement depuis un code HTML de ce genre : <img src="image-rotation.php" />.
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page