JS实现PC与移动端通用的图片压缩方案

作者:像素漫游

时间:2026-10-21

浏览:609

本文介绍一种基于HTML5 Canvas技术的JavaScript图片压缩方法,适用于PC端和移动端。通过获取图片数据并转换为Base64字符串,可有效减小文件体积,节省服务器带宽与用户流量。文中提供了完整的函数实现及调用示例,详细说明了参数配置与路径处理注意事项,帮助开发者快速集成图片压缩功能。

文章目录

移动端图片压缩背景与需求

在移动端开发过程中,常会遇到手机拍摄照片体积过大的问题。若直接将这些大图片上传至服务器,不仅会消耗大量服务器带宽,更会严重占用用户的移动数据流量。针对这一痛点,业界已有多种图片压缩方案可供研究与应用。

结合前人的经验与实战案例,这里总结出一套可行的处理方法,供开发者参考使用。

图片压缩核心函数实现


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

技术原理与后端处理流程

核心原理在于获取原始图片数据,利用HTML5 Canvas技术将其转换为Base64格式的字符串,随后将该字符串传输至后台服务器,由后端负责将Base64数据还原为图像文件进行存储。

以上即为本文介绍的全部内容,期望这些内容能对各位的学习或工作有所帮助,同时也感谢大家的支持。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章