美文网首页程序员
利用 tinypng 的 api 批量压缩图片

利用 tinypng 的 api 批量压缩图片

作者: jackPan | 来源:发表于2017-07-17 15:47 被阅读0次
    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

    效果图如下:


    image.png

    相关文章

      网友评论

        本文标题:利用 tinypng 的 api 批量压缩图片

        本文链接:https://www.haomeiwen.com/subject/rcgfkxtx.html