Imagick :: paintOpaqueImage на изображении SVG игнорирует полупрозрачные пиксели - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно изменить цвет с помощью PHP и Imagick в изображении SVG.Everythink работает хорошо, но полупрозрачные пиксели не меняют цвет, что мне нужно.

Я смотрел в основном на сайте об этой проблеме, но все написали для формата PNG.Кто-нибудь сталкивался с этой проблемой?

            $baseFolder = $_SERVER['DOCUMENT_ROOT'] . '/recolor_icons/';
            $baseName = basename($imageSvgFile, '.svg');

            $suffixSvg = pathinfo($imageSvgFile, PATHINFO_EXTENSION);

            if($suffixSvg !== 'svg' || !file_exists($baseFolder . $baseName)) {
                $image = new Imagick();
                $image->setBackgroundColor(new ImagickPixel('transparent'));

                $image->readImage($imageSvgFile); 

                $image->setImageAlphaChannel(Imagick::ALPHACHANNEL_DEACTIVATE);

                $source = "rgba(227, 6, 19)";
                $fill = "rgba(255, 255, 255)";
                $image->opaquePaintImage($source, $fill, 0, false);

                $image->setImageAlphaChannel(Imagick::ALPHACHANNEL_ACTIVATE);

                $hoverName = $baseName . '_hover.';

                $image->despeckleimage();

                $image->writeImage($baseFolder . $hoverName . $suffixSvg);

                $svg_file = file_get_contents($baseFolder . $hoverName . $suffixSvg);

                $replaceSvg = str_replace('<svg ', '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ', $svg_file);

                file_put_contents($baseFolder . $hoverName . $suffixSvg, $replaceSvg);  

                return '/recolor_icons/' . $hoverName . $suffixSvg;
            }

Это должно выглядеть так: это

Но теперь это выглядит как this

Можеткто-нибудь, помогите мне, пожалуйста?

...