vue+vant 实现图片压缩

vue+vant 实现图片压缩

直接上代码:

只支持上传单张图片,对单张图片进行压缩:在这里插入图片描述

<van-field name="uploader1" label="上传附件:">
                  <template #input>
                    <van-uploader v-model="uploader1"
                                  style="margin-right: 10px"
                                  :after-read="beforeRead1"
                                  accept="image/gif, image/jpeg, image/png"
                                  :max-count="1"
                                  upload-text="身份证人像面"
                                  upload-icon="plus">
                    </van-uploader>
                    <van-uploader v-model="uploader2" :after-read="beforeRead2"
                                  accept="image/gif, image/jpeg, image/png"
                                  :max-count="1"
                                  upload-text="身份证国徽面"
                                  upload-icon="plus"/>
                  </template>
                </van-field>
  data(){
	 return{
	        uploader1: [],
	        uploader2: [],
	        fileObj1:{},
	        fileObj2:{},
     },
      methods:{
	      beforeRead1(file) {
		          console.log('身份证正面file1,未压缩前的图片', file);
		          if (file.file.size > 200*1024) { //如果图片大于200K就进行压缩
		            const canvas = document.createElement('canvas') // 创建Canvas对象(画布)
		            const context = canvas.getContext('2d')
		            const img = new Image()
		            img.src = file.content // 指定图片的DataURL(图片的base64编码数据)
		            img.onload = () => {
		              canvas.width = img.width
		              canvas.height = img.height
		              context.drawImage(img, 0, 0, img.width, img.height)
		              file.content = canvas.toDataURL(file.file.type, 0.8) // 0.92为默认压缩质量
		              const files = this.dataURLtoFile(file.content, file.file.name)
		              console.log('文件读取完成后执行 进行图片压缩',files)
		              this.fileObj1=files.file
		              console.log('压缩后的文件',this.fileObj1)
		            }
		          }else{
		            this.fileObj1=file.file
		            console.log('不需要压缩的图片',this.fileObj1)
		          }
        },
        dataURLtoFile (dataurl, filename) { // 将base64转换为file文件
          let arr = dataurl.split(',')
          let mime = arr[0].match(/:(.*?);/)[1]
          let bstr = atob(arr[1])
          let n = bstr.length
          let u8arr = new Uint8Array(n)
          while (n--) {
            u8arr[n] = bstr.charCodeAt(n)
          }
          let file = new File([u8arr], filename, {type: mime})
          const data = { //拼成你所需要传给后端的格式
            file:file,
            content:dataurl,
            message:'',
            status:''
          }
          return data
        },
     }
 }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
移动端Vue VantUploader组件可以很方便地实现上传、压缩和旋转图片功能。首先,我们需要在Vue项目中引入Vue Vant库,并在需要使用Uploader的组件中注册该组件。 在页面中使用Uploader组件时,我们可以设置相关的属性来实现功能需求。首先是上传图片功能,可以通过设置`action`属性来指定图片上传的后端接口地址。上传成功后,可以通过监听`@success`事件来处理上传成功的逻辑,例如显示上传成功的提示信息或者将上传成功的图片URL保存到数据库等。 对于压缩图片的功能,我们可以使用该组件提供的`beforeRead`方法来获取用户要上传的图片文件对象。然后,利用`HTMLCanvasElement`的`toBlob`方法图片进行压缩,并将压缩后的图片对象传给Uploader组件进行上传。在压缩图片时,可以设置压缩的尺寸或者压缩的质量、压缩比等参数,以控制压缩后的图片大小适应实际需求。 要实现图片旋转的功能,我们可以利用`EXIF.js`库来读取图片的EXIF信息,获取图片的拍摄方向。然后,根据拍摄方向来确定图片需要旋转的角度,再借助`canvas`的`rotate`方法图片进行旋转。旋转后的图片可以在`@success`事件触发后重新渲染到页面上,或者直接发送到后端进行保存。 总结来说,移动端Vue VantUploader组件通过设置相关属性和监听事件,配合压缩工具和EXIF库,可以非常方便地实现图片上传、压缩和旋转功能,满足移动端图片处理的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值