vue 图片压缩

    baseImg() {
      const at = new Date().getTime()
      const image = new Image()
      image.src = base64String
      const _this = this

      image.onload = () => {
        let resultBlob = ''
        // 压缩图片
        const file = 'image/jpeg'
        resultBlob = _this.compressUpload1(image, file, _this.compressConfig)

        const format = new FormData()
        // format.append('file', blob, Date.now() + '.png')
        // console.log(_this.compressedImg)
        format.append('file', resultBlob, Date.now() + '.jpeg')
        var options = {
          url: '/file/upload',
          method: 'post',
          data: format
        }
        axios(options)
          .then((res) => {
            console.log(res)
            if (res.data.code == 200) {
              const b = Number(new Date().getTime()) - Number(at)
              console.log(b)
            } else {
              _this.$message.error(res.data.message)
            }
          })
          .catch((err) => {
            console.log(err)
          })
      }
    },
    compressUpload1(image, file, compressConfig) {
      // console.log('canvas压缩----')
      // console.log(image)
      // console.log(file)
      // console.log(compressConfig)
      const canvas = document.createElement('canvas')
      const ctx = canvas.getContext('2d')
      let width = compressConfig.width || image.width
      let height = compressConfig.height || image.height

      // 只设置宽度时,等比计算高度
      if (compressConfig.width && !compressConfig.height) {
        height = (compressConfig.width / image.width) * image.height
      }
      // 只设置高度时,等比计算宽度
      if (compressConfig.height && !compressConfig.width) {
        width = (compressConfig.height / image.height) * image.width
      }

      canvas.width = width
      canvas.height = height
      // console.log(canvas)
      ctx.fillRect(0, 0, canvas.width, canvas.height)
      // console.log(canvas)
      ctx.drawImage(image, 0, 0, width, height)

      // console.log(canvas)
      // 进行最小压缩0.1
      // const compressData = canvas.toDataURL(
      //   file || 'image/jpeg',
      //   compressConfig.rate || 0.1
      // )
      const compressData = canvas.toDataURL('image/jpeg', 0.5)
      console.log(compressData)
      this.imageUrl = compressData
      // console.log(compressData)
      // console.log(this.imageUrl)

      // base64转Blob
      const blobImg = this.dataURItoBlob(compressData)
      // console.log(blobImg)
      // 获取压缩后图片的信息
      this.compressedImg = new Image()
      this.compressedImg.src = compressData
      this.compressedImg.height = height
      this.compressedImg.width = width
      this.compressedImg.size = (blobImg.size / 1024 / 1024).toFixed(2)

      // const blob = this.base64ToBlob(this.compressedImg.src)
      // console.log(blob)
      // console.log(this.compressedImg.size )
      // console.log(blobImg)
      return blobImg
    },
 	/* 图片格式转换——base64转Blob对象 */
    dataURItoBlob(data) {
      // console.log(data)
      let byteString
      if (data.split(',')[0].indexOf('base64') >= 0) {
        byteString = data.split(',')[1]
      } else {
        byteString = unescape(data.split(',')[1])
      }
      // console.log(byteString)
      const mimeString = data.split(',')[0].split(':')[1].split(';')[0]
      // console.log(mimeString)
      const ia = new Uint8Array(byteString.length)
      for (let i = 0; i < byteString.length; i += 1) {
        ia[i] = byteString.charCodeAt(i)
      }
      // console.log(ia)
      return new Blob([ia], { type: 'image/jpeg' })
    },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值