利用 tinypng 的 api 批量压缩图片

相信很多开发者都知道 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)
    # 压缩后大小
    mini_size = os.path.getsize(path) / 1000
    # 减少体积
    remove_size = round(original_size - mini_size, 3)
    print(
        f'图片:\x1b[1;34m{path}\x1b[0m, 压缩前:\x1b[1;34m{str(original_size)}kb\x1b[0m, 压缩后:\x1b[1;34m{str(mini_size)}kb\x1b[0m, 减少:\x1b[1;34m{str(remove_size)}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

效果图:

转载于:https://juejin.im/post/5a44b740f265da432e5c4fae

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值