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 】
相关推荐:
如何在VPS电脑上快速搭建网站?
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
图册素材网站设计制作软件,图册的导出方式有几种?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
js实现获取鼠标当前的位置
如何快速生成橙子建站落地页链接?
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
JS经典正则表达式笔试题汇总
JS实现鼠标移上去显示图片或微信二维码
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
高性能网站服务器配置指南:安全稳定与高效建站核心方案
手机网站制作与建设方案,手机网站如何建设?
如何在香港服务器上快速搭建免备案网站?
高端网站建设与定制开发一站式解决方案 中企动力
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
如何快速辨别茅台真假?关键步骤解析
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
如何快速搭建二级域名独立网站?
如何用腾讯建站主机快速创建免费网站?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Laravel如何使用模型观察者?(Observer代码示例)
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
高端企业智能建站程序:SEO优化与响应式模板定制开发
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel怎么调用外部API_Laravel Http Client客户端使用
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
如何在腾讯云服务器上快速搭建个人网站?
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
如何在橙子建站中快速调整背景颜色?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
如何用低价快速搭建高质量网站?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
什么是javascript作用域_全局和局部作用域有什么区别?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
Laravel如何使用Sanctum进行API认证?(SPA实战)
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
微信小程序制作网站有哪些,微信小程序需要做网站吗?
Linux系统运维自动化项目教程_Ansible批量管理实战
C语言设计一个闪闪的圣诞树
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Laravel如何生成API文档?(Swagger/OpenAPI教程)
如何在阿里云服务器自主搭建网站?

