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的构造函数和constructor属性
Jan 09 Javascript
js通过元素class名字获取元素集合的具体实现
Jan 06 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
Oct 16 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
Jun 08 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
Aug 06 Javascript
jQuery pagination分页示例详解
Oct 23 jQuery
vue自定义js图片碎片轮播图切换效果的实现代码
Apr 28 Javascript
微信小程序常用赋值方法小结
Apr 30 Javascript
ckeditor一键排版功能实现方法分析
Feb 06 Javascript
javascript实现智能手环时间显示
Sep 18 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
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
制作美丽的拉花
2021/03/03 冲泡冲煮
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
微信小程序签到功能
2018/10/31 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
js实现聊天对话框
2020/02/08 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
Python去除字符串两端空格的方法
2015/05/21 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
人事专员岗位职责
2013/11/20 职场文书
护士自我评价
2014/02/01 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
晚会主持词开场白
2014/03/17 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
环保建议书300字
2014/05/14 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
创先争优活动个人总结
2015/03/04 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
浅析Python OpenCV三种滤镜效果
2022/04/11 Python