当前位置: 首页 > news >正文

用 Python 压缩图片:从入门到实战

图片太大,上传慢、存储贵、加载卡?用 Python 几行代码就能搞定。


为什么要压缩图片?

  • 网站加速:图片占网页流量的 60%+,压缩后加载速度提升明显
  • 节省存储:一张 10MB 的照片压到 500KB,硬盘压力小很多
  • 符合平台限制:微信、微博、电商平台都有图片大小上限

方案一:Pillow(最推荐,简单够用)

Pillow 是 Python 最主流的图像处理库,压缩图片只需几行代码。

1. 按质量压缩(有损)

fromPILimportImagedefcompress_image(input_path,output_path,quality=85):""" quality: 1-100,越小文件越小,画质越差 推荐值:70-85 之间性价比最高 """img=Image.open(input_path)# JPEG 不支持透明通道,需要转换模式ifimg.modein('RGBA','P'):img=img.convert('RGB')img.save(output_path,'JPEG',optimize=True,quality=quality)original_size=os.path.getsize(input_path)/1024new_size=os.path.getsize(output_path)/1024print(f"原大小:{original_size:.1f}KB → 压缩后:{new_size:.1f}KB,节省{100-new_size/original_size*100:.1f}%")compress_image("photo.jpg","photo_compressed.jpg",quality=80)

2. 按尺寸压缩(缩小分辨率)

defresize_image(input_path,output_path,max_width=1200):img=Image.open(input_path)w,h=img.sizeifw>max_width:ratio=max_width/w new_size=(max_width,int(h*ratio))img=img.resize(new_size,Image.LANCZOS)# LANCZOS 是高质量缩放算法img.save(output_path,'JPEG',optimize=True,quality=85)

3. 批量压缩整个文件夹

importosfromPILimportImagedefbatch_compress(input_dir,output_dir,quality=80):os.makedirs(output_dir,exist_ok=True)forfilenameinos.listdir(input_dir):iffilename.lower().endswith(('.jpg','.jpeg','.png','.webp')):input_path=os.path.join(input_dir,filename)output_path=os.path.join(output_dir,filename)img=Image.open(input_path)ifimg.modein('RGBA','P'):img=img.convert('RGB')img.save(output_path,'JPEG',optimize=True,quality=quality)print(f"✅{filename}")batch_compress("./photos","./photos_compressed",quality=75)

方案二:OpenCV(适合需要更多控制的场景)

importcv2defcompress_with_cv2(input_path,output_path,quality=80):img=cv2.imread(input_path)# quality 参数范围 0-100cv2.imwrite(output_path,img,[cv2.IMWRITE_JPEG_QUALITY,quality])

OpenCV 优势是可以顺便做裁剪、旋转、加水印等操作,再一起压缩。


方案三:tinify(API 压缩,效果最好)

如果追求极致压缩比,可以用 tinify 的 API,它用的是有损+无损混合算法。

importtinify tinify.key="你的API_KEY"source=tinify.from_file("photo.jpg")source.to_file("photo_tiny.jpg")

免费额度每月 500 张,超出后付费,但压缩效果确实比 Pillow 好 20%-40%。


几个实用技巧

技巧说明
quality=85 是 sweet spot低于 70 肉眼可见模糊,高于 90 压缩效果很弱
先缩尺寸再压质量效果翻倍,比如先 resize 到 1200px 宽,再 quality=80
PNG 转 JPEG如果不需要透明通道,PNG 转 JPEG 体积能缩小 70%+
用 WebP 格式同等画质下比 JPEG 小 30%,现代浏览器全支持
optimize=True 别忘加Pillow 的这个参数会额外做一次无损优化,白捡的压缩

到底选哪个?

需求推荐方案
快速搞定、批量处理Pillow
要同时做图像处理(裁剪/旋转)OpenCV
追求最小体积、不差钱tinify API
面向 Web 前端输出转为WebP格式

完整实战脚本(直接复制就能用)

