【发布时间】:2019-01-20 10:50:35
【问题描述】:
我正在尝试获取 SVG 并将其转换为 image/png 数据 URL。
在 Chrome 68 中它可以完美运行,但在 Firefox 61 中它会呈现一个空图像,其 URL 为:
数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAABpElEQVR4nO3BAQ0AAADCoPdPbQ8HFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCnAUGaAAH3lkeeAAAAAElFTkSuQmCC P>
我的转换代码和 SVG 在下面找到。您可能会认识到,这几乎只是从其他人试图完成此任务的不同站点/问题中复制/粘贴。
function importSVG(sourceSVG, height = null, width = null) {
return new Promise(function (resolve, reject) {
try {
// https://developer.mozilla.org/en/XMLSerializer
const svgString = (new XMLSerializer()).serializeToString(sourceSVG);
let svgSize = sourceSVG.getBoundingClientRect();
let canvas = document.getElementById('compass-canvas');
canvas.width = width ? width : svgSize.width;
canvas.height = height ? height : svgSize.height;
let ctx = canvas.getContext('2d');
let img = document.createElement('img');
let svg = new Blob([svgString], {type: 'image/svg+xml;charset=utf-8'});
let DOMURL = self.URL || self.webkitURL || self;
let url = DOMURL.createObjectURL(svg);
img.onload = (function () {
ctx.drawImage(img, 0, 0);
let png = canvas.toDataURL();
DOMURL.revokeObjectURL(png);
resolve({image: png});
});
img.onerror =
img.onabort = function (e) {
console.error('generateIcon : error on image', e);
};
img.src = url;
}
catch (e) {
console.log('reject', e);
reject(e);
}
});
}
这是其他人在较新的 Firefox 中遇到的问题,还是我遗漏了一些应该很明显的问题?
【问题讨论】:
标签: javascript svg canvas png image-conversion