Js利用Canvas实现图片压缩功能

发布时间 - 2026-01-11 03:13:38    点击率:

最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢。为此,需要对图片进行压缩处理来优化上传功能。以下是具体实现:

/* 
 * 图片压缩
 * img    原始图片
 * width   压缩后的宽度
 * height  压缩后的高度
 * ratio   压缩比率 
 */
 function compress(img, width, height, ratio) {        
   var canvas, ctx, img64;
        
   canvas = document.createElement('canvas');        
   canvas.width = width;
   canvas.height = height;
        
   ctx = canvas.getContext("2d");        
   ctx.drawImage(img, 0, 0, width, height);
        
   img64 = canvas.toDataURL("image/jpeg", ratio);
        
   return img64;
 }

上面是一个图片压缩函数,返回 base64 格式的图片数据。 其中压缩比率取值(0 - 1 之间)越大图片质量越高。建议不要将图片转为 png 格式,因为转为 png 格式,图片的 base64 比转为 jpeg 的要长不少。下面是实际调用:

var image = new Image();
image.src = "/img/test.jpg";
      
image.onload = function(){
  var img64 = compress(image, 500, 400, 0.7);
  document.getElementById("test").src = img64;
}

注意: 压缩方法的调用以及图片src赋值必须放在图片的 onload 方法里面。因为只有等图片加载完成后才能进行压缩处理,从而转换为base64 进行赋值。 如果放在 onload 方法外面,则可能压缩代码无效,或者会生成一张纯黑色的图片。

以上这篇Js利用Canvas实现图片压缩功能就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# js  # canvas  # 图片压缩  # JS 图片压缩原理与实现方法详解  # JS中图片压缩的方法小结  # js移动端图片压缩上传功能  # JS图片压缩(pc端和移动端都适用)  # JS图片压缩的简单实现  # 放在  # 给大家  # 是一个  # 上传  # 就会  # 手机拍照  # 希望能  # 要将  # 越大  # 这篇  # 涉及到  # 则可  # 越高  # 转换为  # 都比  # 很慢  # 小编  # 上传图片  # 大家多多  # 加载 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何续费美橙建站之星域名及服务?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  C#如何调用原生C++ COM对象详解  Laravel如何为API生成Swagger或OpenAPI文档  Laravel如何使用.env文件管理环境变量?(最佳实践)  轻松掌握MySQL函数中的last_insert_id()  Laravel中的Facade(门面)到底是什么原理  php485函数参数是什么意思_php485各参数详细说明【介绍】  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  JS去除重复并统计数量的实现方法  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Laravel如何配置任务调度?(Cron Job示例)  如何快速搭建高效简练网站?  Python制作简易注册登录系统  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  网站制作免费,什么网站能看正片电影?  晋江文学城电脑版官网 晋江文学城网页版直接进入  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  Laravel storage目录权限问题_Laravel文件写入权限设置  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel怎么清理缓存_Laravel optimize clear命令详解  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Android GridView 滑动条设置一直显示状态(推荐)  Laravel如何使用模型观察者?(Observer代码示例)  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Python文件异常处理策略_健壮性说明【指导】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Laravel如何处理和验证JSON类型的数据库字段  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel怎么实现验证码(Captcha)功能  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel如何使用Gate和Policy进行授权?(权限控制)  jQuery validate插件功能与用法详解  ,在苏州找工作,上哪个网站比较好?  详解jQuery中的事件  BootStrap整体框架之基础布局组件  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  什么是javascript作用域_全局和局部作用域有什么区别?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?