如何在Edge中下载图像/png数据URI
How do you download a image/png data URI in Edge?
我正在尝试使用基于https://github.com/exupero/saveSvgAsPng和http://techslides.com/save-svg-as-an-image.SVG被转换为数据URI,并在画布中呈现为图像,画布被转换为PNG数据URI。此URI是使用锚标记作为文件下载的。我已经能够确认这在当前版本的FF、Chrome和Safari中工作;然而,在锚标记上触发下载会导致Edge挂起(控制台中只有doctype警告)或完全崩溃。有没有办法在Edge中实现这一点,或者还不完全支持数据URI的锚下载?
从以上来源创建的代码:
//this gets the svg and inlines all styles. It has a property "source" as well as width and height of the SVG.
var svgDownload = getElementChildrenAndStyles(svgID);
var image = new Image();
image.onload = function () {
var canvas = document.createElement('canvas');
canvas.width = svgDownload.width;
canvas.height = svgDownload.height;
var ctx = canvas.getContext('2d');
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(image, 0, 0);
var a = document.createElement("a");
a.download = "chart.png";
try {
console.log("converting canvas");
a.href = canvas.toDataURL("image/png");
console.log("canvas converted. triggering download");
document.body.appendChild(a);
a.addEventListener("click", function(e) {
a.parentNode.removeChild(a);
});
a.click();
}
catch (e){
//error handling
}
};
try {
console.log("making image source url");
//both methods of creating the image source here work in most browsers except Edge
//image.src = "data:image/svg+xml;base64," + btoa( svgDownload.source.join() );
image.src = window.URL.createObjectURL(new Blob(svgDownload.source, {"type": 'image/svg+xml;base64'}));
console.log("image source set");
}
catch (e){
//error handling
}
意识到这是一个老问题,但对于其他人来说:Edge和IE不支持dataURL作为锚标记的href。不过它会接受它作为img标记的来源。我能想出的最好的解决方案是使用download.js下载文件。然而,您将遇到的下一个问题是,当您将图像标记的src设置为SVG以渲染PNG时,该image对象的"load"事件不会在Edge中触发。目前还没有办法解决这个问题。
相关文章:
- 如何在Edge中下载图像/png数据URI
- 将普通的 PNG 图像转换为 JSON 数据,然后存储到对象
- 如何使用javascript将数据:image/png:base64.解码为真实图像
- 在将图像作为原始图像二进制数据(png或jpeg)上传到服务器之前,裁剪或调整图像大小
- 如何从 base64 数据 URI 在服务器端保存 PNG 图像
- SVG文件 :如何使用Inkscape将PNG文件转换为SVG文件后获取路径标记数据
- 如何组合两个单独的Uint8Array的颜色数据(JPEG)和透明度数据(PNG)
- 如何获取使用XMLHttpRequest(XHR2)下载的PNG的像素数据
- 可以在链接重定向后加载图像/png数据
- 为什么Chrome将图像数据转换为“;image/png”;粘贴图像时使用mime类型
- 如何在服务器端保存PNG图像,使用base64数据字符串javascript
- 转换数据:image/png;base64转换为数据库中的图像类型
- 试图用HTML5文件系统将画布PNG数据url保存到磁盘,但当我作为url检索时,它's无效
- 将base64 png数据转换为javascript文件对象
- 将base64图像数据转换为png
- 我如何将webp数据URI转换为png
- 是数据:image/png;base64是img标记的唯一base64编码
- 从未压缩的原始PNG数据创建PNG
- 在node.js中将SVG代码转换为PNG数据URI
- 我如何使用$.Ajax设置图像SRC为动态图像/png数据