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 相关文章推荐
Add Formatted Text to a Word Document
Jun 15 Javascript
jquery 实现表单验证功能代码(简洁)
Jul 03 Javascript
javascript读取xml实现javascript分页
Dec 13 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
浅谈JS日期(Date)处理函数
Dec 07 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
Sep 12 Javascript
如何解决hover在ie6中的兼容性问题
Dec 15 Javascript
three.js中文文档学习之如何本地运行详解
Nov 20 Javascript
详解如何在Vue项目中导出Excel
Apr 19 Javascript
vue实现百度搜索功能
Dec 28 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
Nov 12 Javascript
three.js 将图片马赛克化的示例代码
Jul 31 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企业级应用之常见缓存技术篇
2011/01/27 PHP
php汉字转拼音的示例
2014/02/27 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
Python下singleton模式的实现方法
2014/07/16 Python
Django中处理出错页面的方法
2015/07/15 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
python使用turtle库绘制时钟
2020/03/25 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
恶意软件的定义
2014/11/12 面试题
数控专业个人求职信范文
2014/02/05 职场文书
领导干部失职检讨书
2015/05/05 职场文书
付款证明模板
2015/06/19 职场文书
django上传文件的三种方式
2021/04/29 Python
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript