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 相关文章推荐
event对象的方法 兼容多浏览器
Jun 27 Javascript
jquery复选框多选赋值给文本框的方法
Jan 27 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
Nov 01 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
Aug 05 Javascript
深入理解React中es6创建组件this的方法
Aug 29 Javascript
Javascript中arguments对象的详解与使用方法
Oct 04 Javascript
jquery-mobile表单的创建方法详解
Nov 23 Javascript
深入理解Javascript箭头函数中的this
Feb 13 Javascript
原生js实现移动端触摸轮播的示例代码
Dec 22 Javascript
layui问题之模拟select点击事件的实例讲解
Aug 15 Javascript
浅谈JavaScript作用域
Dec 06 Javascript
原生JS实现分页
Apr 19 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代码
2010/07/17 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
js编写选项卡效果
2017/05/23 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
Python对列表排序的方法实例分析
2015/05/16 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
化学系大学生自荐信范文
2014/03/01 职场文书
培训协议书范本
2014/04/22 职场文书
毕业评语大全
2014/05/04 职场文书
中考标语大全
2014/06/05 职场文书
庆元旦演讲稿
2014/09/15 职场文书
县委务虚会发言材料
2014/10/20 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
pandas中DataFrame重置索引的几种方法
2021/05/24 Python