js工具函数之将网络图片url地址转换为base64格式

1、封装工具函数,将url地址,转换为base64格式输出

      function getBase64(url, callback) {
        //通过构造函数来创建的 img 实例,在赋予 src 值后就会立刻下载图片,相比 createElement() 创建 <img> 省去了 append(),也就避免了文档冗余和污染
        var Img = new Image(),
          dataURL = '';
        Img.src = url +"?v=" + Math.random(); // 处理缓存,fix缓存bug,有缓存,浏览器会报错;
        Img.setAttribute("crossOrigin", 'Anonymous') // 解决控制台跨域报错的问题
        Img.onload = function () { //要先确保图片完整获取到,这是个异步事件
          var canvas = document.createElement("canvas"), //创建canvas元素
            width = Img.width, //确保canvas的尺寸和图片一样
            height = Img.height;
          canvas.width = width;
          canvas.height = height;
          canvas.getContext("2d").drawImage(Img, 0, 0, width, height); //将图片绘制到canvas中
          dataURL = canvas.toDataURL('image/jpeg'); //转换图片为dataURL
          callback ? callback(dataURL) : null; //调用回调函数
        };
      }

使用方式示例:

getBase64('http://p1.pstatp.com/large/435d000085555bd8de10', (dataURL) => { console.log(dataURL) })

2、在上面的基础上,封装promise版本

    getBase64(url) {
      return new Promise((resolve, reject) => {
        var Img = new Image()
        var dataURL = ''
        Img.setAttribute('crossOrigin', 'Anonymous')
        Img.src = url + '?v=' + Math.random()
        Img.onload = function() {
          // 要先确保图片完整获取到,这是个异步事件
          var canvas = document.createElement('canvas') // 创建canvas元素
          var width = Img.width // 确保canvas的尺寸和图片一样
          var height = Img.height
          canvas.width = width
          canvas.height = height
          canvas.getContext('2d').drawImage(Img, 0, 0, width, height) // 将图片绘制到canvas中
          dataURL = canvas.toDataURL('image/jpeg') // 转换图片为dataURL
          resolve(dataURL)
        }
      })
    }

封装调用函数

    async baseCallback(url) {
      try {
        console.log('执行')
        const res = await this.getBase64(url)
        console.log(res) // 获取到结果
        this.bgcImgUrl = res // 我这里将结果赋值给需要用的变量属性
      } catch (err) {
        console.log(err)
      }
    }

补充说明:转换为base64格式的时候,也可以选择转换为png格式的。
dataURL = canvas.toDataURL('image/png')这种就可以支持背景透明度了。有时候会有用。

参考链接:
知识点https://www.jb51.net/article/128554.htm

报错解决https://blog.csdn.net/hangge0111/article/details/81585841

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值