在线图片压缩
支持四大现代格式 · 质量 / 目标体积双调节 · 批量并行 · 滑动对比 · 浏览器本地处理
JPG/PNG/WebP 浏览器内压缩
支持四大现代格式 · 质量 / 目标体积双调节 · 批量并行 · 滑动对比 · 浏览器本地处理
JPG → WebP:体积减半,质量持平PNG → WebP:保留透明(WebP 支持 alpha),体积减半PNG → JPG:透明区域用背景色填充(默认白)HEIC → JPG:依浏览器解码(Safari 原生支持)选保持原格式:JPG/PNG/WebP/AVIF 各自回流(不再误转 JPG)了解工具定位 · 使用场景 · 对比优势
浏览器内压缩 JPG、PNG、WebP 图片,自由调节质量与尺寸,实时预览压缩前后效果。运营编辑批量处理公众号配图、设计师压缩作品集、电商卖家优化商品图,无需安装软件。图片不上传到任何服务器,全程在本地完成,隐私安全。
公众号运营者每次发文需上传多张高清图,原图常超 5MB,上传慢且占用后台空间。用本工具将 JPG/PNG 压缩至 200KB 以内,画质肉眼无差别,单篇文章配图上传时间从 30 秒降至 3 秒,同时减少服务器存储成本。
淘宝/拼多多商家拍摄商品图常为 10MB+ 的 RAW 转 JPG,直接上传导致买家加载慢、跳出率高。将主图压缩至 500KB 以内,详情页加载速度提升 60%,同时保持白底图清晰度,减少因图片过大被平台降权的风险。
期刊投稿要求图片单张 ≤ 2MB,但实验截图或显微照片原始 TIFF 文件常达 20-50MB。用本工具转为高压缩比 WebP 格式,文件缩至 1.5MB 以内,满足期刊要求的同时保留 300DPI 的出版级分辨率,避免因图片不合格被退修。
独立博主上传游记照片时,单张 4K 原图 8-12MB,导致移动端加载延迟。批量拖拽压缩至 300KB 的 WebP,首屏加载时间从 8 秒降至 1.2 秒,Google PageSpeed 分数从 45 分提升至 92 分,且不损失细节纹理。
| 维度 | 本工具 | TinyPNG | Photoshop 另存为 |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,文件不上传服务器 | 需上传文件至服务器压缩 | 本地处理,依赖本地软件 |
| 处理速度 | 1-3 秒内完成 | 3-10 秒(含上传下载时间) | 30 秒以上(需手动操作) |
| 离线可用 | 支持(浏览器内运行) | 不支持(需联网) | 支持(需安装软件) |
| 文件大小限制 | 无明确限制(受浏览器内存影响) | 单文件最大 5MB(免费版) | 无限制(取决于本地硬件) |
| 收费模式 | 完全免费 | 免费版有限额,付费版 $0.009/张 | 需购买订阅(约 $22.99/月) |
| 批量处理 | 单张处理 | 支持批量上传(最多 20 张) | 支持批量(需动作脚本) |
| 平台依赖 | 任何现代浏览器(Chrome/Firefox/Edge) | 任何现代浏览器 | 仅 Windows/macOS |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 一张 5MB 的 JPG 照片(4000×3000 像素) | 压缩后文件大小:1.2MB,格式:JPG,压缩率:76% | 典型场景:普通照片压缩,体积大幅减小 |
| 一张 200KB 的 PNG 截图(1920×1080 像素) | 压缩后文件大小:180KB,格式:PNG,压缩率:10% | 典型场景:PNG 截图压缩,体积变化较小 |
| 一张 10MB 的 WebP 图片(8000×6000 像素) | 压缩后文件大小:3.5MB,格式:WebP,压缩率:65% | 边界 case:大尺寸高分辨率图片压缩 |
| 一张 50KB 的 JPG 图标(64×64 像素) | 压缩后文件大小:48KB,格式:JPG,压缩率:4% | 边界 case:小文件压缩,效果不明显 |
| 一张 0.5MB 的已压缩 JPG(质量 85%) | 压缩后文件大小:0.48MB,格式:JPG,压缩率:4% | 易错 case:二次压缩已优化图片,收益低 |
| 一张 2MB 的 PNG 透明 logo(800×600 像素) | 压缩后文件大小:1.1MB,格式:PNG,压缩率:45% | 典型场景:带透明通道的 PNG 压缩 |
| 一张 15MB 的 BMP 位图(3000×2000 像素) | 不支持该格式,请转换为 JPG/PNG/WebP | 边界 case:输入非支持格式,工具拒绝处理 |
上传一张带透明背景的 PNG 图标,选择「最大压缩」后输出为 JPG保留 PNG 格式压缩,或确认不需要透明通道后再转 JPGJPG 不支持透明通道,强制转换会导致透明区域变成默认黑色或白色背景,破坏原图视觉
第一次压缩后得到 80KB 图片,再次上传该 80KB 图片压缩,期望降到 40KB只对原始无损/高质量源文件压缩一次,不要对已压缩的 JPG 再次压缩JPG 是有损格式,每次重压缩都会叠加质量损失,文件大小下降有限,画质却明显劣化
将一张 30KB 的 WebP 图片上传并选择「转为 JPG 高质量」,得到 60KB 文件保持原格式压缩,或仅在目标平台不支持 WebP 时才转 JPG,并选择中等质量WebP 压缩效率通常比 JPG 高 25-35%,强行转 JPG 且设置高质量会导致体积反弹
直接拖入一张 8000×6000px 的 RAW 转 JPG(约 25MB)到浏览器先用系统自带工具或批量软件缩小分辨率(如 1920px 宽),再上传压缩浏览器内压缩依赖客户端内存,超大尺寸图片会导致页面无响应或崩溃,且压缩后体积仍可能过大
上传一张 500KB 的 PNG 截图,勾选「无损」后期望压到 50KB理解无损压缩通常只能减少 10-30%(如 500KB→400KB),大幅缩小需用有损模式无损压缩只去除冗余元数据或优化编码,不丢弃像素信息;文件大小受图像复杂度限制
将网页用的 72dpi、80% 压缩率的 JPG 发给印刷厂做 A4 宣传册印刷需 300dpi 以上且压缩率不低于 90%,或使用 TIFF/PNG 等无损格式浏览器压缩默认面向屏幕显示,低 dpi 和高压缩率会导致印刷品出现锯齿和色块
压缩后照片的拍摄时间、GPS 位置、相机型号全部丢失,无法用于归档压缩前确认是否需要保留 EXIF;需要则使用支持保留元数据的工具或单独备份多数在线压缩工具为减小体积会剥离 EXIF 数据,对摄影爱好者和取证场景影响较大
公式推导 · 流程图解 · 依据出处
CR = 1 - (S_compressed / S_original)
CR — 压缩率,0~1 的小数S_compressed — 压缩后文件大小(字节)S_original — 原始文件大小(字节)一张 1920×1080 的 JPG 照片,原始大小 2.5 MB(2,621,440 字节)。经浏览器内压缩后,输出为 680 KB(696,320 字节)。CR = 1 - (696,320 / 2,621,440) = 1 - 0.2656 = 0.7344,即压缩率约 73.4%,文件减小了约 73%。
适用于 JPG/PNG/WebP 格式的浏览器端有损压缩。压缩率受原始图片内容复杂度、编码器质量参数(0-100)影响,纯色区域可压缩 90%+,高噪点照片可能仅压缩 20-30%。
3 种主流语言 · 复制即用
from PIL import Image
import io
# 打开图片
img = Image.open('input.jpg')
# 压缩为 JPEG,quality 范围 1-95,数值越低体积越小
buffer = io.BytesIO()
img.save(buffer, format='JPEG', quality=50, optimize=True)
compressed = buffer.getvalue()
print(f'原始大小: {img.fp.tell() if img.fp else "未知"} 字节')
print(f'压缩后大小: {len(compressed)} 字节')
# 保存到文件
with open('output.jpg', 'wb') as f:
f.write(compressed)package main
import (
"image/jpeg"
"os"
)
func main() {
// 打开原始图片
inFile, err := os.Open("input.jpg")
if err != nil {
panic(err)
}
defer inFile.Close()
img, err := jpeg.Decode(inFile)
if err != nil {
panic(err)
}
// 创建输出文件
outFile, err := os.Create("output.jpg")
if err != nil {
panic(err)
}
defer outFile.Close()
// quality 参数 1-100,50 表示中等压缩
err = jpeg.Encode(outFile, img, &jpeg.Options{Quality: 50})
if err != nil {
panic(err)
}
}// 浏览器端压缩(使用 Canvas API)
function compressImage(file, quality = 0.5) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => {
const img = new Image();
img.onload = () => {
const canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
// 输出为 JPEG,quality 0-1
canvas.toBlob((blob) => {
resolve(blob);
}, 'image/jpeg', quality);
};
img.src = e.target.result;
};
reader.readAsDataURL(file);
});
}
// 使用示例
// const fileInput = document.querySelector('input[type="file"]');
// fileInput.addEventListener('change', async (e) => {
// const compressed = await compressImage(e.target.files[0], 0.5);
// console.log('压缩后大小:', compressed.size, '字节');
// });9 个高频疑问
「压缩 / 优化」下的其他工具