pc、移动端、微信端 下载图片踩坑

1:需求

点击按钮保存线上图片到本地

2:解决思路

2.1 图片服务器配置Access-Control-Allow-Origin(跨域)

2.2 创建 Image 对象,通过a标签的download属性实现下载(因为图片不是本地图片,所以需要转换base64)

                       let file_url  = "https://xxx";
                       let image = new Image();
                       image.setAttribute("crossOrigin", "anonymous");
                       image.onload = function() {
                       let canvas = document.createElement("canvas");
                       canvas.width = image.width;
                       canvas.height = image.height;
                       let context = canvas.getContext("2d");
                       context.drawImage(image, 0, 0, image.width, image.height);
                       let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
                       let a = document.createElement("a"); // 生成一个a元素
                       let event = new MouseEvent("click"); // 创建一个单击事件
                       a.download = "海报"; // 设置图片名称没有设置则为默认
                       a.href = url; // 将生成的URL设置为a.href属性
                       a.dispatchEvent(event); // 触发a的单击事件
                   };
                   image.src = file_url + '?random='+Math.random();   // 加个随机数清空缓存
                   image.onerror =  (error) => {
                       // alert(JSON.stringify(error))
                      alert('图片保存失败')
                   }

3:踩坑

微信端,移动端不支持a标签下载图片!

4:解决思路

浏览器和微信保存图片还是需要用户长按保存,调起内置菜单来完成(暂无更好的方法)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容