JavaScript点击按钮下载图片,涉及同源下载和跨域下载

本文介绍了一种在网页中实现跨域图片下载的方法,通过创建canvas元素和利用toBlob方法,将图片转换为Blob对象进行下载,解决了跨域限制导致的直接下载失败问题。

以下内容适用于同源下载图片:

参考:https://blog.youkuaiyun.com/Thea12138/article/details/82801375

<button class="download" onclick=" download('url')">
              <i class="layui-icon layui-icon-download-circle"></i>
 </button>
function download(src) {
    var $a = document.createElement('a');
    $a.setAttribute("href", src);
    $a.setAttribute("download", "");
    var evObj = document.createEvent('MouseEvents');
    evObj.initMouseEvent( 'click', true, true, window, 0, 0, 0, 0, 0, false, false, true, false, 0, null);
    $a.dispatchEvent(evObj);
}

对于跨域的图片,使用上述方法只会打开一个新窗口显示要下载的图片,不会打开下载窗口,下载方法如下:

参考:https://segmentfault.com/q/1010000017159631

https://blog.youkuaiyun.com/visionke/article/details/84583105

    function ddd(){        
        var src = 'http://pic.c-ctrip.com/VacationH5Pic/mice/wechat/ewm01.png';
        var canvas = document.createElement('canvas');
        var img = document.createElement('img');
        img.onload = function(e) {
            canvas.width = img.width;
            canvas.height = img.height;
            var context = canvas.getContext('2d');
            context.drawImage(img, 0, 0, img.width, img.height);         
            canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);
            canvas.toBlob((blob)=>{
                let link = document.createElement('a');
                link.href = window.URL.createObjectURL(blob);
                link.download = 'aaa'; 
                link.click();  
            }, "image/jpeg");           
        }
        img.setAttribute("crossOrigin",'Anonymous');
        img.src = src;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值