这几天,我在用 Github page + hexo 搭建个人网站,为了延续风格,就想把配图与文章一起迁移过去。这时候就出现了一个难题:我所用的图片都是高清大图,放到网站上就严重拖慢了加载速度。因此,需要先把图片压缩,再上传。
我把需求概括如下:
- 需要批量压缩图片,现有大约 200 张,后会再增
- 是压缩,不是切割截取,不改变图片尺寸
- 原图片大部分是 10M - 30M,目标是压缩成 1M 以内,越小越好
按着这几条线索,我搜索“批量压缩图片”、“图片压缩工具“、”批量处理图片“......
一开始的想法是找轻量级的图片压缩工具,简单处理一下就好。然而不知是搜索的姿势不对,还是筛选过滤信息的姿势不对,结果都差强人气。
查找到的工具有本地与在线两类,可试验后都不太理想:有的软件下载后才发现是付费的,有的在使用时直接导致程序卡死,有的压缩率不够需要多次压缩,有的要求原始图片大小不能超过 5 M,有的要求批量处理数量不超过 20 张,有的不支持批量压缩......群内小伙伴还帮忙推荐了“PS+批处理”、acdsee、甚至手机应用 snapseed,都不合我意。
花了不少时间后,偶然看到有文章写用 Python 来压缩图片。一文惊醒梦中人,我怎么没想到呢?
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 还提供图片裁剪、加水印、保存压缩图片至云服务商等功能,非常强大。除了压缩过程有点慢,其它无可挑剔。