全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

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

/**
 * 图片压缩,默认同比例压缩
 * @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的字符串数据进行图像化储存。

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


# JS  # 图片  # 压缩  # JavaScript前端实现压缩图片功能  # JS中图片压缩的方法小结  # js实现上传并压缩图片效果  # 通过js实现压缩图片上传功能  # 如何用JS有效的压缩图片  # js实现纯前端压缩图片  # 如何使用JavaScript对图像进行压缩  # 回调  # 的是  # 来了  # 可以用  # 就可  # 一个问题  # 过大  # 人去  # 试着  # 最重要的是  # 最好用  # 越小  # 有一个  # 按比例  # 测试一下  # 但是在  # 手机拍照  # 就会有  # quality  # callback 


相关文章: 装修招标网站设计制作流程,装修招标流程?  如何通过wdcp面板快速创建网站?  如何用搬瓦工VPS快速搭建个人网站?  宝塔Windows建站如何避免显示默认IIS页面?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何正确选择百度移动适配建站域名?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  建站与域名管理如何高效结合?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  ,sp开头的版面叫什么?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  已有域名和空间,如何快速搭建网站?  如何用低价快速搭建高质量网站?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  香港服务器部署网站为何提示未备案?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  网站图片在线制作软件,怎么在图片上做链接?  网站制作软件有哪些,制图软件有哪些?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何通过免费商城建站系统源码自定义网站主题与功能?  制作网站怎么制作,*游戏网站怎么搭建?  建站主机如何安装配置?新手必看操作指南  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  代刷网站制作软件,别人代刷火车票靠谱吗?  建站之星云端配置指南:模板选择与SEO优化一键生成  PHP 500报错的快速解决方法  专业公司网站制作公司,用什么语言做企业网站比较好?  如何在阿里云高效完成企业建站全流程?  如何快速打造个性化非模板自助建站?  重庆市网站制作公司,重庆招聘网站哪个好?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  简单实现Android文件上传  行程制作网站有哪些,第三方机票电子行程单怎么开?  建站主机如何选?高性价比方案全解析  如何在云虚拟主机上快速搭建个人网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  如何制作算命网站,怎么注册算命网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何快速选择适合个人网站的云服务器配置?  如何通过西部数码建站助手快速创建专业网站?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  建站之星代理商如何保障技术支持与售后服务?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何选择高效便捷的WAP商城建站系统?  如何在IIS中新建站点并配置端口与物理路径? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。