Watermark transparent automatique
Posté le Friday 20 July 2012 | Catégories : PHP
L'extension Imagick, et la fonction set_opacity présentée dans l'article précédent, permettent d'ajouter automatiquement un watermark transparent à une image à partir d'un texte.
$image = new Imagick("elephant.png");
add_watermark($image, "www.web-d.be");
header("Content-Type: image/" . $image->getImageFormat());
echo $image;
function add_watermark($img, $text) {
if (!is_object($img)) {
return false;
}
$watermark = new Imagick();
$draw = new ImagickDraw();
$draw->setFillColor('white');
$draw->setFont('Palatino-Bold');
$draw->setFontSize(42);
$draw->setGravity(imagick::GRAVITY_CENTER);
$metrics = $watermark->queryFontMetrics($draw, $text);
$pixel = new ImagickPixel('transparent');
$watermark->newImage($metrics['textWidth'], $metrics['textHeight'], $pixel);
$watermark->annotateImage($draw, 0, 0, 0, 'www.web-d.be');
set_opacity($watermark, 0.35);
// Sizes
$iWidth = $img->getImageWidth();
$iHeight = $img->getImageHeight();
$wWidth = $watermark->getImageWidth();
$wHeight = $watermark->getImageHeight();
// Resize Watermark if needed...
if ($iHeight < $wHeight || $iWidth < $wWidth) {
$watermark->scaleImage($iWidth, $iHeight, true);
$wWidth = $watermark->getImageWidth();
$wHeight = $watermark->getImageHeight();
}
// Calculate the position
$x = ($iWidth - $wWidth) / 2;
$y = ($iHeight - $wHeight) / 2;
$img->compositeImage($watermark, imagick::COMPOSITE_OVER, $x, $y);
return true;
}