importosfromPILimportImagedefsmart_compress(input_path,output_path,max_width=1920,quality=80):img=Image.open(input_path)# 1. 转换模式ifimg.modein('RGBA','P'):img=img.convert('RGB')# 2. 缩小尺寸w,h=img.sizeifw>max_width:ratio=max_width/w img=img.resize((max_width,int(h*ratio)),Image.LANCZOS)# 3. 压缩保存img.save(output_path,'JPEG',optimize=True,quality=quality)original=os.path.getsize(input_path)/1024compressed=os.path.getsize(output_path)/1024print(f"{os.path.basename(input_path)}:{original:.0f}KB →{compressed:.0f}KB")# 使用smart_compress("large_photo.jpg","small_photo.jpg")

图片压缩的核心就一句话:先缩尺寸,再调质量,能转格式就转格式。掌握这三步,90% 的场景都够用了。

http://www.jsqmd.com/news/940096/

相关文章:

  • 从数据到决策:构建基于价值最大化的智能决策系统
  • OpenCore Legacy Patcher:老款Mac的终极重生计划
  • Beyond Compare 5密钥生成工具:3分钟解决软件激活难题
  • 量化交易中的特征重要性分析:GitHub_Trending/ma/machine-learning-for-trading SHAP值应用
  • 2026年支持跨境多功能旅行收纳包/七件套旅行收纳包/宁波旅行收纳包/旅行收纳包精选推荐公司 - 品牌宣传支持者
  • STM32F103VET6通过FSMC驱动2.8寸ILI9341彩屏的双库工程(标准库+HAL)
  • cann/cannbot-skills:快速检视场景
  • 2026年常州遗产继承律师实力对比 5位资深律师各有特色 - 本地品牌推荐
  • Mac Mouse Fix 终极指南:让你的普通鼠标秒变苹果触控板!
  • 告别手动刷卡!手把手教你用CANoe和VH5110搞定ISO 15118即插即充(PnC)的测试与报文解密
  • 可学习共形预测:机器人感知与规划中的不确定性量化
  • ANSYS Q3D扫频实战:手把手教你搞定功率模块的寄生电感曲线(附Origin美化技巧)
  • AtlasOS GPU性能优化指南:解锁显卡隐藏性能的3个关键技术
  • PasteMD:一键实现Markdown与Office文档的无缝粘贴体验
  • 无限箭图拓扑化与Borel复杂度分析:从组合对象到描述集合论
  • Mesh vs. Torus实战选型:在芯片互连与数据中心网络中如何避坑?
  • Three.js 实战:用 Water 库 5 分钟搞定一个会流动的湖泊(附免费法线贴图资源)
  • 答辩PPT制作效率翻倍!百考通AI学术PPT工具实测测评
  • 新手避坑指南:手把手教你用Requests库爬取中国大学MOOC,从找API到存CSV
  • 2026年口碑好的浙江模内喷漆注塑/IMC注塑/PUR注塑/汽车外饰件注塑优质厂家推荐榜 - 品牌宣传支持者
  • 3步实现离线OCR自由:Umi-OCR Linux桌面集成终极指南
  • OpenCore Legacy Patcher:让老Mac焕发新生的开源神器
  • 智能胎心监护仪开发全解析:从BLE连接到移动端信号处理
  • 技术赋能生物多样性保护与文化遗产传承:从数据采集到社区参与的全栈实践
  • 蓝速科技智能会议预约屏:打通钉钉飞书,终结会议室“撞车”难题
  • 【信息科学与工程学】【数据科学】数据科学领域-第三篇 数学基础07 群论02
  • 2026年常州离婚律师怎么挑?5个关键点防踩雷 - 本地品牌推荐
  • Sora 2非遗训练数据集构建指南:含2176小时田野影像、89种方言语音标注及文化语义对齐标准(附工信部备案编号)
  • 原恒星双星光度测量新方法:OCS分子谱线观测技术
  • 告别重启!SpringBoot + Protobuf动态解析实战:在线更新.proto文件并实时解析MQTT数据