将raphaeljs导出为jpg且路径背景为图像时出错

时间:2012-06-18 21:05:36

标签: php javascript svg raphael

我的raphaeljs导出插件(https://github.com/ElbertF/Raphael.Export)有问题。 在路径元素中我使用属性fill并作为源我给图像url填充。但是当我将它导出到SVG时,我看到了一个路径元素定义,但是当我将它导出到PNG时,我再也看不到了。

因此,在我的应用中,我添加attrpath元素,如下所示:

paper.path("M 195 10 L 300  L 195 z").attr({'stroke-width': 0,'fill': 'url(images/alfen/02/murek.png)'});

我将其导出为paper.toSVG()

在我的SVG中我找到了一条路径:

<path transform="matrix(1,0,0,1,0,0)" fill="url(images/alfen/02/murek.png)" stroke="#000" d="M203,183.94389438943895L948,183.94389438943895L948,195L203,195Z" stroke-width="0"></path>

但是当我用“

”将其转换为PNG时
<?php 
    $json        = $_POST['json'];
    $output      = str_replace('\"','"',$json);
    $filenameSVG = 'test';

    file_put_contents("$filenameSVG.svg", $output);

    $konwert = "convert $filenameSVG.svg $filenameSVG.jpg";

    system($konwert);

我无法找到满足我背景的这条道路。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

如果您能够正确输出到svg但是它无法在php中执行png,那么您需要检查几件事。

  • 作为一个完整性检查,确保你的$ _POST [&#39; json&#39;]没有返回格式错误的json
  • 你的php中的下一行让我感到困惑:$output = str_replace('\"','"',$json);
  • 可能是您返回的json是单个对象,但我仍然不确定您为什么要搜索整个文件而不是查找特定的嵌套对象,例如$output = str_replace('\"','"',$json['filename_and_path']);如果你返回的json是一行,可能有更好的方法来处理它 - 即将它作为字符串发布,或者甚至用数组和索引返回每一行。

对于这个东西:

$konwert = "convert $filenameSVG.svg $filenameSVG.jpg";
system($konwert);

您可能无法在字符串中为system()提供有效变量。为了确保我建议正确连接字符串,如:

$konwert = "convert".$filenameSVG.".svg ".$filenameSVG.".jpg";

您还需要服务器上文件的绝对文件路径来执行命令,否则它将无法找到该文件。如果这两个文件位于项目的根目录中,代码$konwert = "convert".$filenameSVG.".svg ".$filenameSVG.".jpg";显然只适合您。

我也不认为你应该在这个例子中使用system()。我的理解是你应该使用passthru()来处理图像二进制文件。还有exec(),但实际上,我认为你需要的是passthru()。请参阅:http://www.php.net/manual/en/function.passthru.php

答案 1 :(得分:0)

看起来您的路径只是为图像设置容器。你不能用:

paper.image('images/alfen/02/murek.png', 50, 50, 300, 195);

似乎它可能更可靠。您可以将其用作启动器并添加您喜欢的路径。我在使用图像作为填充时遇到了问题,因为它们似乎永远不会呈现我期望它们的位置。

您仍然可以使用:paper.toSVG()

我能够毫无困难地转换该版本。