广民广民
工具实现揭秘图片工具

图片压缩是怎么实现的

Canvas 重编码的本地压缩——为什么 60% 质量能省一半体积,为什么无损格式要换格式

TL;DR:图片压缩在浏览器里用 Canvas 重编码完成:解码你选的图片 → 画到画布 → 以 60% 质量重新编码输出。单文件 ≤20MB、批量总计 ≤200MB,多文件结果自动打包成 ZIP。全程没有上传。

⏱️ 30 秒上手

  1. 打开 tools.guangmin.top/tools/image_compress;
  2. 拖入或选择一张或多张图片(JPG/PNG/WebP);
  3. 每张图自动压缩,表格里直接对比压缩前后体积与节省比例;
  4. 单张点「下载」,多张点「打包下载 ZIP」。

🔧 它是怎么实现的

三个关键技术点:

  1. 压缩 = 重新编码,不是「删像素」:JPEG 等有损格式的体积大头是编码时保留的细节量。把图片解码后以更低质量参数重新编码,视觉几乎无差、体积大幅下降。本工具的压缩质量是固定 60%(常量 IMAGE_COMPRESS_QUALITY = 0.6,全站唯一事实源)——测试过的人像/截图/商品图普遍能省 40%~80% 体积;
  2. PNG 也能压:PNG 是无损格式,重编码为 PNG 省不了多少。工具的实际策略是按目标格式重编码——对体积敏感的场景,PNG 转 WebP 输出才是大头(WebP 同画质体积约为 PNG 的三分之一)。是否改格式在解码时按文件类型与输出格式决定;
  3. 多文件用 shared 的 createZip 打包:批量结果在前端打成 ZIP(与「文件打包压缩」工具共用同一份 fflate 封装,见转换篇),不落服务器。

📏 边界与限制

项值说明
单文件上限20MB超出直接提示
批量总计200MB内存护栏,防止一次性解码爆掉浏览器
压缩质量60%(固定)全站常量唯一事实源,不提供滑块(避免用户调出「压了等于没压」的组合)
支持格式JPG / PNG / WebP输出按目标格式重编码

🔒 隐私口径

图片只在浏览器内存里解码、绘制、重编码,产物直接存回你的设备。服务器在这件事里的全部工作是把这个页面递给你。

🔗 延伸阅读