Imagick中的setVectorGraphics方法存在问题


Issue with setVectorGraphics method in Imagick?

我正在处理一项任务,该任务需要解析SVG路径数据以用作Imagick中的剪辑掩码。。。现在,我在尝试使用setVectorGraphics方法时遇到了错误——下面的代码生成了一条错误消息,如:

致命错误:未捕获异常"ImagickException",消息为"无法绘制图像"

$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();

(代码来自此演示)

我很确定Imagick和ImagickDraw在这里的用法是正确的。。。这是Imagick库中的错误吗?如果是的话,有没有办法解决这个问题?

谢谢!

我很确定Imagick和ImagickDraw在这里的用法是正确的

正确。在本例中,PHP对ImageMagick的C-API的实现已经完成。

这是Imagick库中的错误吗?

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

如果是的话,有没有办法解决这个问题?

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

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