WEB-d Développement Web

PHP, SQL, HTML5, CSS3, Javascript, Mootools, Référencement, SEO, CMS, e-commerce, Apache, Linux, Ubuntu, ...

Créer une image transparente avec Imagick

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.

Eléphant PHP Eléphant PHP avec Imagick::setOpacity()

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é:

Eléphant PHP Eléphant PHP transparent


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

Articles similaires