我正在处理一项任务,需要解析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();
(代码来自this demo)
我很确定Imagick和ImagickDraw在这里的用法是正确的......这是Imagick库中的一个错误吗?如果是这样,有什么方法可以解决这个问题吗?
谢谢!
答案 0 :(得分:1)
我很确定Imagick和ImagickDraw在这里的使用是正确的
正确。在这种情况下,PHP的ImageMagick C-API实现已经完成。
...这是Imagick库中的一个错误吗?
是。此功能有问题的历史记录,并且ImageMagick版本的行为已发生变化。确保您拥有最新版本,编写测试用例并提交错误报告。
如果是这样,有什么方法可以解决这个问题吗?
ImagickDraw::getVectorGraphics
返回一串xml节点,但不是完整的XML文档。您的调用代码需要生成缺少的父节点。
$SVG = $draw->getVectorGraphics();
// ....
$draw2->setVectorGraphics('<root>' . $SVG . '</root>');