10 行 Python 代码,批量压缩图片 500 张,简直太强大了

 

本文原创并首发于公众号【Python猫】,未经受权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/5hpFDgjCpfb0O1Jg-ycACwhexo

熟悉 “Python猫” 的读者应该知道,猫哥我发布的全部文章都使用了极具特点的配图——原创文章使用猫图,转载文章使用狗图,极少例外。工具

这几天,我在用 Github page + hexo 搭建我的网站,为了延续风格,就想把配图与文章一块儿迁移过去。这时候就出现了一个难题:我所用的图片都是高清大图,放到网站上就严重拖慢了加载速度。所以,须要先把图片压缩,再上传。post

我把需求归纳以下:学习

  • 须要批量压缩图片,现有大约 200 张,后会再增
  • 是压缩,不是切割截取,不改变图片尺寸
  • 原图片大部分是 10M - 30M,目标是压缩成 1M 之内,越小越好

按着这几条线索,我搜索“批量压缩图片”、“图片压缩工具“、”批量处理图片“......优化

一开始的想法是找轻量级的图片压缩工具,简单处理一下就好。然而不知是搜索的姿式不对,仍是筛选过滤信息的姿式不对,结果都差强人气。网站

查找到的工具备本地与在线两类,可试验后都不太理想:有的软件下载后才发现是付费的,有的在使用时直接致使程序卡死,有的压缩率不够须要屡次压缩,有的要求原始图片大小不能超过 5 M,有的要求批量处理数量不超过 20 张,有的不支持批量压缩......群内小伙伴还帮忙推荐了“PS+批处理”、acdsee、甚至手机应用 snapseed,都不合我意。编码

花了很多时间后,偶然看到有文章写用 Python 来压缩图片。一文惊醒梦中人,我怎么没想到呢?spa

先看看别人是怎么作的。这篇《如何用Python智能批量压缩图片?》(https://zhuanlan.zhihu.com/p/32246003)文章中介绍了使用 PIL 库的 Image 模块来压缩图片的方法,主要经过调节图片长宽数值的方式。翻译

PIL 是个强大的图片处理库,但只支持 Python 2,并且早已中止更新。有开发者在它基础上改良并维护了 Pillow,支持 Python 3。以前有所耳闻,没用过。因而猫哥查了几篇教程和文档。读后发现它压缩图片的方法主要是等比例缩放、裁剪以及改变格式等,并不是我所要的。code

还看到一篇《如何在无损的状况下让图片变的更小》(http://www.javashuo.com/article/p-yctpjtvu-ht.html)文章,它介绍了 Yelp(美国最大点评网站)的三种优化图片的策略:Pillow、动态调优、更换编码器。有些方法很高大上,应该是业界先进经验了,但它但愿保证图片无损,全部方法加起来才可使图片大小平均减小 30%,所以并不知足个人要求。另外它引伸介绍了几种方法,但是须要花费时间去研究,我也放弃了。

最后,终于找到了一种很是便捷,又十分知足的方案,下面开始进入正题了。(不要嫌我啰嗦,探索的过程也颇有趣)(嘘,其实是由于下面要介绍的方法太简单,才区区几行代码,我实在忍不住强行加戏......)

----------------当心翼翼的分割线---------------

Tinypng 网站提供在线图片压缩服务,是全部图片压缩工具中最好用的之一,但它有所限制:批量最多处理 20 张,且每张大小不容许超过 5 M。

这个网站很是良心,开放了免费的 API ,API 取消了每张大小的限制,只限定每月处理 500 张图片。这对我来讲,已经足足有余了。

下面介绍怎么使用它。第一步是在它网站上注册,得到专属的 API_KEY。使用的是邮箱注册,很简单。

而后是安装 package:

pip install --upgrade tinify

接着是处理图片:

import tinify
import os

tinify.key = '此处填入你的key'
path = "C:\\Users\\yunpoyue\\Pictures\\cat" # 图片存放的路径

for dirpath, dirs, files in os.walk(path):
    for file in files:
        imgpath = os.path.join(dirpath, file)
        print("compressing ..."+ imgpath)
        tinify.from_file(imgpath).to_file(imgpath)

不到 10 行代码,轻轻松松就批量压缩图片,简直不要太爽!20 M 的图片能压缩到 2 M,压缩率达到惊人的 90%,成绩喜人。

它的 API 还提供图片裁剪、加水印、保存压缩图片至云服务商(亚马逊云、谷歌云)等功能,很是强大。除了压缩过程有点慢,其它无可挑剔。

通过一番探索与比较,我肯定这是目前的最优方案,因此强烈分享给你们。

公众号【Python猫】, 本号连载优质的系列文章,有喵星哲学猫系列、Python进阶系列、好书推荐系列、技术写做、优质英文推荐与翻译等等,欢迎关注哦。后台回复“爱学习”,免费得到一份学习大礼包。

相关文章
相关标签/搜索