网络图片转base64

let xhr = new XMLHttpRequest()
    xhr.open('get', imgUrl='www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png', true)
    xhr.responseType = 'blob'
    xhr.onload = function () {
      if (this.status === 200) {
        let blob = this.response
        let fileReader = new FileReader()
        fileReader.onloadend = function (e) {
          // el.src = e.target.result
        }
        fileReader.readAsDataURL(blob)
      }
    }
  xhr.send()
  // svg转base64
  const svg = document.querySelector('svg')
  const s = new XMLSerializer().serializeToString(svg)
  const src = `data:image/svg+xml;base64,${window.btoa(s)}`
  // ↓ 创建图片容器并存放
  const img = new Image() // 创建图片容器承载过渡
  img.src = src
  // 注意:需要在图片onload方法中执行
  img.onload = () => {
    // ↓ 第二部分
    const canvas = document.createElement('canvas')
    canvas.width = img.width
    canvas.height = img.height
    console.log(canvas)
    const context = canvas.getContext('2d')
    context.drawImage(img, 0, 0)
    const ImgBase64 = canvas.toDataURL('image/png')
    console.log(ImgBase64)
  }

  解决vue项目绑定img src但 ie不显示 于是写成自定义指令

Vue.directive('toBase64', {
  bind: function (el, binding) {
    const { value: imgIds } = binding
    let showImg = ''
    let defaultImg = ''
    if (Array.isArray(imgIds)) {
      showImg = imgIds[0]
      defaultImg = imgIds[1]
    } else {
      showImg = imgIds
    }
    let imgUrl = config.imgBaseUrl + showImg
    if (!showImg || !window.navigator.msSaveBlob) {
      el.src = showImg ? imgUrl : defaultImg
      return
    }
    let xhr = new XMLHttpRequest()
    xhr.open('get', imgUrl, true)
    xhr.responseType = 'blob'
    xhr.onload = function () {
      if (this.status === 200) {
        let blob = this.response
        let fileReader = new FileReader()
        fileReader.onloadend = function (e) {
          el.src = e.target.result
        }
        fileReader.readAsDataURL(blob)
      }
    }
    xhr.send()
  },
  update: function (el, binding) {
    const { oldValue, value: imgIds } = binding
    if (oldValue.toString() === imgIds.toString()) {
      return
    }
    let showImg = ''
    let defaultImg = ''
    if (Array.isArray(imgIds)) {
      showImg = imgIds[0]
      defaultImg = imgIds[1]
    } else {
      showImg = imgIds
    }
    let imgUrl = config.imgBaseUrl + showImg
    if (!showImg || !window.navigator.msSaveBlob) {
      el.src = showImg ? imgUrl : defaultImg
      return
    }
    let xhr = new XMLHttpRequest()
    xhr.open('get', imgUrl, true)
    xhr.responseType = 'blob'
    xhr.onload = function () {
      if (this.status === 200) {
        let blob = this.response
        let fileReader = new FileReader()
        fileReader.onloadend = function (e) {
          el.src = e.target.result
        }
        fileReader.readAsDataURL(blob)
      }
    }
    xhr.send()
  }
})

 

posted @ 2020-12-21 18:19  谢书怜  阅读(262)  评论(0)    收藏  举报