svg
div转svg svg转canvas svg/canvas生成图片及图片下载
HTML
<div id="div">
<p>Just have a <span style='color:white; text-shadow:0 0 2px blue;'>TRY</span></p><p><b>By Dion</b></p>
</div>
div转成svg
function div2svg() {
var divContent = document.getElementById("div").innerHTML;
var svg = "<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'>" +
"<foreignObject width='100%' height='100%'>" +
"<div xmlns='http://www.w3.org/1999/xhtml' style='font-size:16px;font-family:Helvetica'>" +
divContent +
"</div>" +
"</foreignObject>" +
"</svg>";
document.body.innerHTML = svg;
}
div2svg();
svg生成图片
function svg2img() {
var divContent = document.getElementById("div").innerHTML;
var data = "data:image/svg+xml," +
"<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'>" +
"<foreignObject width='100%' height='100%'>" +
"<div xmlns='http://www.w3.org/1999/xhtml' style='font-size:16px;font-family:Helvetica'>" +
divContent +
"</div>" +
"</foreignObject>" +
"</svg>";
var img = new Image();
img.src = data;
document.body.appendChild(img);
}
svg2img();
svg转成canvas
function svg2canvas() {
var divContent = document.getElementById("div").innerHTML;
var data = "data:image/svg+xml," +
"<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'>" +
"<foreignObject width='100%' height='100%'>" +
"<div xmlns='http://www.w3.org/1999/xhtml' style='font-size:16px;font-family:Helvetica'>" +
divContent +
"</div>" +
"</foreignObject>" +
"</svg>";
var img = new Image();
img.src = data;
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
document.body.appendChild(canvas);
}
svg2canvas();
图片下载
var a = document.createElement('a');
a.href = canvas.toDataURL('image/png');
a.download = "img-demo";
a.click();
svg.js
avg.js文档
方法,属性
rect.attr({fill: red})
rect.fill(red)
rect.stroke({width: 1})
svg.js api
<div id="drawing"></div>
var draw = SVG('drawing').size(300, 300)
矩形 SVG.Rect
var rect = draw.rect(100, 100)
rect.radius(10)
rect.radius(10, 20)
draw.rect(100,100).animate().fill('#f03').move(100,100)
圆 SVG.Circle
var circle = draw.circle(100)
circle.radius(75)
椭圆 SVG.Ellipse
var ellipse = draw.ellipse(200, 100)
ellipse.radius(75, 50)
直线 SVG.Line
var line = draw.line(0, 0, 100, 150).stroke({ width: 1 })
折线 SVG.Polyline
var polyline = draw.polyline('0,0 100,50 50,100').fill('none').stroke({ width: 1 })
文字 SVG.Text
var text = draw.text("Lorem ipsum dolor sit amet consectetur.\nCras sodales imperdiet auctor.")
var text = draw.text(function(add) {
add.tspan('Lorem ipsum dolor sit amet ').newLine()
add.tspan('consectetur').fill('#f06')
add.tspan('.')
add.tspan('Cras sodales imperdiet auctor.').newLine().dx(20)
add.tspan('Nunc ultrices lectus at erat').newLine()
add.tspan('dictum pharetra elementum ante').newLine()
})
图片 SVG.Image
var image = draw.image('/path/to/image.jpg', 200, 300)
var image = draw.image('/path/to/image.jpg').loaded(function(loader) {
this.size(loader.width, loader.height)
})
SVG.get() 根据id获取元素
var draw = SVG('svg1').size(300, 300);
var circle = draw.circle(50);
circle.fill('red').move(10, 10);
circle.addClass('circle');
circle.id('circle');
var circle2 = SVG.get('circle');
console.info(circle2);
circle2.stroke({
color: 'blue',
width: 2
});
SVG.select()/element.select() 根据CSS选择器获取
var draw = SVG('svg1').size(300, 300);
var ellipse = draw.ellipse(100, 50);
ellipse.fill('blue');
ellipse.addClass('my-class');
var rect = draw.rect(100, 100);
rect.move(100, 100);
rect.addClass('my-class');
var elements = SVG.select('rect.my-class');
elements.fill('#f06');
var group1 = draw.group();
var txt1 = draw.text(function (add) {
add.tspan('第一行').addClass('words').newLine();
add.tspan('第二行').addClass('words').newLine();
});
txt1.move(50, 50);
group1.add(txt1);
group1.select('.words').fill('green');
SVG 节点对象获取
var draw = SVG('svg1').size(300, 300);
var ellipse = draw.ellipse(100, 80);
ellipse.fill('#06f');
console.info(ellipse.node);
var node = ellipse.native();
console.info(node);
var elli2 = node.instance;
elli2.size(80, 100).move(50, 50);
console.log(ellipse.node.nodeName)
SVG 根节点下的子节点获取
var draw = SVG('svg1').size(300, 300);
var ellipse = draw.ellipse(200, 150).move(50, 50).fill('#f06');
var rect = draw.rect(50, 50);
var children = draw.children();
draw.clear();
draw.each(function (i, children) {
console.info(i);
console.info(children)
this.fill('green');
});
draw.first().stroke({ width: 2 });
draw.last().fill('green');
var second = draw.get(1).stroke({ width: 2, color: 'yellow' })
var index = draw.index(second);
console.info(index);
console.info(draw.has(second));
SVG 子节点获取根节点
var draw = SVG('svg1').size(300, 300);
var nested = draw.nested().addClass('test');
var group = nested.group();
var rect = draw.rect(100, 100).fill('#f09');
group.add(rect);
var doc = rect.doc().ellipse(50, 100).move(50, 50);
rect.parent()
rect.parent(SVG.Doc)
rect.parent(SVG.Nested)
rect.parent(SVG.G)
rect.parent('.test')
var group1 = draw.group().addClass('test')
, group2 = group1.group()
, rect = group2.rect(100, 100)
rect.parents()
rect.parents('.test')
rect.parents(SVG.G)
SVG 属性引用获取
use.reference('href')
rect.reference('fill')
circle.reference('clip-path')