JS图片压缩(pc端和移动端都适用)
发布时间 - 2026-01-10 22:28:11 点击率:次最近在做移动端遇到了一个问题就是:手机拍照后,图片过大如果上传到服务器务必会浪费带宽,最重要的是流量啊别慌,好事儿来了,务必就会有人去研究研究图片的压缩:

鄙人结合前人的经验,结合自己实战,总结出一个方法供大家参考:
/**
* 图片压缩,默认同比例压缩
* @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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在腾讯云免费申请建站?
JavaScript常见的五种数组去重的方式
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
如何在阿里云完成域名注册与建站?
nodejs redis 发布订阅机制封装实现方法及实例代码
Laravel如何实现用户密码重置功能?(完整流程代码)
在centOS 7安装mysql 5.7的详细教程
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
JS碰撞运动实现方法详解
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
高端云建站费用究竟需要多少预算?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
实例解析Array和String方法
iOS发送验证码倒计时应用
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
详解jQuery中的事件
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
Laravel如何生成URL和重定向?(路由助手函数)
网站建设要注意的标准 促进网站用户好感度!
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Swift开发中switch语句值绑定模式
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
油猴 教程,油猴搜脚本为什么会网页无法显示?
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何用PHP快速搭建高效网站?分步指南
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Laravel Docker环境搭建教程_Laravel Sail使用指南
使用豆包 AI 辅助进行简单网页 HTML 结构设计
WordPress 子目录安装中正确处理脚本路径的完整指南
iOS UIView常见属性方法小结
网站制作软件有哪些,制图软件有哪些?
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
Linux系统命令中screen命令详解
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
jQuery validate插件功能与用法详解
WEB开发之注册页面验证码倒计时代码的实现
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】

