美文网首页
vue上传图片base64格式压缩

vue上传图片base64格式压缩

作者: 小虾米前端 | 来源:发表于2019-07-07 15:43 被阅读0次
image.png

一个上传头像的功能,后端给的接口可以接收base64格式的,用的UI框架是vant-ui,需求和准备大概就这样,如果对vant-ui不熟的可能需要先去看看vant-ui的上传组件使用方法。

下面展示代码

<van-uploader  @oversize="tipsBox" :max-size="4000000" accept="image/png, image/jpeg, image/jpg" :after-read="onRead">
                <div>
// userImg是压缩后的头像,defaultImg是默认头像
                  <img :src="userImg ?userImg : defalutImg" alt>
                </div>
                <div>
                    更换头像
                    <i></i>
                </div>
            </van-uploader>
  data() {
    return {
      userImg:'',
      defalutImg: require("@/assets/img/default_img.png"),
    };
  },
    // 上传头像,这个方法是vant-ui上传组件的
    async onRead(file) {
      let that = this
      that.userImg = file.content
      that.getImgFun(file.content)
    },
//拿到原始文件的base64的格式
    getImgFun (originalImg) {
      let that = this
      let base64Arr = originalImg.split(",");
      let imgtype = "";
      let base64String = "";
      if (base64Arr.length > 1) {
        //如果是图片base64,去掉头信息
        base64String = base64Arr[1];
        imgtype = base64Arr[0].substring(
          base64Arr[0].indexOf(":") + 1,
          base64Arr[0].indexOf(";")
        );
      }
      // 将base64解码
      let bytes = atob(base64String);
      //let bytes = base64;
      let bytesCode = new ArrayBuffer(bytes.length);
      // 转换为类型化数组
      let byteArray = new Uint8Array(bytesCode);
      // 将base64转换为ascii码
      for (let i = 0; i < bytes.length; i++) {
        byteArray[i] = bytes.charCodeAt(i);
      }
      // 生成Blob对象(文件对象)
      let bolbObj = new Blob([bytesCode], { type: imgtype });
      let reader = new FileReader(); // 这个方法读取文件的bolb对象
      //将图片转成base64格式
      reader.readAsDataURL(bolbObj);
      reader.onloadend = function() {
        let result = this.result;
        let img = new Image();
        img.src = result;
        console.log("********未压缩前的图片大小********");
        console.log(result.length / 1024);
        img.onload = function() {
          let data = that.compress(img, 0.1);
          that.uploadImg(data);
        };
      };
    },
// 压缩图片
    compress(img, size) {
        // 创建canvas
        let canvas = document.createElement('canvas')
        let ctx = canvas.getContext('2d')
        let initSize = img.src.length
        let width = img.width
        let height = img.height
        canvas.width = width
        canvas.height = height
        // 铺底色
        ctx.fillStyle = '#fff'
        ctx.fillRect(0, 0, canvas.width, canvas.height)
        ctx.drawImage(img, 0, 0, width, height)
        //进行最小压缩
        let ndata = canvas.toDataURL('image/jpeg', size)
        console.log('*******压缩后的图片大小*******')
        console.log(ndata.length / 1024)
        return ndata
      },
async uploadImg(base64) {
        console.log(base64)
        this.userImg = base64
      这里可以打印出最终压缩后的base64
        },

相关文章

  • vue(2019/7/15)

    vue实现照片选择或者拍照功能 照片格式校验, 图片质量压缩, 图片尺寸压缩, 图片离线保存, 图片base64编...

  • 图片转base64、判断图片大小、图片压缩、图片上传 FileR

    文章主要介绍 js 实现压缩上传图片base64长度功能,三大框架(React、Vue、Angular)可借此参考...

  • 图片上传,压缩方法

    1、点击图片上传,拿到图片,转化base64,然后在执行图片压缩 addImg() { let _this = ...

  • vue上传图片base64格式压缩

    一个上传头像的功能,后端给的接口可以接收base64格式的,用的UI框架是vant-ui,需求和准备大概就这样,如...

  • vue 图片压缩

    vue 图片压缩 上传图片大于100* 1024 的用canvas 来压缩来解决 然后IOS拍照上传会有图片旋转的...

  • vue 图片压缩

    vue 图片压缩 上传图片大于100* 1024 的用canvas来压缩来解决 然后IOS拍照上传会有图片旋转的问...

  • 前端实现图片压缩

    1.思路 获取图片数据 —> 用canvans画图,压缩 —> 压缩后为base64 —> 转成文件格式 —> 上...

  • 图片转为Base64格式

    最近后台写了个传图片的接口,传的图片格式是Base64,然后我就上网上找压缩转换的方法,但是上传到服务器却不能解析...

  • vue中上传图片把图片转为base64格式给后端

    我做的项目最近要实现一个上传图片的功能,后端需要base64的格式。使用图片转base64格式,再发给后端,后端只...

  • 图片格式互转

    最近有涉及到图片格式转换及压缩的需求,在这里统一归纳一下 File 转为 base64 格式 base64 转为 ...

网友评论

      本文标题:vue上传图片base64格式压缩

      本文链接:https://www.haomeiwen.com/subject/qzwbhctx.html