【问题标题】:Use javascript to overlap two svgs, and save file使用javascript重叠两个svg,并保存文件
【发布时间】:2015-12-03 19:36:53
【问题描述】:

是否可以使用 JavaScript 加载两个 SVG?例如,然后将第一个 SVG 用作基础,将第二个 SVG 用作角落的徽章,然后将组合缩放为一个并保存为单个 SVG?

【问题讨论】:

  • 听起来你可以用一些 CSS 做到这一点
  • 谢谢@Starscream1984 能否请您演示一下我习惯在 Illustrator 中做的事情,并且我可以用我最喜欢的编程语言来做这件事,真是令人兴奋。我没有意识到。
  • “保存”是什么意思?你想从另外两个创建第三个 SVG 吗?
  • 谢谢@SPRBRN 是的,我想取底座,将其缩放为 128x128,然后取徽章并将其缩放到 1/3 并将其放在角落中,然后将其另存为单个 SVG 到文件。

标签: javascript html svg


【解决方案1】:

逐步:

0:加载您的资源: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/use

1:根据需要使用变换来缩放、平移: https://developer.mozilla.org/en/docs/Web/SVG/Attribute/transform

2:要将最终的复合 SVG 元素转换为文件,请使用/修改 https://github.com/NYTimes/svg-crowbar,这是我从 Convert JavaScript-generated SVG to a file 中找到的 或更好的讨论: Generating, viewing, and saving SVG client-side in browser

免责声明:我没有测试过这种方法,所以不能保证,但在过去的几个月里,我以编程方式使用 SVG 做了很多工作,我认为它会奏效。

我的工作:(需要重构但链接以防它有助于理解 HTML SVG API): https://github.com/Terebinth/Vickers/blob/master/lib/minesweeper/minesweeper_001_.coffee

【讨论】:

  • 感谢 Wylie 提供的撬棍,真的很酷! :) 我想知道你是否知道它的 Firefox 版本?
  • 在这种情况下不需要 Blob,一个简单的 var url ='data:image/svg+xml; charset=utf8, '+(new XMLSerializer()).serializeToString(svgDoc) 应该可以很好地解决问题。
【解决方案2】:

是的,您可以将 <svg> 元素附加到 svgDocument 中:

var svgDocs = document.querySelectorAll('svg');
svgDocs[0].appendChild(svgDocs[1]);
svgDocs[1].width.baseVal.value/=3;
svgDocs[1].height.baseVal.value/=3;
svg{ border:1px solid}
<svg version ="1.1" id="first" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 250 250" height="250" width="250">
  <circle cx="60" cy="60" r="50" fill="pink"/>
</svg>

<svg version ="1.1" id="second" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 250 250" height="250" width="250">
  <rect x="10" y="10" width="100" height="100" fill="green"/>
</svg>

【讨论】:

  • 非常感谢@kaiido,你能演示一下使用外部 svg 文件吗,比如一个在路径“blah.svg”,另一个在“badge.svg”。可以在这里做一些FileReader 的东西吗?或者创建一个URL.createObjectURL 出来?比如这个jsfiddle:jsfiddle.net/8H24D
  • 当然,你也可以使用 FileReader,但如果你有 url,那么 xhr 会是更好的选择......但无论如何,最简单的方法是使用 &lt;object&gt; 或 @987654332 @:plnkr.co/edit/RW6feFndSG5Ud9OD77HG?p=preview
  • @Noitidart 我想我并没有完全得到保存为新的 svg 的要求,但是现在,看着你的小提琴,我想知道:你知道 svg 文件的内容实际上是 几乎 与 svgElement.outerHTML 相同?所以(new XMLSerializer()).serializeToString(svgDoc),将返回一个序列化版本,您可以将其保存为 svg 文件,但如果您需要创建一个完全有效的 SVG 文件(包含 doctype 和所有内容),您可能需要进一步操作,您可以找到它@987654323 @ 在 PPS 中。
  • 所以这里有一个新版本的 plunker 下载链接:plnkr.co/edit/5tdYVrjUk3Ti4gSUVAqF?p=preview
  • 哇,非常感谢你,我现在要去研究一下我正在处理其他一些代码,但会访问,非常感谢你!
猜你喜欢
  • 2018-10-13
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多