Imagick 中的 setVectorGraphics 方法有问题吗?

Issue with setVectorGraphics method in Imagick?

我正在执行一项任务,该任务需要解析 SVG 路径数据以用作 Imagick 中的剪辑蒙版...现在,我在尝试使用 setVectorGraphics 方法时遇到错误 - 以下代码会产生错误消息如:

致命错误:未捕获异常 'ImagickException' 消息 'Unable to draw image'

$draw = new \ImagickDraw();
$draw->setFillColor("red");
$draw->circle(20, 20, 50, 50);
$draw->setFillColor("blue");
$draw->circle(50, 70, 50, 50);
$draw->rectangle(50, 120, 80, 150);
//Get the drawing as a string
$SVG = $draw->getVectorGraphics();

$draw2 = new \ImagickDraw();
$draw2->setVectorGraphics($SVG);
$imagick = new \Imagick();
$imagick->newImage(200, 200, 'white');
$imagick->setImageFormat("png");
$imagick->drawImage($draw2);
header("Content-Type: image/png");
echo $imagick->getImageBlob();

(代码来自this demo

我很确定这里使用的 Imagick 和 ImagickDraw 是正确的...这是 Imagick 库中的错误吗?如果是这样,有什么办法可以解决这个问题吗?

谢谢!

I'm pretty sure the usage of Imagick and ImagickDraw here is correct

正确。 PHP ImageMagick 的 C-API 的实现,在这个例子中,已经完成。

... is this a bug in the Imagick library?

是的。此功能有问题的历史记录,并且行为在 ImageMagick 版本中发生了变化。确保您拥有最新版本、编写测试用例并提交错误报告。

If so, is there some way to work around the issue?

ImagickDraw::getVectorGraphics returns 一串 xml 个节点,但不是完整的 XML 文档。您的调用代码需要生成缺少的父节点。

$SVG = $draw->getVectorGraphics();
// ....
$draw2->setVectorGraphics('<root>' . $SVG . '</root>');