利用 tinypng 的 api 批量压缩图片

利用 tinypng 的 api 批量压缩图片_第1张图片
tinypng

相信很多开发者都知道 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

效果图如下:


利用 tinypng 的 api 批量压缩图片_第2张图片
image.png

你可能感兴趣的:(利用 tinypng 的 api 批量压缩图片)