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);
            });
相关推荐
奋斗的小方1 分钟前
Java基础篇09(2):项目实战之基于swing的石头迷阵
java·开发语言
Evand J19 分钟前
【代码介绍】自适应R的AEKF(自适应扩展卡尔曼滤波)和经典EKF比较,MATLAB例程|三维非线性系统
开发语言·matlab·ekf·自适应·自适应滤波
雪的季节26 分钟前
1 个网络线程 + 3 个数据处理线程(完全隔离)
开发语言
风筝在晴天搁浅28 分钟前
快手 CodeTop LeetCode 227.基本计算器Ⅱ
java·开发语言
怕浪猫30 分钟前
Electron 开发实战(八):多媒体处理全解|音视频播放、录屏、FFmpeg 实战
前端·javascript·electron
0xDevNull33 分钟前
Java实战面试题(一)
java·开发语言
kyriewen1136 分钟前
开源|Image Harvest v1.0.5:AI 智能标签 + Eagle 导出,设计师和开发者的图片工作流神器
前端·javascript·人工智能
步十人39 分钟前
【Vue】认识单文件组件与模板语法
前端·javascript·vue.js
雪的季节41 分钟前
C++ 运行时多态 vs 编译时多态
开发语言
chushiyunen43 分钟前
php笔记、下载安装等
开发语言·笔记·php