news 2026/6/19 21:15:20

Python图片压缩方法全解:从入门到进阶

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python图片压缩方法全解:从入门到进阶

图片占网页流量60%以上,一张10MB的照片能拖慢整个页面加载速度。Python生态里压缩图片的方法不少,但适合你的可能就两三种

这篇把主流方案捋一遍,告诉你什么场景用什么工具。


一、先分清两条路

类型原理压缩率信息损失典型场景
无损压缩消除数据冗余,解码后与原图完全一致10%-30%医学影像、PNG透明图、技术图纸
有损压缩丢弃人眼不敏感的高频细节50%-90%网页配图、社媒分享、缩略图

绝大多数场景,选有损就够了。quality=85 时人眼几乎无法分辨,体积已砍掉60%。


二、六种主流方法

1. Pillow —— 最通用,首选

Python图像处理的标准库,装完就能用。

pipinstallPillow

三种压缩手段

fromPILimportImage img=Image.open("photo.jpg")# ① 降质量(最常用)img.save("small.jpg",quality=85,optimize=True)# ② 缩尺寸img_resized=img.resize((1920,1080),Image.LANCZOS)img_resized.save("resized.jpg",quality=85)# ③ 换格式(PNG → JPEG,体积常减50%+)ifimg.mode=='RGBA':img=img.convert('RGB')img.save("converted.jpg","JPEG",quality=85)
参数推荐值说明
quality85质量与体积的最佳平衡点
optimizeTrue额外尝试无损压缩JPEG
resampleLANCZOS高质量缩放算法

适合: 日常开发、批量处理、离线场景。


2. TinyPNG API —— 压缩率最高

不是Python库,但有官方Python SDK,一行调用:

pipinstalltinify
importtinify tinify.key="YOUR_API_KEY"source=tinify.from_file("input.png")source.to_file("output.png")# 自动选最优参数
指标Pillow (quality=85)TinyPNG
PNG压缩率20%-30%50%-80%
JPG压缩率40%-60%50%-70%
免费额度无限制月500张

适合: 对压缩率要求极高、图片量不大的场景。


3. WebP格式转换 —— 谷歌出品,体积最小

WebP是目前综合压缩率最优的图片格式,同画质下比JPEG小25%-35%。

fromPILimportImage img=Image.open("photo.jpg")img.save("photo.webp","WEBP",quality=80)
对比项JPEGWebP
同质量体积100KB65-75KB
浏览器支持99%96%(IE不支持)
透明通道

适合: 现代化网站、不需要兼容IE的项目。


4. PyVips —— 性能怪兽,内存极低

Pillow的问题:大图(>50MB)会吃光内存。PyVips用流式处理,100MB图片只占几十MB内存。

pipinstallpyvips
importpyvips img=pyvips.Image.thumbnail("huge.jpg",1920)img.write_to_file("small.jpg",Q=85)
指标PillowPyVips
100张10MB图耗时40秒,峰值内存2GB耗时8秒,峰值内存200MB
大图支持勉强轻松

适合: 批量处理大图、服务器端图片处理。


5. OpenCV —— 视频帧/实时流首选

如果你在处理视频帧或摄像头流,OpenCV比Pillow快得多。

importcv2 img=cv2.imread("photo.jpg")cv2.imwrite("small.jpg",img,[cv2.IMWRITE_JPEG_QUALITY,85])

适合: 视频处理、实时流、需要同时做图像分析的场景。


6. K-means聚类 —— 算法级压缩,可控色彩数

不改格式,直接减少图片色彩数量。原理:把相近颜色归为一类。

importnumpyasnpfromsklearn.clusterimportKMeansfromPILimportImage img=Image.open("photo.jpg")pixels=np.array(img).reshape(-1,3)kmeans=KMeans(n_clusters=64)# 只保留64种颜色kmeans.fit(pixels)new_pixels=kmeans.cluster_centers_[kmeans.labels_]new_img=Image.fromarray(new_pixels.reshape(img.size[1],img.size[0],3).astype('uint8'))new_img.save("kmeans.jpg")
色彩数效果压缩率
256轻微色块感~40%
64明显海报化~60%
16强烈艺术感~75%

