JavaScript将图片URL转换为Base64并下载的实现示例

作者:开源拾贝时间:2026-10-31 07:29:55浏览:510

本文介绍如何在JavaScript中将网络图片URL转换为Base64格式,并实现PNG格式的本地下载。核心方案利用Canvas绘制图片,通过设置crossOrigin解决跨域问题,最终生成Base64字符串。此外,还包含将Base64还原为URL及转换为File对象的补充方法,适用于前端图片处理场景。

前言

本文记录基于实际开发需求的解决方案。

当前需求是将获取到的图片转换为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内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章