网页图片下载兼容性解决方案

通常我们需要下载某个图片,可以直接通过a标签的 sr c指向需要下载的图片地址,并为a标签添加  download 属性即可

<a :href=‘recodeurl‘ class=‘test‘ download="img">下载二维码</a>

但 download 的兼容性问题也是很明显的,由下图可知,ie浏览器完全不支持该属性

so  我们只能通过js来寻求解决办法,来达到对图片下载的完美支持

$(function () {    (function () {        var img_src = $(‘.qr_img‘)[0].src;        // 如果是ie浏览器        if (browserIsIe()) {            $(‘.down_qr‘).on(‘click‘, function () {                DownLoadReportIMG(img_src);            });        } else {            $(‘.down_qr‘).attr(‘download‘, img_src);            $(‘.down_qr‘).attr(‘href‘, img_src);

$(‘.sutmit_btn‘).on(‘click‘, function () {                $(‘.down_qr‘).attr(‘download‘, img_src);                $(‘.down_qr‘).attr(‘href‘, img_src);            });        }    })();});

function DownLoadReportIMG(imgPathURL) {    // 如果隐藏IFRAME不存在,则添加    if (!document.getElementById("IframeReportImg"))        $(‘<iframe style="display:none;" id="IframeReportImg" name="IframeReportImg" color: #f72671">DoSaveAsIMG();" width="0" height="0" src="about:blank"></iframe>‘).appendTo("body");    if (document.all.IframeReportImg.src != imgPathURL) {        // 加载图片        document.all.IframeReportImg.src = imgPathURL;    }    else {        DoSaveAsIMG();    }}

// 图片另存为function DoSaveAsIMG() {    if (document.all.IframeReportImg.src != "about:blank")        window.frames["IframeReportImg"].document.execCommand("SaveAs");}

// 判断是否为ie浏览器function browserIsIe() {    if (!!window.ActiveXObject || "ActiveXObject" in window) {        return true;    }    else {        return false;    }}

来看看效果:

当点击下载按钮的时候,就会弹出保存窗口了,似乎问题问题已经解决了,其实还差一步,现在我们为了减少图片请求,将图片格式进行base64编码来达到加载优化,但这时再进行下载的话,图片保存格式就出现问题了,似乎浏览器并不能直接保存为jpg/png等格式。

接下来我们需要对base64位格式的图片地址进行解码,可以直接调用window.atob()方法来处理(相关链接:https://developer.mozilla.org/zh-CN/docs/Web/API/WindowBase64/atob

具体方法:

/** * base64转Blob * @param code:需要解码的base图片地址 * @returns {*} */function base64Img2Blob(code) {    var parts = code.split(‘;base64,‘);    var contentType = parts[0].split(‘:‘)[1];    var raw = window.atob(parts[1]);    var rawLength = raw.length;    var uInt8Array = new Uint8Array(rawLength);

for (var i = 0; i < rawLength; ++i) {        uInt8Array[i] = raw.charCodeAt(i);    }    return new Blob([uInt8Array], {type: contentType});}

到这里,我们只要对图片地址是否进行过base64位编码进行分别处理就可以了,它们下载方法也各不相同:

if (img_src.indexOf(‘data:image‘) > -1) {    var blob = base64Img2Blob(img_src);    window.navigator.msSaveBlob(blob, "下载.png");} else {    DownLoadReportIMG(img_src);}

完整代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>图片下载</title>    <style>        img {            width: 50px;            height: 50px;        }    </style></head><body><a class="down_qr">Click Me!</a>

<!--<img class="qr_img" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAaRJREFUWIXtl78vQ1EUxz8VvxsvFgkRCwvrGwyMEv4HweiPMHQQiRj9BRaroSM7JiySlkEMJoMg0RC0hndf3d6e3ntbfUXyvsnJu/e88z39vnPad08hRQo7MqbjefN8AdgDJiy8MrADbABXwBMwC6wp/6iFWwK2gly47RJyB4zb9VcTZoGKluseGPHhBrkwqzu6haBYRJ1IDRVgUPDHIprmdlkIHcW/FjLQdhW0JqS37Sr4Q62RfjUSMsCwWgdJCJEqUlTXimZl4EHZrbp/7ck1DeDSR8iKlrARisCyWh8p8+UWgFXTKbXmDJhxJNOx9ANuFVJFDrGXth227yNkqJUnahJ155HUmrkOCKmDVJGQ6AtlK21BxUHUyrzGl/YXlvuAPAYUgGmPh7gBpqgdA/DdB7mw5rOl1sQiXEf5pIfYGCVXQFKv+Bdj/+4i+L7im8WHtj4BPn9LiI55n6BOnL6HwLErKKmKvGnrRaIp34qkKvJq7PtaEfKorq6jXBoDGqHfFSC1Zh3YBcYsvCLRkQ/fI0CMPLV/Fw6MXKdAj0tYihQmvgBpknqY5RjBdAAAAABJRU5ErkJggg==">--><img class="qr_img" src="下载.jpg" download=""/>

</body><script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script><script>    $(function () {        (function () {            var img_src = $(‘.qr_img‘)[0].src;            // 如果是ie浏览器            if (browserIsIe()) {                $(‘.down_qr‘).on(‘click‘, function () {                    if (img_src.indexOf(‘data:image‘) > -1) {                        var blob = base64Img2Blob(img_src);                        window.navigator.msSaveBlob(blob, "下载.png");                    } else {                        DownLoadReportIMG(img_src);                    }                });            } else {                $(‘.down_qr‘).attr(‘download‘, img_src);                $(‘.down_qr‘).attr(‘href‘, img_src);

$(‘.sutmit_btn‘).on(‘click‘, function () {                    $(‘.down_qr‘).attr(‘download‘, img_src);                    $(‘.down_qr‘).attr(‘href‘, img_src);                });            }        })();    });

/**     * base64转Blob     * @param code:需要解码的base图片地址     * @returns {*}     */    function base64Img2Blob(code) {        var parts = code.split(‘;base64,‘);        var contentType = parts[0].split(‘:‘)[1];        var raw = window.atob(parts[1]);        var rawLength = raw.length;        var uInt8Array = new Uint8Array(rawLength);

for (var i = 0; i < rawLength; ++i) {            uInt8Array[i] = raw.charCodeAt(i);        }        return new Blob([uInt8Array], {type: contentType});    }

function DownLoadReportIMG(imgPathURL) {        // 如果隐藏IFRAME不存在,则添加        if (!document.getElementById("IframeReportImg"))            $(‘<iframe style="display:none;" id="IframeReportImg" name="IframeReportImg" color: #f72671">DoSaveAsIMG();" width="0" height="0" src="about:blank"></iframe>‘).appendTo("body");        if (document.all.IframeReportImg.src != imgPathURL) {            // 加载图片            document.all.IframeReportImg.src = imgPathURL;        }        else {            DoSaveAsIMG();        }    }

// 图片另存为    function DoSaveAsIMG() {        if (document.all.IframeReportImg.src != "about:blank")            window.frames["IframeReportImg"].document.execCommand("SaveAs");    }

// 判断是否为ie浏览器    function browserIsIe() {        if (!!window.ActiveXObject || "ActiveXObject" in window) {            return true;        }        else {            return false;        }    }</script></html>

如果在测试中遇到问题,欢迎指出

时间: 2024-07-30 03:02:47

网页图片下载兼容性解决方案的相关文章

使用html2canvas js 截取网页图片下载

1.前台使用html2canvas js 截取Div元素转存为图片,下载.效果: 2.前台代码 <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    <title></title>    <meta charset="utf-8"

文件处理工具 gif合成工具 文件后缀批量添加工具 文件夹搜索工具 重复文件查找工具 网页图片解析下载工具等

以下都是一些简单的免费分享的工具,技术支持群:592132877,提供定制化服务开发. Gif动图合成工具 主要功能是扫描指定的文件夹里的所有zip文件,然后提取Zip文件中的图片,并合成一张gif图片,存储到新的路径下,支持设置gif的时间,演示效果如下: 下载地址:gif合成工具 文件批量移动工具 主要功能是将指定文件夹及子文件夹里所有文件,复制到新的文件夹下,可以指定是否删除源文件.以下动图演示效果. 下载地址:文件批量移动工具.exe 文件批量移动工具 主要功能是将指定目录下所有文件按照

Python实战:美女图片下载器,海量图片任你下载

Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习Python这门语言. 本文是在前一部分Python基础之上Python实战:Python爬虫学习教程,获取电影排行榜,再次升级的Python网页爬虫实战课程. 1.项目概述. 利用XPath和requests模块进行网页抓取与分析,达到网页图片下载的效果. 抓爬图片地址:http://www.2c

python3 网页爬虫图片下载无效链接处理 try except

代码比较粗糙,主要是备忘容易出错的地方.供自己以后查阅. #图片下载 import re import urllib.request    #python3中模块名和2.x(urllib)的不一样 site='https://world.taobao.com/item/530762904536.htm?spm=a21bp.7806943.topsale_XX.4.jcjxZC' page=urllib.request.urlopen(site) html=page.read() html=htm

将网页中的图片下载到本地的方法

/** * 传入要下载的图片的url列表,将url所对应的图片下载到本地 * @param urlList */ public static String downloadPicture(String urlString,String path) { URL url = null; String imgPath = null; try { url = new URL(path+urlString); // 打开URL连接 URLConnection con = url.openConnectio

shell脚本下载网页图片

和大家分享一个shell脚本写的图片抓取器.使用方法:img_downloader.sh.使用时在shell下输入:./img_downloader.sh www.baidu.com -d images该shell脚本就会把百度首页上的图片下载下来. 代码: #!/bin/bash if [ $# -ne 3 ]; then echo "Usage: $0 URL -d DIRECTORY" exit -1 fi for i in {1..4} do case $1 in -d) sh

CSS的兼容性解决方案

什么是兼容性? 同一个网页,在不同浏览器下(IE6.IE7.IE8)下的显示效果不一致,这就是说"CSS不兼容". IETESTer可以同时测试IE5.5.IE6.IE7.IE8这些版本的网页效果. 解决CSS兼容性的方法 CSS全局设置的重要性 常用的CSS兼容性的总结 CSS HACK(不推荐使用) CSS全局样式的设置 1.清除网页中所有标签的内填充和外边距 ????body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,form, input,

自己动手写美女图片下载器

前言:看到标题可能会有人觉得似曾相识,没错,这篇博文的来源正是根据杨中科老师的<百度美女图片下载器开发教程.Net版>.因为我也观看了该教程,觉得很好玩,于是乎想自己独立完成一次,作为对之前基础学习内容的回顾和运用.以博文的形式和大家分享整个开发过程主要是想借此机会来重新整理下思路.锻炼下自己的表达能力.您如果对下面要用到知识点很熟悉,可忽略此文. 一.主要技术 Winform常用控件的基本使用 HttpWebRequest请求其他网站内容 Newtonsoft.Json.dll组件解析JSO

【转】Retina 屏幕下,网页图片的显示兼容

感谢 Apple,带来了 Retina 屏幕的革命,让我们可以在电子显示屏上享受到印刷级的分辨率.由于分辨率的提升,网页中的文字.Flash 和 SVG 内容显示得比原来更加精细,但网页中的图片却变得异常模糊,存在非常严重的分辨率兼容问题.自从 2010年6月,iPhone4 的上市开始,网页图片的显示兼容问题就已出现,经过几年的发展,配备 Retina 屏幕的电子产品越来越多,如今 Apple 又将 Retina 技术应用到了 Macbook Pro 上,网页图片在 Retina 屏幕下的显示