图片压缩从原理上分为两大类。有损压缩(Lossy Compression)利用人类视觉系统的特性,有选择地丢弃人眼不易察觉的信息,从而大幅减小文件体积。典型代表是JPEG和有损模式的WebP。无损压缩(Lossless Compression)通过数学算法消除数据中的统计冗余,不丢失任何原始像素信息,解压后可完全还原。典型代表是PNG(使用DEFLATE算法,即LZ77+哈夫曼编码的组合)。
选择有损还是无损,取决于使用场景:摄影作品、产品图片、用户上传的照片等色彩丰富的图像适合有损压缩,因为人眼对连续色调的微小变化不敏感;而图标、Logo、UI截图、包含文字的图像、需要精确像素的技术图等适合无损压缩,避免出现模糊或色块伪影。
JPEG(Joint Photographic Experts Group)是目前使用最广泛的有损图片格式,其压缩过程包括以下关键步骤:
JPEG的8×8分块机制是其主要弱点——当压缩过度时,会出现明显的"方块效应"(Blocking Artifact),特别是在平滑渐变区域。这也是后来WebP和AVIF采用更灵活分块策略的原因。
| 格式 | 压缩类型 | 透明通道 | 动画支持 | 色深 | 浏览器兼容性 | 典型压缩率 | 最佳场景 |
|---|---|---|---|---|---|---|---|
| JPEG | 有损 | 不支持 | 不支持 | 8位/通道 | 所有浏览器 | 10:1~20:1 | 照片、色彩丰富的图像 |
| PNG | 无损 | 支持(8位Alpha) | 不支持 | 最高16位/通道 | 所有浏览器 | 2:1~5:1 | 图标、截图、需要透明的图像 |
| WebP | 有损+无损 | 支持 | 支持 | 8位/通道 | Chrome/Edge/Firefox/Safari 14+ | 比JPEG小25~35% | Web端通用格式 |
| AVIF | 有损+无损 | 支持 | 支持 | 最高12位/通道、HDR | Chrome 85+/Firefox 93+/Safari 16.4+ | 比JPEG小50%+ | 下一代Web图片、HDR内容 |
| GIF | 无损(256色) | 支持(1位) | 支持 | 8位索引色 | 所有浏览器 | 较低 | 简单动画(正被WebP/AVIF替代) |
| SVG | 矢量(无损) | 支持 | 支持(SMIL) | 矢量无限 | 所有浏览器 | 视复杂度 | 图标、Logo、简单插画 |
以JPEG为例,质量参数(Quality,0~100)与文件大小之间呈非线性关系。经验数据如下:
Google的Web性能团队建议,网站图片使用JPEG时质量设置在75~85之间,WebP建议80左右。根据测试,这一区间在SSIM(结构相似性指标)评分上仍可达到0.95以上,即与原图高度相似。
WebP由Google于2010年发布,基于VP8/VP9视频编解码技术。有损模式比JPEG小25~35%,无损模式比PNG小约26%,同时支持Alpha透明通道和动画。截至目前,全球超过97%的浏览器支持WebP,已成为Web图片的首选格式。
AVIF(AV1 Image File Format)基于开源视频编解码标准AV1,由开放媒体联盟(AOMedia)开发。相同质量下,AVIF比JPEG小约50%,比WebP小约20%。AVIF支持高动态范围(HDR)、宽色域、高达12位色深以及胶片颗粒合成等高级特性。缺点是编码速度较慢,且浏览器兼容性仍在完善中(Safari于16.4版本开始支持)。
本工具使用浏览器内置的Canvas API进行纯前端压缩,所有数据均在本地处理,不上传至任何服务器,完全保护隐私。核心步骤如下:
需要注意:PNG为无损格式,Canvas API的quality参数对PNG输出无效。如需进一步缩小PNG文件,可将输出格式切换为JPEG或WebP。此外,Canvas API的压缩效果依赖浏览器厂商的编码器实现,不同浏览器在同一质量参数下可能产生略有差异的文件大小。