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 相关文章推荐
JavaScript下通过的XMLHttpRequest发送请求的代码
Jun 28 Javascript
jquery 无限级联菜单案例分享
Mar 26 Javascript
往光标所在位置插入值的js代码
Sep 22 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
Nov 19 Javascript
初步了解javascript面向对象
Nov 09 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
Mar 10 Javascript
vue router2.0二级路由的简单使用
Jul 05 Javascript
JS+Canvas绘制动态时钟效果
Nov 10 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
Feb 26 Javascript
webpack配置导致字体图标无法显示的解决方法
Mar 06 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
Jul 27 Javascript
Vant 中的Toast设置全局的延迟时间操作
Nov 04 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
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
php识别翻转iphone拍摄的颠倒图片
2018/05/17 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
JavaScript常用标签和方法总结
2015/09/01 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
python 开发的三种运行模式详细介绍
2017/01/18 Python
Python部署web开发程序的几种方法
2017/05/05 Python
python实现雨滴下落到地面效果
2018/06/21 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
python 实现dict转json并保存文件
2019/12/05 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
通俗讲解python 装饰器
2020/09/07 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
如何通过python检查文件是否被占用
2020/12/18 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
How TDD works
2012/09/30 面试题
领导干部考察材料
2014/02/08 职场文书
建材投资建议书
2014/05/16 职场文书
实习生矿工检讨书
2014/10/13 职场文书
转变工作作风心得体会
2016/01/23 职场文书
【2·13】一图读懂中国无线电发展
2022/02/18 无线电