我不经常需要问问题,但谷歌这次让我失望了
所以我有一个使用 Javascript 编辑外部 SVG 文件的网站,如下所示:
<embed id="svgFile" src="svgFile.svg" type="image/svg+xml" />
我有一个带有输入的表单,可以使用Javascript和Jquery即时编辑SVG,如下所示:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="JavascriptFile.js"></script>
....HTML....
<input id="txt1" name="text_one" maxlength="16" type="text" class="text" placeholder="Line one" onkeyup="update(1)" />
JavaScript是这样的:
function update(n) {var txtID = n;
var txt = document.getElementById("txt" + txtID).value;
var svgTXT = document.getElementById("svgFile").getSVGDocument().getElementById("txt" + txtID);
svgTXT.textContent = txt;
}
现在这一切都工作正常,页面上的"图像"/SVG 更新,但现在我需要保存这个更新的图像。
新 我不知道我们需要什么文件格式,但将信息保存到 php/MySQL DB 和 PDF 是最低要求的。 PDF供用户保存和打印...无论他们想做什么,数据库都是为了在线保存。
我也有链接到该网站的 JQuery,但我发现 Javascript 编码更自然,我需要某种解决方案/示例/插件。 谁能帮忙!?
我通过在php和mySQL数据库中使用以下代码段来实现这一点:首先,请记住,svg基本上存储在文本中,就像HTML一样。 svg 标签,无论是不同的标签,其布局都与 HTML 标签非常相似。
存储到数据库中。 您必须在实际的 mySQL 插入调用中使用以下代码段。 我发现如果您先对变量执行此操作,然后将变量放入插入调用中,它将不起作用。 该函数必须位于 mySQL 语句中。
mysql_real_escape_string($myValue)
中的文本框。假设您的值已经从数据库中检索到,现在位于一个名为 theValues 的数组中。 基本上我正在删除任何反斜杠,但在此之前,我确保可以使用 htmlentity 正确显示它。由于您不是 svg 中的反斜杠,我知道它可以修复服务器用 \" 替换引号的地方。 如果你确实在 svg 中遇到一些反斜杠,你只需要在替换函数中更聪明一点。
$myValue= str_replace("\", "", htmlentities($theValues->myValue));
echo $myValue;
回显到页面上的原因与上述相同,但 htmlentities 函数使其仅显示 svg 的文本,而不是处理 svg 并显示您的图片。 这仅在文本已存储在数据库中后显示 SVG 时才需要,但它不会损害您的显示如果不是第一个数据,只是一个不必要的函数调用。
str_replace("\", "",$myValue)
另存为 SVG
使用 XMLSerializer
获取 SVG 的源 XML 表示形式,并将其发布回服务器(如果您愿意,可以使用 AJAX)。
另存为 PNG
使用 XMLSerializer
为 SVG 创建数据 URI,并将其用作 <img>
元素的源。将此图像绘制到 HTML5 画布上,然后使用 toDataURL()
将内容转换为 base64 编码的 PNG 数据 URI,然后可以将其发布到服务器并另存为文件。
警告:当前版本的Chrome和半最新版本的Firefox(但不是最新版本)目前在安全性上"下注",并在绘制任何SVG时污染画布,从而阻止您获取数据URI。
注意:上面的两个答案都需要IE9+;但是,对于SVG也是如此。