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


Error in exporting raphaeljs to jpg with path background as image

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

因此,在我的应用程序中,我向path元素添加一个attr,如下所示:

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

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

如果你能够获得正确的输出到 svg,但它在 php 中无法进入 png,那么你需要检查几件事。

  • 作为健全性检查,请确保您的 $_POST['json'] 没有返回格式错误的 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

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

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

似乎它可能更可靠。 您可以将其用作入门,并向其添加您喜欢的路径。 我在使用图像作为填充时遇到了问题,因为它们似乎从未渲染到我期望的位置。

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

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