Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Imagick中的setVectorGraphics方法存在问题?_Php_Svg_Imagemagick_Imagick - Fatal编程技术网

Php Imagick中的setVectorGraphics方法存在问题?

Php Imagick中的setVectorGraphics方法存在问题?,php,svg,imagemagick,imagick,Php,Svg,Imagemagick,Imagick,我正在做一项任务,需要解析SVG路径数据,以便在Imagick中用作剪辑掩码。。。现在,我在尝试使用setVectorGraphics方法时遇到错误-下面的代码生成错误消息,如: 致命错误:未捕获异常“ImagickException”,消息为“无法绘制图像” $draw = new \ImagickDraw(); $draw->setFillColor("red"); $draw->circle(20, 20, 50, 50); $draw->setFillColor("bl

我正在做一项任务,需要解析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库中的一个bug吗?如果是的话,有没有办法解决这个问题

谢谢

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

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

。。。这是Imagick库中的一个bug吗

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

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

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

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

我非常确定对ImageMagick的库调用不起作用,这就是为什么该示例无法在上查看,因为它根本不起作用。有人需要向上游报告可能涉及用C语言编写示例的问题,这就是为什么它出现在我的待办事项列表中,而不是已完成事项列表中的原因。@Danack无需担心-下面给出的解决方案是一个可接受的解决方法。感谢您提供的优秀库和教程!太棒了-这个解决方案非常有效。我确实查看了getVectorGraphics的SVG输出,但对其格式不太熟悉,因此没有发现丢失的标记。非常感谢你的帮助!不过,很抱歉,我显然缺乏提升投票所需的声望:P@TarekSami很乐意帮忙。只需简单地“接受”这个答案就可以帮助您获得声誉积分。@emcconville您似乎对Imagick及其bug有点了解。你能打开你想修复的其他问题吗?e、 我最近才发现setVectorGraphics有这个问题-