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 相关文章推荐
flash javascript之间的通讯方法小结
Dec 20 Javascript
JS 图片缩放效果代码
Jun 09 Javascript
工作需要写的一个js拖拽组件
Jul 28 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
AngularJS ng-change 指令的详解及简单实例
Jul 30 Javascript
jQuery图片切换动画效果
Feb 28 Javascript
微信小程序图片宽100%显示并且不变形
Jun 21 Javascript
JavaScript取得gridview中获取checkbox选中的值
Jul 24 Javascript
详解如何优雅地在React项目中使用Redux
Dec 28 Javascript
微信小程序登录时如何获取input框中的内容
Dec 04 Javascript
如何基于javascript实现贪吃蛇游戏
Feb 09 Javascript
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
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
PHP伪造referer实例代码
2008/09/20 PHP
浅谈PHP 闭包特性在实际应用中的问题
2009/10/30 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
PHP 类与构造函数解析
2017/02/06 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
jquery中radio checked问题
2015/03/16 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python版本的读写锁操作方法
2016/04/25 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
Python如何将模块打包并发布
2020/08/30 Python
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
经济贸易系求职信
2014/08/04 职场文书
学校运动会广播稿
2014/10/11 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python