imagerotate

imagerotate($image, $angle, $background_color)

Renvoie une nouvelle image tournée d’un angle en degrés dans le sens inverse des aiguilles d’une montre. Pour les multiples de 90°, seules la largeur et la hauteur s’échangent. Pour les autres angles, l’image grandit et les coins découverts prennent la couleur de fond. En cas d’échec, elle renvoie false.

Paramètres

  • $image – une image GD.
  • $angle – l’angle en degrés dans le sens inverse des aiguilles d’une montre (négatif = dans le sens des aiguilles).
  • $background_color – la couleur des coins découverts (pour des coins transparents, une couleur obtenue par imagecolorallocatealpha).

Exemples

$photo = imagecreatefromjpeg("photo.jpg");
// de 90° dans le sens des aiguilles d’une montre (photo de téléphone avec EXIF Orientation = 6)
$rotated = imagerotate($photo, -90, 0);
echo imagesx($rotated) . "×" . imagesy($rotated); // 333×500
// en biais : l’image grandit, les coins seront blancs
$slanted = imagerotate($photo, 45, imagecolorallocate($photo, 255, 255, 255));
echo imagesx($slanted) . "×" . imagesy($slanted); // 588×589

Points d’attention

  • Le sens est l’inverse de CSS (rotate(90deg) tourne dans le sens des aiguilles d’une montre). Une photo avec EXIF Orientation 6 se tourne de −90 (ou 270), avec Orientation 8 de 90 et avec Orientation 3 de 180.
  • Un JPEG tourné est recompressé à l’enregistrement – la qualité baisse un peu.

Fonctions associées :
imageflip()
exif_read_data()
imagecreatefromjpeg()
imagecolorallocatealpha()