适合: 图标处理、艺术化效果、学习算法原理。


三、方法对比总表

方法压缩率速度内存难度最佳场景
Pillow⭐⭐⭐⭐⭐⭐⭐⭐通用首选
TinyPNG⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐追求极致压缩
WebP⭐⭐⭐⭐⭐⭐⭐⭐⭐现代Web项目
PyVips⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐大图批量处理
OpenCV⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐视频/实时流
K-means⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐艺术化/学习

四、怎么选?看这个决策树

需要压缩图片? │ ├─ 几张图,临时用 → 在线工具(tinypng.com),别写代码 │ ├─ 批量 + 离线 → Pillow(本文方法1),够用 │ ├─ 压缩率优先 → TinyPNG API │ ├─ 网站配图 → WebP格式 │ ├─ 图片>50MB / 批量>1000张 → PyVips │ ├─ 视频帧处理 → OpenCV │ └─ 玩算法 / 艺术化 → K-means

五、一个能直接用的批量脚本

把上面最常用的方案合在一起:

importosfromPILimportImagedefcompress_batch(input_dir,output_dir,quality=85,max_width=1920):os.makedirs(output_dir,exist_ok=True)forfinos.listdir(input_dir):ifnotf.lower().endswith(('.jpg','.jpeg','.png','.bmp')):continuein_path=os.path.join(input_dir,f)out_path=os.path.join(output_dir,f)withImage.open(in_path)asimg:ifimg.modein('RGBA','P'):img=img.convert('RGB')ifimg.width>max_width:ratio=max_width/img.width img=img.resize((max_width,int(img.height*ratio)),Image.LANCZOS)img.save(out_path,'JPEG',quality=quality,optimize=True)orig=os.path.getsize(in_path)/1024new=os.path.getsize(out_path)/1024print(f"{f}:{orig:.0f}KB →{new:.0f}KB ({1-new/orig:.0%})")compress_batch("./原图","./压缩",quality=85)

最后说一句

别追求"最好的压缩方法",够用的才是最好的。大多数情况下,Pillow + quality=85 + optimize=True,已经能解决90%的问题。

先把这一招用熟,再根据实际瓶颈考虑换工具。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/19 21:10:26

手机AI革命:3种方法在Android设备本地运行llama.cpp大模型

手机AI革命:3种方法在Android设备本地运行llama.cpp大模型 【免费下载链接】llama.cpp LLM inference in C/C 项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp 还在为手机AI必须联网而烦恼?今天我将为你揭示一个终极解决方案——在A…

作者头像 李华
网站建设 2026/6/19 21:06:00

微信网页版访问限制的三大挑战与可维护中继解决方案

1. 项目概述:当微信网页版不再是“想登就登”作为一名在互联网产品与开发一线摸爬滚打了十多年的老手,我见过太多因为“访问限制”而中断的工作流和协作。最近,一个老生常谈但又始终困扰着大量用户的问题再次被推到了风口浪尖——微信网页版的…

作者头像 李华
网站建设 2026/6/19 21:05:11

从公众号与APP切入:深度信息收集实战与攻击面构建指南

1. 项目概述:一次从公开资产切入的深度信息收集实战最近在复盘一个内部授权的安全评估项目,整个过程挺有意思,不是那种直接对着IP段一顿猛扫的常规操作,而是从目标单位的微信公众号和官方APP这两个看似平常的“门面”入手&#xf…

作者头像 李华
网站建设 2026/6/19 21:04:48

G-Helper终极指南:三步告别华硕笔记本臃肿控制软件

G-Helper终极指南:三步告别华硕笔记本臃肿控制软件 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exper…

作者头像 李华