10

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

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

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

我找不到符合我背景的这条道路。有人可以帮忙吗?

4

2 回答 2

1

如果您能够获得正确的 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

于 2014-04-13T16:44:28.697 回答
0

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

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

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

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

我能够毫无问题地转换该版本。

于 2014-01-16T16:38:19.027 回答