为什么会有它
体积上限是设计的失败,却装成你的过错找上门来。
手机随手一拍就是好几 MB。拒收它的表单只允许 5 MB,而且不会告诉你该改什么。Compresso 把这个问题收回浏览器里解决,用时不到一秒。
- 0 字节
从未上传
打开网络面板,看着它在一百张照片处理完的全程里保持沉默。
- 3.3 MB 到 93.5 KB
一次实测
结果随图片内容而变,所以这是一次真实的单次结果,而不是我们没有实测过的平均值。
- 3.6 KB
库核心,gzip 后
零必需依赖。只用浏览器原生能力。
应用
一切都在你的设备上完成。
免费、可安装,为你手握四十张照片、而表单一张都不收的那一刻而做。
私密源于构造
根本不存在可以接收你照片的服务器。这不是一条需要你相信的隐私政策,而是一套你可以自己验证的架构。
没有网络也能用
安装一次,在飞机上照样能跑。界面、字体和 HEIC 解码器全都存在你的设备上。
一次一百张
图片会在你的多个 CPU 核心上并行处理,所以即使一大批正在跑,界面依然顺滑。
iPhone 照片也在内
可读取 HEIC、JPEG、PNG、WebP 和 AVIF。可写出 AVIF、WebP、JPEG 和 PNG,并自动选用你浏览器能产出的最佳格式。
七种语言
英语、西班牙语、法语、德语、意大利语、葡萄牙语和中文,体积和百分比都按各自语言的习惯书写。

写给开发者
同一个引擎,作为依赖引入。
如果你更希望自己的用户永远遇不到上传失败,这套压缩内核也以库的形式提供,可以放进任何框架。
import { compress } from 'compresso.js';
const { file, savings } = await compress(input, {
quality: 0.8,
format: 'auto',
});3.6 KB,gzip 后
小到引入它不必先开个会。零必需依赖,也没有什么需要审计。
并行批量压缩,不占用主线程
compresso.js/pool 运行一个具备容错能力的 Web Worker 池——包含崩溃和超时恢复机制——让大批量图片并行压缩,同时不阻塞你的界面。
绝不返回更大的文件
有损输出的上限取你设定的体积上限与原图之中较小的那个,因为一个会把文件变大的压缩器本身就是坏的。
