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


Posted in Javascript onNovember 26, 2019

Vue+Element-UI 上传图片并压缩,供大家参考,具体内容如下

1.版本

Vue:2.5.2
Element-UI:2.12.0

可实现图片上传前,自动压缩。
Element-UI组件,详情见 官网。

2.template部分

<el-form-item label="照片">
  <el-upload
  accept="image/*"
  class="avatar-uploader"
  :action="uploadPath"
  :show-file-list="false"
  :on-success="handleAvatarSuccess"
  :before-upload="beforeAvatarUpload">
  <img v-if="imgUrl" :src="imgUrl" class="avatar">
  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
 </el-upload>
</el-form-item>

3.script部分

data() {
  return {
   //压缩质量
   imgQuality: 0.5,
   imageUrl: ''
}
methods: {
 handleAvatarSuccess(res, file) {
  // 服务器返回结果处理
 },
 dataURItoBlob(dataURI, 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});
 },
 beforeAvatarUpload(file) {
  const _this = 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');
    const width = image.width * _this.imgQuality
    const height = image.height * _this.imgQuality
    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 = _this.dataURItoBlob(dataUrl, file.type);
    resolve(blobData)
   }
   reader.onload = (e => { image.src = e.target.result; });
   reader.readAsDataURL(file);
  })
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript方法和技巧大全
Dec 27 Javascript
msn上的tab功能Firefox对childNodes处理的一个BUG
Jan 21 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
Mar 23 Javascript
鼠标放在图片上显示大图的JS代码
Mar 26 Javascript
7个JS基础知识总结
Mar 05 Javascript
Easyui form combobox省市区三级联动
Jan 13 Javascript
JS前端加密算法示例
Dec 22 Javascript
loading动画特效小结
Jan 22 Javascript
JavaScript轮播图简单制作方法
Feb 20 Javascript
实例详解display:none与visible:hidden的区别
Mar 30 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
Aug 20 Javascript
vue中进行微博分享的实例讲解
Oct 14 Javascript
jQuery实现轮播图效果
Nov 26 #jQuery
JavaScript使用百度ECharts插件绘制饼图操作示例
Nov 26 #Javascript
使用vue重构资讯页面的实例代码解析
Nov 26 #Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
Nov 26 #Javascript
JavaScript的变量声明与声明提前用法实例分析
Nov 26 #Javascript
vue中keep-alive,include的缓存问题
Nov 26 #Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
Nov 26 #Javascript
You might like
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
python3音乐播放器简单实现代码
2020/04/20 Python
用python找出那些被“标记”的照片
2017/04/20 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
对python修改xml文件的节点值方法详解
2018/12/24 Python
Python3爬虫全国地址信息
2019/01/05 Python
详解python中递归函数
2019/04/16 Python
如何在django中添加日志功能
2020/02/06 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
自我推荐信范文
2014/05/09 职场文书
医院义诊活动总结
2014/07/04 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
置业顾问岗位职责
2015/02/09 职场文书
银行求职信范文
2019/05/13 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python