Imagick неправильно отображает непрозрачность SVG - PullRequest
6 голосов
/ 03 сентября 2010

Мне нужен такой же вывод из Inkscape и Imagick.

Это ожидаемый результат, экспортированный из Inkscape.

corect image

Однако приведенный ниже код PHP выдает следующий ошибочный результат.

wrong image

PHP код:

<?php
$im = new Imagick();

$im->setResolution(400,400);
$im->setBackgroundColor(new ImagickPixel('transparent'));
$im->readImageBlob(str_replace(array("color1", "color2"), array("yellow", "blue"), file_get_contents("img.svg")));

$im->setImageFormat("png");
header("Content-type: image/png");
echo $im;
?>

Код SVG:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="400" height="400">
<rect width="100%" height="100%" fill="green" />
<path d="M250 150 L150 350 L350 350 Z" opacity="0.9" fill="color1" />
<path d="M150 50 L50 250 L250 250 Z" opacity="0.9" fill="color2" />
</svg>

Ответы [ 3 ]

1 голос
/ 03 сентября 2010

Какую версию PHP и ImageMagick вы используете?Пожалуйста, поделитесь соответствующим выводом phpinfo().Может ли эта ошибка ImageMagick повлиять на вас?Или, если вы не в курсе, может ли на вас повлиять другая ошибка ImageMagic?

РЕДАКТИРОВАТЬ: У меня нет простого доступа к серверу с установленными PHP-библиотеками ImageMagick на данный момент., но если я найду один, я протестирую предоставленный код и опубликую свои результаты.

EDIT2: Похоже, другие имеют ту же проблему , если только этот форумсообщение также было вашим ...

Согласно этому сообщению на форуме , вы можете попробовать:

$im->setImageFormat("png32");

Один человек сообщил, что работал, но другой сказал, что это не так...

0 голосов
/ 18 января 2015

Это уже исправлено в текущей версии Imagick.

0 голосов
/ 24 августа 2012

Inkscape использует свойство opacity, которое не поддерживается повсеместно. Вместо этого используйте fill-opacity и stroke-opacity.

...