前言
记录来自于每一次的实际需求;
此次需要做的是将拿到的图片,转png格式下载,看了下数据库返回的地址,有png、svg、jpg格式,我的想法是先通通转base64,再处理成png下载。
一、图片地址转base64
1、先定义一个方法
/** * 根据图片的url转换对应的base64值 * @param { String } imageUrl 如:http://xxxx/xxx.png * @returns base64取值 */ async urlToBase64(imageUrl) { return new Promise((resolve, reject) => { let canvas = document.createElement('canvas') const ctx = canvas.getContext('2d') let img = new Image() img.crossOrigin = 'Anonymous' // 解决Canvas.toDataURL 图片跨域问题 img.src = imageUrl img.onload = function() { canvas.height = img.height canvas.width = img.width ctx.fillStyle = '#fff' // canvas背景填充颜色默认为黑色 ctx.fillRect(0,0,img.width,img.height) ctx.drawImage(img, 0, 0) // 参数可自定义 const dataURL = canvas.toDataURL('image/jpeg', 1) // 获取Base64编码 resolve(dataURL) canvas = null // 清除canvas元素 img = null // 清除img元素 } img.onerror = function() { reject(new Error('Could not load image at ' + imageUrl)) } }) }
2、存储返回的base64,并转为png格式下载
/** * 下载图片的方法 * @param { String } imageUrl 如:http://xxxx/xxx.png * @returns base64取值 */ async upload(item) { // 此处的src 是图片地址,如: http://xxxx/xxx.png let { src, name } = item // 存储base64的值 let base64 = await this.urlToBase64(src) let link = document.createElement('a') link.href = base64 link.download = `${name}.png` link.click() }
补充知识:
1)将base64图片格式转为可读的url格式
将图片文件转为二进制,然后通过URL的createObjectURL函数,将二进制转为url格式
function getBase64URL(pic) { const blob = base64ImgtoFile(pic) const blobUrl = window.URL.createObjectURL(blob); return blobUrl }
2)将图片转为文件
function base64ImgtoFile (dataurl, filename = 'file') { //将base64格式分割:['data:image/png;base64','XXXX'] const arr = dataurl.split(',') // .*? 表示匹配任意字符到下一个符合条件的字符 刚好匹配到: // image/png const mime = arr[0].match(/:(.*?);/)[1] //image/png //[image,png] 获取图片类型后缀 const suffix = mime.split('/')[1] //png const bstr = atob(arr[1]) //atob() 方法用于解码使用 base-64 编码的字符串 let n = bstr.length const u8arr = new Uint8Array(n) while (n--) { u8arr[n] = bstr.charCodeAt(n) } return new File([u8arr], `${filename}.${suffix}`, { type: mime }) }
总结
到此这篇关于JavaScript图片url地址转base64的文章就介绍到这了,更多相关JS图片url地址转base64内容请搜索站长工具网以前的文章或继续浏览下面的相关文章希望大家以后多多支持站长工具网!
本文来源于#vanora1111,由@战地网 整理发布。如若内容造成侵权/违法违规/事实不符,请联系本站客服处理!
该文章观点仅代表作者本人,不代表本站立场。本站不承担相关法律责任。
如若转载,请注明出处:https://www.zhanid.com/biancheng/1006.html
THE END