JS将图片转Base64的2种方法代码

这篇文章主要给大家介绍了关于JS将图片转Base64的2种方法,base64 其实是一种编码转换方式,将ASCII字符转换成普通文本,是网络上最常见的用于传输8Bit字节代码的编码方式之一,需要的朋友可以参考下

JS将图片转Base64的2种方法代码

第一种:Blob和FileReader 对象

实现原理:

使用xhr请求图片,并设置返回的文件类型为Blob对象[xhr.responseType = “blob”]

使用FileReader 对象接收blob

return new Promise(resolve => {
    let xhr = new XMLHttpRequest()
    xhr.open('get', src, true)
    xhr.responseType = 'blob'
    xhr.onload = function () {
        if (this.status == 200) {
            let blob = this.response
            let oFileReader = new FileReader()
            oFileReader.onloadend = function (e) {
                const base64 = e.target.result
                resolve(base64)
            }
            oFileReader.readAsDataURL(blob)
        }
    }
    xhr.send()
})

第二种:canvas.toDataURL()

实现原理:

使用canvas.toDataURL()方法

需要解决图片跨域问题 image.crossOrigin = ‘’;

return new Promise(resolve => {
        const img = new Image()
        img.crossOrigin = ''
        img.src = src
        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)
            resolve(dataURL)
  }
附:需要转化的图片很可能存在跨域问题,要么后端处理,要么前端处理。这里是使用时在vue中处理了跨域问题
devServer: {
  port: port,
  open: true,
  overlay: {
    warnings: false,
    errors: true
  },
  proxy: {
    '/api': {
      target: 'http://-----:8084'
      changeOrigin: true,
      ws: true,
      pathRewrite: {
 
        '^/api': ''
      }
    }
  }
},
声明:本站所有信息内容均由用户自行发表,该内容观点仅代表用户本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。Email:tellusa@foxmail.com

给TA打赏
共{{data.count}}人
人已打赏
JS教程

javascript中Class(类)的介绍和使用方法

2024-5-17 2:02:39

JS教程

如何使用JavaScript和XLSX.js将数据导出为Excel文件

2024-5-17 4:10:48

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
有新私信 私信列表
搜索