PHP imagick COMPOSITE_DSTIN результат имеет черный фон - PullRequest
2 голосов
/ 20 июня 2019

Я пытаюсь установить градиент текста из этого решения здесь https://www.sitepoint.com/community/t/gd-text-gradient/82127/9

Но фоновый цвет конечного изображения черный, я пытаюсь $im->flattenImages и $img->setBackgroundColor, но он не работает.

$im = new Imagick();

        $draw = new ImagickDraw();
        $draw->setFontSize(90);
        $draw->setFillColor(new ImagickPixel("black"));
        $draw->setTextEncoding('UTF-8');
        $draw->setGravity(Imagick::GRAVITY_CENTER);

        $metric = $im->queryFontMetrics($draw, $text);

        $width = $metric['textWidth'];
        $height = $metric['textHeight'];

        /* Create and save the gradiant */
        $Imagick = new Imagick();
        $Imagick->newPseudoImage($height, $width, "gradient:#FB7F4C-#FF409C");
        /*** rotate the image ***/
        $Imagick->rotateImage(new ImagickPixel(), 270);
        $Imagick->setImageFormat('png');
        $Imagick->writeImage("gradiant.png");

        /* Create and save the canvas */
        $im->newPseudoImage($width, $height, "null:");
        $im->setImageFormat('png');
        $im->writeImage("canvas.png");

        /* Add the text to the canvas ( Make the mask )*/
        $im = new Imagick("canvas.png");

// Write the text on the image
        $im->annotateImage($draw, 0, 0, 0, $text);
        $im->setImageBackgroundColor("transparent"); // <= Here
        /* Final image */
        $canvas = new Imagick("gradiant.png");
        $canvas->compositeImage($im, imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);

        $canvas->setImageFormat('png');
        $canvas->writeImage(__DIR__ . "/../../final.png");

        header('Content-Type: image/' . $im->getImageFormat());
        echo $canvas;

        unlink("canvas.png");
        unlink("gradiant.png");

Я обнаружил, что после COMPOSITE_DSTIN цвет фона становится черным, я стараюсь, но он не работает

Как удалить черный фон?

1 Ответ

3 голосов
/ 23 июня 2019

Я решил это, добавив альфа-канал

Я пытаюсь $canvas->setImageAlphaChannel(Imagick::ALPHACHANNEL_RESET); и после этого фон остается прозрачным

...