Fusionner des images avec PHP (avec un canal alpha)

Fusionner des images avec PHP (avec un canal alpha)

Tags : PHP, Tutorial
Catégorie : Programmation
Mise en ligne : 23 Août 2014 à 00:00

Il y a quelques temps j'ai fais un site Internet pour un photographe et il voulait intégrer son logo sur chacune des photos lors de l'upload. Avec un petit tour sur le doc PHP, la librairie GD permet de faire cela très facilement grâce à imagecopy.

Pour cet exemple nous allons prendre une image JPG, mais le système fonctionne aussi pour des PNG et des GIF (sans animations).

On récupère l'image uploadée ainsi que ses dimensions

$dest = imagecreatefromjpeg('image.jpg');
list($largeur_image, $hauteur_image) = getimagesize('image.jpg');

On récupère notre logo en PNG pour avoir de la transparence

$logo = imagecreatefrompng('logo.png');

Notre logo fait 24px par 24px et notre image uploadée fait 600px par 600px. Nous souhaitons placer notre logo dans le coin inférieur droit de notre image

$x = $largeur_image - 24;
$y = $hauteur_image - 24;

On fusionne les images. Voici les paramètres dans l'ordre :

  • Image de destination (finale)
  • Image de la source (logo)
  • Coordonnée X de l'image de destination (laissez 0 sinon un décalage se produit)
  • Coordonnée Y de l'image de destination (laissez 0 sinon un décalage se produit)
  • Coordonnée X de l'image source
  • Coordonnée Y de l'image source
  • Largeur de l'image source
  • Hauteur de l'image source
imagecopy($dest, $logo, 0, 0, $x, $y, 24, 24);

Pour enregistrer l'image finale

imagejpeg($dest, 'image.jpg', 100);

Mais si vous souhaitez afficher directement l'image à votre utilisateur

header("Content-type: image/jpeg");
imagejpeg($dest, null, 100);

Et en parcourant un peu plus la doc j'ai vu qu'il existait une autre fonction pour fusionner des images imagecopymerge qui permet quant à elle de gérer le pourcentage d'opacité de l'image source. Seul problème que j'ai constaté, si votre image source a un canal alpha, son fond sera noir. Je ne sais pas pourquoi. Même en mettant le dernier paramètre à 100.

Donc pour le moment si vous avez des images à fusionner avec un canal alpha, la meilleure solution reste la première.

<Laisser un commentaire/>

* Champs obligatoire