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截取中文字符串的实现代码
Dec 22 Javascript
jQuery Ajax 实例全解析
Apr 20 Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
捕获和分析JavaScript Error的方法
Mar 25 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
Oct 10 Javascript
自定义vue全局组件use使用、vuex的使用详解
Jun 14 Javascript
JavaScript用200行代码制作打飞机小游戏实例
Jun 21 Javascript
详解JavaScript中的六种错误类型
Sep 21 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
Jan 27 jQuery
JavaScript的级联函数用法简单示例【链式调用】
Mar 26 Javascript
javascript实现遮罩层动态效果实例
May 14 Javascript
javascript 模块依赖管理的本质深入详解
Apr 30 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
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
layui文件上传实现代码
2017/05/20 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python自动生成model文件过程详解
2019/11/02 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
学期自我评价
2014/01/27 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
职称评定自我鉴定
2014/03/18 职场文书
学校运动会简讯
2015/07/20 职场文书
python文件目录操作之os模块
2021/05/08 Python
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server