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 Tips(3) 关于$()包装集内元素的改变
Dec 14 Javascript
JS将秒换成时分秒实现代码
Sep 03 Javascript
B/S模式项目中常用的javascript汇总
Dec 17 Javascript
jQuery中scrollLeft()方法用法实例
Jan 16 Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 Javascript
webpack 1.x升级过程中的踩坑总结大全
Aug 09 Javascript
关于Vue Webpack2单元测试示例详解
Aug 14 Javascript
浅谈Vue路由快照实现思路及其问题
Jun 07 Javascript
微信小程序实现手指触摸画板
Jul 09 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
Sep 01 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
Apr 30 Javascript
vue从零实现一个消息通知组件的方法详解
Mar 16 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
2015/08/05 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
Python3分析处理声音数据的例子
2019/08/27 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
请介绍一下WSDL的文档结构
2013/03/17 面试题
个人简历中的自我评价范例
2013/10/29 职场文书
结婚喜宴主持词
2014/03/14 职场文书
开业主持词
2014/03/21 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
中层干部考核评语
2015/01/04 职场文书
2015年清明节活动总结
2015/02/09 职场文书
2015年化验室工作总结
2015/04/23 职场文书
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers