相信很多开发者都知道 tinypng.com 这个网站,一般上传到服务器上,或者打包到 app 的图片都得需要经过压缩,一般很多人都会用这个网站进行压缩。
但是同时它也提供了开发者的 api
可以借助脚本来自动压缩,这样就省下了一些人工操作,一劳永逸。
同时它还突破了每次只能传20张,每张最大 5M 的限制。
不过对于价格方面,每个账号每个月可以免费压缩 500 张,对于平时开发来说足够用了。
官方提供了很多种语言的实现方式,我采用的是 python3
首先安装 tinify
模块
pip3 install tinify
下面是 python
的具体代码:
tiny.py
#-*- coding:utf-8 -*-
import tinify
import glob
import os
from datetime import datetime
from multiprocessing import Pool
start_time = datetime.now()
key = '******************' # 登录后去主页就可以查看到key
tinify.key = key
imgs = glob.glob('path/*.png')
def tinypng(path):
original_size = os.path.getsize(path) / 1000
source = tinify.from_file(path)
source.to_file(path)
size = os.path.getsize(path) / 1000
print(
f'''图片:\x1b[1;34m{path}\x1b[0m, 压缩前:\x1b[1;34m{str(original_size)}kb\x1b[0m, 压缩后:\x1b[1;34m{str(size)}kb\x1b[0m, 减少:\x1b[1;34m{str(round(original_size - size, 3))}kb\x1b[0m'''
)
p = Pool(4)
for path in imgs:
p.apply_async(tinypng, args=(path, ))
p.close()
p.join()
end_time = datetime.now()
total_seconds = (end_time - start_time).total_seconds()
print('一共用了 %f s' %total_seconds)
执行: python3 tiny.py
效果图如下: