美文网首页
图片压缩上传

图片压缩上传

作者: 不醒的梦最美 | 来源:发表于2019-04-15 14:13 被阅读0次

vue项目使用el-upload 组件,实现图片压缩上传至服务器
感谢博客文章,文章中主要代码来自该博客:https://blog.csdn.net/liona_koukou/article/details/84860899

<el-upload :http-request="httpRequest"  list-type="picture-card" :drag="true" ref="upload" :accept="accept[item.MimeTypes]" :headers="headers" :show-file-list="false" :action="upImgUrl" :data="Object.assign({item:item,index:index,i:i},fileData)" :before-upload="beforeAvatarUpload" :on-error="unloadError" :on-success="unloadSucceed" :on-change="uploadChange" >              
</el-upload>

主要是

// 将blob 文件转为 file文件
new window.File([blob],file.name,{type:file.type})
compress(fileObj, callback) {
      let quality = 0.7 // 默认图片质量为0.7
      const _this = this;
      try {
        const image = new Image()
        image.src = URL.createObjectURL(fileObj);
        image.onload = function() {
          const that = this
          // 默认按比例压缩
          let w = that.width
          let h = that.height
          const scale = w / h
          w = fileObj.width || w
          h = fileObj.height || (w / scale)
          
          // 生成canvas
          const canvas = document.createElement('canvas')
          const ctx = canvas.getContext('2d')
          // 创建属性节点
          const anw = document.createAttribute('width')
          anw.nodeValue = w
          const anh = document.createAttribute('height')
          anh.nodeValue = h
          canvas.setAttributeNode(anw)
          canvas.setAttributeNode(anh)
          ctx.drawImage(that, 0, 0, w, h)
          // 图像质量
          if (fileObj.quality && fileObj.quality <= 1 && fileObj.quality > 0) {
            quality = fileObj.quality
          }
          // quality值越小,所绘制出的图像越模糊
          const data = canvas.toDataURL('image/jpeg', quality)
          // 压缩完成执行回调
          const newFile = _this.convertBase64UrlToBlob(data)
          callback(newFile)
        }
      } catch (e) {
        console.log('压缩失败!')
      }
    },
    // 压缩图片转为blob 格式
    convertBase64UrlToBlob(urlData) {
      const bytes = window.atob(urlData.split(',')[1]) // 去掉url的头,并转换为byte
      // 处理异常,将ascii码小于0的转换为大于0
      const ab = new ArrayBuffer(bytes.length)
      const ia = new Uint8Array(ab)
      for (let i = 0; i < bytes.length; i++) {
        ia[i] = bytes.charCodeAt(i)
      }
      return new Blob([ab], { type: 'image/png' })
    },
    httpRequest(file){
      this.compress(file.file, function(blob) {
          // Blob 格式文件转为 file 格式
          var newFile=new window.File([blob],file.file.name,{type: file.file.type});
          // form 表单提交图片文件
          var formData = new FormData();
          formData.append("file",newFile);
          axios.post(file.action,formData,{headers:file.headers,timeout:30*60*1000}).then(data=>{
            file.onSuccess(data);
          })
        })
    }

相关文章

  • iOS 网络上传图片

    上传图片 构造参数(NSArray *)files 上传图片—压缩 压缩到小于(...

  • iPic for Mac(图床神器) v1.7.0中文免费版

    上传图片相关设置 上传前压缩图片 可以在 iPic 的 偏好设置 中开启「上传前压缩图片」选项,目前支持压缩的图片...

  • Vue上传图片压缩的问题

    上传图片太大,需要前台进行图片压缩上传图片大于100* 1024 的用canvas 来压缩来解决然后IOS拍照上传...

  • 图片压缩上传

    参考1-HTML5实现图片压缩上传功能参考2-移动前端—图片压缩上传实践参考3-移动端H5图片压缩上传 大体步骤 ...

  • 前端学习之路——图片上传压缩

    废话不多少,直接上代码! 压缩图片函数 调用函数 图片上传与压缩 图片上传与压缩就是这么简单,欢迎大家点评指导。

  • vue 图片压缩

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

  • vue 图片压缩

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

  • h5图片上传预览压缩

    图片压缩预览上传 欢迎纠错 ~

  • 提高上传效率,iOS图片压缩总结

    最近项目中用到七牛上传图片,多张上传时,png图片大,上传极慢,特地研究了一下图片压缩的方法。 两种压缩图片的方法...

  • iOS 上传图片到服务器

    1.单张图片上传 2.多张图片上传 PS:上传图片前,必须先压缩图片,不然图片过大,可能会导致上传失败!

网友评论

      本文标题:图片压缩上传

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