javascript - msSaveBlob 不返回完整图像
问题描述
我正在尝试为 Internet Explorer 用户实现一个下载按钮,让他们下载页面上显示的 png 文件。
图像作为数据 URL 提供并正常显示在页面上。
但是,当使用以下代码在 Internet Explorer 上下载图像时,只会下载图像的上半部分。
我知道问题不是来自于dataURLtoBlob()
将 blob 作为 Data Url 读取会返回完全相同的原始数据。
谁能帮我理解这里发生了什么?非常感谢您的帮助。
downloadButton.onclick = function () {
if (window.navigator.msSaveOrOpenBlob) {
var filename = "image.png";
var data = $('#qrCode').attr("href");
var blob = dataURLtoBlob(data);
console.log(data);
let reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = function() {
console.log(reader.result);
};
window.navigator.msSaveBlob(blob, filename);
}
}
function dataURLtoBlob(dataUrl) {
var arr = dataUrl.split(',');
var mime = arr[0].match(/:(.*?);/)[1];
var byteString = atob(arr[1]);
var arrayBuffer = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(arrayBuffer);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], { type: mime });
}
解决方案
我设法通过使用中间画布找到了解决此问题的方法。
var ieCanvas = document.getElementById("ieCanvas");
var ctx = ieCanvas.getContext("2d");
var img = document.getElementById("qrCodeImg");
ctx.drawImage(img, 0, 0);
var filename = "download.png";
window.navigator.msSaveBlob(ieCanvas.msToBlob(), filename);
总结一下:
- 二维码 PNG -> Blob -> msSaveBlob =图像的一半
- 二维码 PNG -> 画布 -> Blob -> msSaveBlob =完整图像
推荐阅读
- domain-driven-design - DDD 建模设置为值对象
- sql - 如何递归计算SQL中的年度翻转?
- go - 如何使用 Go 为聚合物单页应用程序提供服务?
- postman - Gotowebinar webhook 创建 400 错误请求 Invalid callbackUrl
- svg - SVG 动画
- php - 如何将结果值映射到laravel中的键值?
- sql-server - 在变量中累积(连接)值不起作用
- python - 带有逻辑运算符的乌龟 ORM 过滤器
- git - 从 Git 历史记录中删除包含一些敏感数据的文件
- java - 第 1 页上方的 PageRequest 返回相同的结果