• Vue+ElementUI图片上传前进行图片压缩


    图片上传使用的是ElementUI的Upload上传组件,参数说明请查看官网

    页面使用组件

    <el-upload
    	:action="upload_path" 
    	list-type="picture-card"
    	:data="upload_info"
    	name="file"
    	:on-success="uploadSuccess"
    	:on-preview="handlePictureCardPreview"
    	:on-remove="handleRemove"
    	:before-upload="beforeAvatarUpload"
    	:file-list="imgs"
    	:show-file-list="true"
    	accept="image/*">
    		<i class="el-icon-plus" />
    </el-upload>
    

    参数定义

    data() {
    	return {
    		imgs: [],
    		// 图片预览
    		dialogImageUrl: '',
    		dialogVisible: false,
    		upload_path: '图片上传api接口',
    		// 上传时附带的额外参数
    		upload_info: {
    			type: 'img',
    			data: '上传时附带的额外参数'
    		},
    		quality: 0.6, // 压缩比例
    	}
    },
    

    Upload组件调用的方法:

    methods: {
    	// 文件上传成功
        uploadSuccess(res) {
          if (res.code === 200) {
            this.imgs.push({ name: res.data, url: this.$fileUrl_ + '/' + res.data, path: res.data })
          } else {
            console.error('文件上传失败', res.msg)
          }
        },
    	// 上传文件之前
        beforeAvatarUpload(file) {
    		// 图片大小大于2M进行图片压缩
          if (file.size / 1024 / 1024 > 2) {
            const that = this
            return new Promise(resolve => {
              const reader = new FileReader()
              const image = new Image()
              image.onload = (imageEvent) => {
                const canvas = document.createElement('canvas') // 创建画布
                const context = canvas.getContext('2d') 		// 画布为2d
                const width = image.width * that.quality 		// 图片宽度 * 压缩比例
                const height = image.height * that.quality		// 图片高度 * 压缩比例
                canvas.width = width							// 画布宽度
                canvas.height = height							// 画布宽度
                context.clearRect(0, 0, width, height)
                context.drawImage(image, 0, 0, width, height)
                const dataUrl = canvas.toDataURL(file.type)		//图片转路径
                const blobData = that.dataURLtoBlob(dataUrl, file.type) //图片转二进制
                resolve(blobData)
              }
              reader.onload = e => { image.src = e.target.result }
              reader.readAsDataURL(file)
            })
          } else {
            return true
          }
        },
    	//图片转二进制
        dataURLtoBlob(dataURL, type) {
          var binary = atob(dataURI.split(',')[1])
          var array = []
          for (var i = 0; i < binary.length; i++) {
            array.push(binary.charCodeAt(i))
          }
          return new Blob([new Uint8Array(array)], { type: type })
        },
    	// 图片移除
        handleRemove(file, fileList) {
          const arr = []
          fileList.forEach(r => {
            arr.push(r.response.data)
          })
          this.imgs = arr
        },
    	// 图片预览
        handlePictureCardPreview(file) {
          this.dialogImageUrl = file.url
          this.dialogVisible = true
        },
    }
    

    转载:Vue+Element-UI实现上传图片并压缩

  • 相关阅读:
    SharePoint 2013 中的SQL Server 安全
    SharePoint 2013 的HTML5特性之响应式布局
    SharePoint 2013 一些小技巧
    SharePoint 2013 排错之"Code blocks are not allowed in this file"
    SharePoint 2013 创建搜索中心及搜索设置
    SharePoint 2013 使用PowerShell创建State Service
    SharePoint 2013 内容部署功能简介
    SharePoint 使用PowerShell恢复误删的网站集
    SharePoint 自定义WebPart之间的连接
    linux之misc及使用misc创建字符设备
  • 原文地址:https://www.cnblogs.com/Intellectualscholar/p/16252815.html
Copyright © 2020-2023  润新知