【发布时间】:2015-12-16 13:12:27
【问题描述】:
我正在使用以下函数将 SVG 转换为 PNG 并提供下载:
<svg id="chart">
...some contenthere
</svg>
function() {
var svg = $("#chart")[0],
bBox = $('#chart')[0].getBBox();
var width = bBox.width*2,
height = bBox.height*2;
var canvas = $("canvas")[0],
serializer = new XMLSerializer(),
svgString = serializer.serializeToString(svg);
canvas.width = width;
canvas.height = height;
canvg(canvas, svgString);
var dataURL = canvas.toDataURL('image/png'),
data = atob(dataURL.substring('data:image/png;base64,'.length));
asArray = new Uint8Array(data.length);
for (var i = 0; i < data.length; ++i) {
asArray[i] = data.charCodeAt(i);
}
var blob = new Blob([asArray.buffer], {type: 'image/png'});
saveAs(blob, 'climatechart.png');
}
它实际上工作正常,尽管输出图像与浏览器中的 SVG 大小相同。如何为图像设置新尺寸?我也尝试直接从 svg 而不是 BBox 获取大小,但它是一样的。
【问题讨论】:
-
只需创建第二个具有所需大小的画布并使用
secondContext.drawImage(firstCanvas, 0, 0, outputWidth, outputHeight),这会将您的图像缩小到该画布的大小。然后做你已经在做的事情。
标签: javascript jquery svg canvg