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 相关文章推荐
使用PHP+JQuery+Ajax分页的实现
Apr 23 Javascript
jquery实现弹出层遮罩效果的简单实例
Mar 03 Javascript
jquery.form.js用法之清空form的方法
Mar 07 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
May 25 Javascript
微信小程序(应用号)简单实例应用及实例详解
Sep 26 Javascript
从0开始学Vue
Oct 27 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
Dec 30 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
Nov 27 Javascript
微信小程序自定义toast的实现代码
Nov 16 Javascript
javascript系统时间设置操作示例
Jun 17 Javascript
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
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
mysql中存储过程、函数的一些问题
2007/02/14 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
javascript下function声明一些小结
2007/12/28 Javascript
js中符号转意问题示例探讨
2013/08/19 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
JavaScript+html5 canvas绘制缤纷多彩的三角形效果完整实例
2016/01/26 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
python写的一个文本编辑器
2014/01/23 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
Python测试模块doctest使用解析
2019/08/10 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
PageFactory设计模式基于python实现
2020/04/14 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
信息学院毕业生自荐信范文
2014/03/04 职场文书
工作决心书范文
2014/03/11 职场文书
倡议书格式范文
2014/04/14 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
党支部工作总结2015
2015/04/01 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle