【问题标题】:Error in exporting raphaeljs to jpg with path background as image将 raphaeljs 导出为带有路径背景作为图像的 jpg 时出错
【发布时间】:2012-06-20 21:44:31
【问题描述】:

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

所以在我的应用程序中,我将attr 添加到path 元素,如下所示:

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

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

【问题讨论】:

  • 快速猜测:要么提供完整的 url(带域名),要么如果失败,提供图像的本地路径(在 fill 属性中)? convert 不知道您的网站、域或任何相关信息。
  • 在我的 svg 中,我也有 &lt;image transform="matrix(1,0,0,1,0,0)" preserveAspectRatio="none" x="0" y="0" width="108" height="48" xlink:href="images/alfen/alfenlogo.png"&gt;&lt;/image&gt; 并且已正确转换
  • 是的,而且那里不是url(开头的,可以理解为本地路径。但是为什么要争论呢?测试告诉你! :)
  • 你说得对,我应该简单地尝试一下。但是我已经检查过了,但仍然没有。在我的网页上一切正常。在我的 svg 上,我有完整的 url (http://....) 我不知道它是否重要,但在我的代码检查器上,这条路径我有 &lt;path style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); " fill="url(#1AA92631-6253-4B49-91D8-698D42237F32)" stroke="#000000" d="M259,175.65181518151815L948,175.65181518151815L948,195L259,195Z" stroke-width="0"&gt;&lt;/path&gt; 任何想法?
  • 您可以尝试使用本地文件路径,但如果这不起作用并且没有其他人回答:我现在走了,但是如果您将完整的 svg xml 粘贴到某个地方,我会看看我明天能不能试一试。

标签: php javascript svg raphael


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 2019-05-07
      • 2021-03-07
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 2016-07-03
      • 1970-01-01
      相关资源
      最近更新 更多