La manipulation d'images en PHP repose principalement sur la bibliothèque GD. Ce guide technique explique comment intégrer des filigranes textuels et fusionner plusieurs fihciers graphiques, comme l'ajout d'un QR code sur un arrière-plan.
1. Application d'un filigrane textuel sur une image
Pour insérer du texte sur une image existante, nous utilisons la fonction imagettftext. Celle-ci permet de définir précisément la police, la taille, l'angle et la position du texte.
<?php
/**
* Ajoute un texte sur une image source
*/
$sourceFile = 'fond_ecran.png';
$image = imagecreatefromstring(file_get_contents($sourceFile));
// Configuration du texte
$fontPath = './fonts/arial.ttf';
$textColor = imagecolorallocate($image, 255, 255, 255); // Blanc
$fontSize = 14;
$rotation = 0;
$coordinateX = 30;
$coordinateY = 50;
$textContent = "Propriété de l'entreprise";
// Application du texte
imagettftext($image, $fontSize, $rotation, $coordinateX, $coordinateY, $textColor, $fontPath, $textContent);
// Détermination du format de sortie
$imageInfo = getimagesize($sourceFile);
$mimeType = $imageInfo['mime'];
header("Content-Type: $mimeType");
match($mimeType) {
'image/jpeg' => imagejpeg($image),
'image/png' => imagepng($image, "exports/resultat_texte.png"),
'image/gif' => imagegif($image),
default => null
};
imagedestroy($image);
?>
2. Fusion de deux images (Superposition de QR Code)
La fusion d'images est couramment utilisée pour ajouter des logos ou des codes QR sur des supports marketing. La fonction imagecopymerge est l'outil principal pour cette opération.
<?php
$baseImgPath = 'support.jpg';
$overlayPath = 'qrcode.png';
$baseRessource = imagecreatefromstring(file_get_contents($baseImgPath));
$overlayRessource = imagecreatefromstring(file_get_contents($overlayPath));
// Conservation de la transparence si le calque est un PNG
imagesavealpha($baseRessource, true);
list($widthOverlay, $heightOverlay) = getimagesize($overlayPath);
// Fusion des deux ressources (opacité à 100%)
imagecopymerge(
$baseRessource,
$overlayRessource,
20, 20, // Position X et Y sur l'image de destination
0, 0, // Point de départ X et Y sur l'image source
$widthOverlay,
$heightOverlay,
100 // Niveau de fusion (0-100)
);
header('Content-Type: image/jpeg');
imagejpeg($baseRessource);
imagedestroy($baseRessource);
imagedestroy($overlayRessource);
?>
3. Redimensionnement dynamique avant fusion
Il est souvent nécessaire d'ajuster la taille d'un élément (comme un logo trop grand) avant de l'intégrer sur l'image finale. Voici comment procéder à un échantillonnage de haute qualité.
<?php
function redimensionnerImage($chemin, $ratio = 0.5) {
list($originalW, $originalH) = getimagesize($chemin);
$newW = $originalW * $ratio;
$newH = $originalH * $ratio;
$vignette = imagecreatetruecolor($newW, $newH);
$source = imagecreatefrompng($chemin);
// Redimensionnement avec lissage
imagecopyresampled($vignette, $source, 0, 0, 0, 0, $newW, $newH, $originalW, $originalH);
return $vignette;
}
$fond = imagecreatefromjpeg('paysage.jpg');
$logoRedimensionne = redimensionnerImage('logo_grand.png', 0.3);
$logoW = imagesx($logoRedimensionne);
$logoH = imagesy($logoRedimensionne);
// Intégration du logo redimensionné
imagecopy($fond, $logoRedimensionne, 10, 10, 0, 0, $logoW, $logoH);
header('Content-Type: image/png');
imagepng($fond);
imagedestroy($fond);
imagedestroy($logoRedimensionne);
?>
Détails techniques de imagecopymerge
La syntaxe de imagecopymerge se décompose ainsi :
imagecopymerge($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct)
- $dst_im : Image de destination (le fond).
- $src_im : Image source (le calque à copier).
- $dst_x / $dst_y : Coordonnées de destination sur le fond.
- $src_x / $src_y : Point de départ de la découpe sur l'image source.
- $src_w / $src_h : Largeur et hauteur de la portion à copier.
- $pct : Degré de transparence (0 pour invisible, 100 pour opaque).
Note : Pour les images indexées (palette), imagecopymerge se comporte différemment de imagecopy si le paramètre $pct est inférieur à 100.