js实现上传并压缩图片效果


Posted in Javascript onJanuary 10, 2018

本文实例为大家分享了js实现上传并图片压缩的具体代码,供大家参考,具体内容如下

代码:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title></title>
  <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
 </head>
 <body>
  <input type="file" id="picFile" onchange="readFile(this)"/> 
  <img style="" id="img" src="" alt="" />
  <script>
  function readFile(obj){ 
   var file = obj.files[0];  
   //判断类型是不是图片 
    if(!/image\/\w+/.test(file.type)){ 
      alert("请确保文件为图像类型"); 
      return false; 
    } 
    var reader = new FileReader(); 
    reader.readAsDataURL(file); 
    reader.onload = function(e){
     dealImage(this.result,{width:200},function(base){
     
document.getElementById('img').setAttribute('src',base)
     });
    } 
  } 
 
  /**
   * 图片压缩,默认同比例压缩
   * @param {Object} path
   * pc端传入的路径可以为相对路径,但是在移动端上必须传入的路径是照相图片储存的绝对路径
   * @param {Object} obj
   * obj 对象 有 width, height, quality(0-1)
   * @param {Object} callback
   * 回调函数有一个参数,base64的字符串数据
   */
  function dealImage(path, obj, callback){
   var img = new Image();
   img.src = path;
   img.onload = function(){
   var that = this;
   // 默认按比例压缩
   var w = that.width,
   h = that.height,
   scale = w / h;
   w = obj.width || w;
   h = obj.height || (w / scale);
   var quality = 0.7; // 默认图片质量为0.7
   //生成canvas
   var canvas = document.createElement('canvas');
   var ctx = canvas.getContext('2d');
   // 创建属性节点
   var anw = document.createAttribute("width");
   anw.nodeValue = w;
   var anh = document.createAttribute("height");
   anh.nodeValue = h;
   canvas.setAttributeNode(anw);
   canvas.setAttributeNode(anh);
   ctx.drawImage(that, 0, 0, w, h);
   // 图像质量
   if(obj.quality && obj.quality <= 1 && obj.quality > 0){
   quality = obj.quality;
   }
   // quality值越小,所绘制出的图像越模糊
   var base64 = canvas.toDataURL('image/jpeg', quality );
   // 回调函数返回base64的值
   callback(base64);
   }
  }
  </script>
 </body>
</html>

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

Javascript 相关文章推荐
jQuery 开发者应该注意的9个错误
May 03 Javascript
前台js改变Session的值(用ajax实现)
Dec 28 Javascript
javascript arguments使用示例
Dec 16 Javascript
Extjs4.0 ComboBox如何实现三级联动
May 11 Javascript
jquery uploadify隐藏上传进度的实现方法
Feb 06 Javascript
使用Bootstrap打造特色进度条效果
May 02 Javascript
Vue组件化通讯的实例代码
Jun 23 Javascript
总结js函数相关知识点
Feb 27 Javascript
JS实现常见的查找、排序、去重算法示例
May 21 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
Sep 01 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
Nov 28 Javascript
layui下拉框获取下拉值(select)的例子
Sep 10 Javascript
web前端vue之CSS过渡效果示例
Jan 10 #Javascript
Vue.js分页组件实现:diVuePagination的使用详解
Jan 10 #Javascript
利用ECharts.js画K线图的方法示例
Jan 10 #Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
Jan 10 #Javascript
微信小程序实现传参数的几种方法示例
Jan 10 #Javascript
React中常见的动画实现的几种方式
Jan 10 #Javascript
使用async-validator编写Form组件的方法
Jan 10 #Javascript
You might like
页面乱码问题的根源及其分析
2013/08/09 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
php生成无限栏目树
2017/03/16 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
写自已的js类库需要的核心代码
2012/07/16 Javascript
jquery的each方法使用示例分享
2014/03/25 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
js实现双色球效果
2020/08/02 Javascript
Python生成验证码实例
2014/08/21 Python
python字符串的常用操作方法小结
2016/05/21 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
python isinstance函数用法详解
2020/02/13 Python
python如何快速生成时间戳
2020/07/21 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
酒店执行总经理岗位职责
2013/12/15 职场文书
测量工程专业求职信
2014/02/24 职场文书
班组长岗位职责
2014/03/03 职场文书
初三班主任寄语大全
2014/04/04 职场文书
中秋晚会策划方案
2014/06/12 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js