我对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()
我能够毫无困难地转换该版本。