帝王谷资源网 Design By www.wdxyy.com
前言:项目中需要实现图片下载功能,第一个想到的是使用a标签的download属性来实现,但是在不同浏览器下测试会发现,有的浏览器无效,点击后直接预览图片,所以,上网找到了另外一种兼容不同浏览器的图片下载的方法,那就是利用canvas来处理图片,实现下载;
1.项目中点击事件绑定:
<a href="#" @click.prevent="downloadIamge(imgsrc, name)"><span>{{name}}</span></a>
2.点击事件中操作:
downloadIamge (imgsrc, name) { const url = imgsrc this.convertUrlToBase64(url).then((base64) => { const blob = this.convertBase64UrlToBlob(base64) if (getBrowser() === 'IE' || getBrowser() === 'Edge') { window.navigator.msSaveBlob(blob, name) } else { const a = document.createElement('a') const body = document.querySelector('body') a.download = name || 'image' a.href = URL.createObjectURL(blob) a.style.display = 'none' body.appendChild(a) a.click() body.removeChild(a) window.URL.revokeObjectURL(a.href) } }) },
3.this.convertUrlToBase64(url)就是利用canvas和toDataURL把图片转成base64格式并返回
convertUrlToBase64 (url) { return new Promise((resolve, reject) => { const img = new Image() img.crossOrigin = 'Anonymous' img.src = url img.onload = function () { const canvas = document.createElement('canvas') canvas.width = img.width canvas.height = img.height const ctx = canvas.getContext('2d') ctx.drawImage(img, 0, 0, img.width, img.height) const ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase() const dataURL = canvas.toDataURL('image/' + ext) const base64 = { dataURL: dataURL, type: 'image/' + ext, ext: ext } resolve(base64) } }) },
其中:img.crossOrigin = 'Anonymous'是前端对图片的跨域处理;
4.this.convertBase64UrlToBlob(base64)是将图片base64流文件转成blob文件
convertBase64UrlToBlob (base64) { const parts = base64.dataURL.split('base64,') const contentType = parts[0].split(':')[1] const raw = window.atob(parts[1]) const rawLength = raw.length const uInt8Array = new Uint8Array(rawLength) for (let i = 0; i < rawLength; i++) { uInt8Array[i] = raw.charCodeAt(i) } return new Blob([uInt8Array], { type: contentType }) },
5.getBrowser()用来判断浏览器,解决浏览器兼容性问题:
import { getBrowser } from '@/utils/utils' export function getBrowser () { const userAgent = navigator.userAgent if (userAgent.indexOf('OPR') > -1) { return 'Opera' } if (userAgent.indexOf('Firefox') > -1) { return 'FF' } if (userAgent.indexOf('Trident') > -1) { return 'IE' } if (userAgent.indexOf('Edge') > -1) { return 'Edge' } if (userAgent.indexOf('Chrome') > -1) { return 'Chrome' } if (userAgent.indexOf('Safari') > -1) { return 'Safari' } }
6.如果是IE或者Edge浏览器,可以直接使用window.navigator.msSaveBlob(blob, name)完成下载;
声明:由于ios系统有安全性限制,以上方法在ios上无效;
以上就是记录项目中用到的图片下载,浏览器兼容的问题,涉及到的base64和blob的知识点和原理还不是很清晰,有时间一定要研究一下,整个方法,亲测有效;欢迎测用,与意见反馈。也希望大家多多支持。
帝王谷资源网 Design By www.wdxyy.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
帝王谷资源网 Design By www.wdxyy.com
暂无评论...
更新日志
2024年07月03日
2024年07月03日
- 原画壁纸及美图第261期,无水印可自取
- 绝区零能量鸣徽有哪些 绝区零能量鸣徽效果介绍
- 绝区零引燃鸣徽有哪些 绝区零引燃鸣徽效果介绍
- 绝区零丽娜技能强度怎么样 丽娜技能加点推荐
- 《七龙珠电光炸裂ZERO》新增角色一览
- 《修仙神诀》游戏下载方法
- 《幻兽帕鲁》恐炬灵种族值介绍
- 胡又天《她说HQ》头版限量[低速原抓WAV+CUE]
- 韵味悠扬如诗如画《草原的骄傲3CD》DTS[WAV]
- 雨果唱片《秦王点兵LP1630》WAV+CUE
- 《战意》官宣上架WeGame平台 国内首个腾讯网易双服共营游戏
- 卡普空收购中国台湾CG工作室 曾参与《龙之信条2》《生化危机8:村庄》开发
- 韩妹《妮姬:胜利女神》COS图赏:身材优势尽显
- 《张韶涵 华语流行 17CD 全球最全最佳版》[WAV+CUE][5.6GB]
- 任素汐《无损音乐合集》2016-2024[FLAC/分轨][420MB]