Créer une image transparente avec Imagick
Posté le Friday 20 July 2012 | Catégories : PHP
L'extension PHP Imagick comporte une fonction "setOpacity" qui, comme son nom l'indique, permet de modifier l'opacité d'une image. Elle présente cependant un bug : si le fond de l'image est déjà transparent, celui-ci devient gris.
La fonction ci-dessous, inspirée par le blog catch404, utilise le pixelIterator de Imagick pour modifier les pixels un par un et produire ainsi le résultat espéré:
function set_opacity($img, $alpha)
{
if (!is_object($img)) {
return false;
}
if ($alpha > 1 || $alpha < 0) {
return false;
}
$delta = 1 - $alpha;
$rows = $img->getPixelIterator();
foreach ($rows as $cols) {
foreach ($cols as $pixel) {
$current = $pixel->getColorValue(Imagick::COLOR_ALPHA);
$pixel->setColorValue(
Imagick::COLOR_ALPHA,
(($current - $delta > 0) ? ($current - $delta) : (0))
);
// Appliquer le changement sur l'image...
$rows->syncIterator();
}
}
return true;
}
$img = new Imagick("elephant.png");
set_opacity($img, 0.25);
header('Content-type: image/png');
echo $img;
Si l'extension Imagick n'est pas présente sur votre système Ubuntu, vous pouvez l'installer depuis la ligne de commande :
sudo apt-get install php5-imagick