JS图片压缩(pc端和移动端都适用)


Posted in Javascript onJanuary 12, 2017

最近在做移动端遇到了一个问题就是:手机拍照后,图片过大如果上传到服务器务必会浪费带宽,最重要的是流量啊别慌,好事儿来了,务必就会有人去研究研究图片的压缩:

鄙人结合前人的经验,结合自己实战,总结出一个方法供大家参考:

/**
 * 图片压缩,默认同比例压缩
 * @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);
 }
}

当然返回的是一个base64的一个字符串;

如果可以试着测试一下压缩后的图片大小:

// 调用函数处理图片 







dealImage("路径", {
// 注意:在pc端可以用绝对路径或相对路径,移动端最好用绝对路径(因为用take photo后的图片路径,我没有试成功(如果有人试成功了可以分享一下经验))
 width : 200
}, function(base){
//直接将获取到的base64的字符串,放到一个image标签中就可看到测试后的压缩之后的样式图了
 document.getElementById("transform").src = base;
 console.log("压缩后:" + base.length / 1024 + " " + base);


})

PS:主要思想就是获取到图片,利用H5 canvas技术进行图片数据化为 base64 的字符串,最后传到后台进行,后台将base64的字符串数据进行图像化储存。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript的键盘控制事件说明
Apr 15 Javascript
jQuery调用WebService的实现代码
Jun 19 Javascript
广泛收集的jQuery拖放插件集合
Apr 09 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
Sep 02 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
AngularJS语法详解
Jan 23 Javascript
jQuery封装的tab选项卡插件分享
Jun 16 Javascript
JS实现黑色大气的二级导航菜单效果
Sep 18 Javascript
理解Angular数据双向绑定
Jan 10 Javascript
使用 Node.js 对文本内容分词和关键词抽取
May 27 Javascript
js实现网页同时进行多个倒计时功能
Feb 25 Javascript
手把手教您实现react异步加载高阶组件
Apr 07 Javascript
原生js实现淘宝购物车功能
Jun 23 #Javascript
jQuery实现拖拽可编辑模块功能代码
Jan 12 #Javascript
jQuery实现倒计时重新发送短信验证码功能示例
Jan 12 #Javascript
js仿京东轮播效果 选项卡套选项卡使用
Jan 12 #Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
Jan 12 #Javascript
JS百度地图搜索悬浮窗功能
Jan 12 #Javascript
原生js实现焦点轮播图效果
Jan 12 #Javascript
You might like
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
jquery批量设置属性readonly和disabled的方法
2014/01/24 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
Python类属性的延迟计算
2016/10/22 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
python连接mysql有哪些方法
2020/06/24 Python
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
毕业证丢失证明
2014/01/15 职场文书
服务承诺书范文
2014/05/19 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
运动会800米赞词
2015/07/22 职场文书
毕业设计工作总结
2015/08/14 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
Python Pygame实战之塔防游戏的实现
2022/03/17 Python
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