javaScript解决手机浏览器下载为图片之后,图片漆黑无法保存的问题

pc端能正常下载图片并查看

手机移动端下载的图片全是黑色的并且无法保存,这个问题可能与移动浏览器的安全策略有关

解决办法:使用Blob对象和createObjectURL方法来创建一个临时URL,然后将其赋给链接的href属性下载:

javascript 复制代码
        // 转blob函数
        function dataURLtoBlob(dataURL) {
            var arr = dataURL.split(','), mime = arr[0].match(/:(.*?);/)[1],
                bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new Blob([u8arr], { type: mime });
        }           

         // 使用html2canvas将 HTML 元素转换为 Canvas
            html2canvas(document.getElementById("myElementId"), {
                useCORS: true
            }).then(canvas => {
                // 获取Canvas的图像数据
                const imgData = canvas.toDataURL('image/png');
                const blob = dataURLtoBlob(imgData);
                // 创建一个链接元素
                var a = document.createElement('a');
                // 将数据URL设置为链接的href属性
                a.href = window.URL.createObjectURL(blob);
                // 设置下载的文件名
                a.download = '参观留念.png';
                // 模拟点击这个链接,触发下载
                a.click();
                // 释放Blob URL
                window.URL.revokeObjectURL(a.href);
            });
相关推荐
倔强的石头10610 分钟前
应用账号最小权限实践:读写账号、报表账号、运维账号分层
java·运维·开发语言
传人once12 分钟前
页面中心圆圈放大效果如何写
开发语言·javascript·ecmascript
NeilYuen15 分钟前
【C++】STL源码仿写(二):vector
开发语言·c++
蜗牛互联网1 小时前
Python消费Responses SSE事件:增量文本、超时与取消
java·开发语言·人工智能·后端·python
weixin_307779131 小时前
C++代码实现MATLAB中的crossval函数功能
开发语言·c++·算法·matlab
ttwuai2 小时前
Go后台管理系统开源项目:4个官方仓库怎么追溯和核验
开发语言·golang·开源
谢亮_vipxieliang2 小时前
Go Worker Pool 设计——从原理到生产级实现
开发语言·后端·golang
光影少年2 小时前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
Escalating_xu2 小时前
【C 语言】深入理解指针(5):sizeof、strlen、数组名语义与指针笔试题全解析
java·c语言·开发语言
Nebula_g3 小时前
JavaSE加强:Stream流
java·开发语言·windows·stream·javase·流