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 相关文章推荐
jQuery UI-Draggable 参数集合
Jan 10 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
Sep 04 Javascript
js+CSS实现弹出居中背景半透明div层的方法
Feb 26 Javascript
jQuery插件制作的实例教程
May 16 Javascript
Bootstrap CDN和本地化环境搭建
Oct 26 Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 Javascript
Vue 2中ref属性的使用方法及注意事项
Jun 12 Javascript
基于模板引擎Jade的应用(详解)
Dec 12 Javascript
详解vue-cli 脚手架 安装
Apr 16 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
Nov 01 Javascript
基于vue-draggable 实现三级拖动排序效果
Jan 10 Javascript
js中复选框的取值及赋值示例详解
Oct 18 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
Terran兵种介绍
2020/03/14 星际争霸
图书管理程序(一)
2006/10/09 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
js的新生代垃圾回收知识点总结
2019/08/22 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
Python包和模块的分发详细介绍
2020/06/19 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
sort命令的作用和用法
2013/08/25 面试题
校园之星获奖感言
2014/01/29 职场文书
安全演讲稿大全
2014/05/09 职场文书
2014年端午节演讲稿范文
2014/05/23 职场文书
个人综合鉴定材料
2014/05/23 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis