# -*- coding: utf-8 -*-"""脚本功能说明:使用 tinypng,一键批量压缩指定文件(夹)所有文件"""import os
import sys
import tinifytinify.key = "你自己申请的 key" # AppKeydef get_file_dir(file):"""获取文件目录通用函数"""fullpath = os.path.abspath(os.path.realpath(file))return os.path.dirname(fullpath)def check_suffix(file_path):"""检查指定文件的后缀是否符合要求"""file_path_lower = file_path.lower()return (file_path_lower.endswith('.png')or file_path_lower.endswith('.jpg')or file_path_lower.endswith('.jpeg'))def compress_by_tinypng(input_file):"""使用 tinypng 进行压缩,中文前面的 u 是为了兼容 py2.7"""if not check_suffix(input_file):print(u'只支持png\\jpg\\jepg格式文件:' + input_file)returnfile_name = os.path.basename(input_file)output_path = os.path.join(get_file_dir(sys.argv[0]), 'tinypng')output_file = os.path.join(output_path, file_name)print(output_file)if not os.path.isdir(output_path):os.makedirs(output_path)try:source = tinify.from_file(input_file)source.to_file(output_file)print(u'文件压缩成功:' + input_file)old_size = os.path.getsize(input_file)print(u'压缩前文件大小:%d 字节' % old_size)new_size = os.path.getsize(output_file)print(u'文件保存地址:%s' % output_file)print(u'压缩后文件大小:%d 字节' % new_size)print(u'压缩比: %d%%' % ((old_size - new_size) * 100 / old_size))except tinify.errors.AccountError:print(u'Key 使用量已超,请更新 Key,并使用命令[Usage] %s [filepath] [key]运行'% os.path.basename(sys.argv[0]))def check_path(input_path):"""如果输入的是文件则直接压缩,如果是文件夹则先遍历"""if os.path.isfile(input_path):compress_by_tinypng(input_path)elif os.path.isdir(input_path):dirlist = os.walk(input_path)for root, dirs, files in dirlist:for filename in files:compress_by_tinypng(os.path.join(root, filename))else:print(u'目标文件(夹)不存在,请确认后重试。')if __name__ == '__main__':len_param = len(sys.argv)if len_param != 2 and len_param != 3:print('[Usage] %s [filepath]' % os.path.basename(sys.argv[0]))elif len_param == 3:tinify.key = sys.argv[2]check_path(sys.argv[1])else:check_path(sys.argv[1])

安装 tinify 模块

python -m pip install tinify

申请 tinify key

到 https://tinypng.com/developers 申请自己的 key,每个 key 每个月可以压缩 500 个文件。

 执行脚本

带参数执行脚本即可。

带的第一个参数是必选的,可以是文件,也可以是文件夹。

第二个参数是可选的,自定义 key,如果输入了第三个参数,则优先使用自定义 key。

压缩后的文件,默认输出到当前脚本所在目录下的 tinypng 文件夹中,如果要输出到其他位置,可以自行修改脚本实现

Python tinypng 压缩脚本相关推荐

  1. php 批量压缩png,利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)...

    前言 本文主要给大家介绍的关于Python批量压缩png的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 1.需求 为什么会有这个需求?是因为游戏的资源大多是png图片,需要 ...

  2. 使用Python快速压缩目录中图片

    使用Python快速压缩目录中图片 脚本语言 #coding:utf-8 import Image import os import logging import sqlite3 from PIL i ...

  3. 使用Python批量压缩图片

    使用Python批量压缩图片 Python脚本 #coding:utf-8 import Image import os import os.path def picIsCorrect(fileSuf ...

  4. python gzip压缩_Python gzip –压缩解压缩

    python gzip压缩 Python gzip module provides a very simple way to compress and decompress files and wor ...

  5. python selenium脚本_怎样开始写第一个基于python的selenium脚本

    1.下载并安装python(http://www.python.org/geti/). 2.安装selenium(http://pypi.python.org/pypi/selenium)下载并解压缩 ...

  6. python读写压缩文件使用gzip和bz2

    python读写压缩文件使用gzip和bz2 #读取压缩文件 # gzip compression import gzip with gzip.open('somefile.gz', 'rt') as ...

  7. Linux oracle数据库自动备份自动压缩脚本代码

    Linux oracle数据库自动备份自动压缩脚本代码 Linux oracle数据库备份完成后可以自动压缩脚本代码. 复制代码代码如下: #!/bin/bash #backup.sh #edit: ...

  8. python自动化办公脚本下载-python自动化脚本

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 运维自动化,已经成为运维必不可少的一部分,下面附上自己写的监控nginx_stat ...

  9. 脚本编程语言python语言-python语言是脚本语言吗

    Python是一种编程语言还是脚本语言? Python是GuidoVanRossum开发的最著名的编程语言之一.Python在开发人员中很受欢迎,因为它具有清晰的语法和简单的代码,甚至对于初学者来说也 ...

  10. python打开指定文件-python打包压缩、读取指定目录下的指定类型文件

    下面通过代码给大家介绍python打包压缩指定目录下的指定类型文件,具体代码如下所示: import os import datetime import tarfile import fnmatch ...

最新文章

  1. AttributeError: ‘Tensor‘ object has no attribute ‘encoder‘
  2. HDU2682(最小生成树)
  3. 14.相同的树另一棵树的子树检查子树二叉树中的列表(教你们使用相同的套路快速解决这四道题)
  4. 如何绘制计算机软件程序流程图?
  5. 2019年用于自动化的5个最佳Java测试框架
  6. mybatis-plus实现自动填充数据如:数据库中createTime和updateTime
  7. 机器学习与计算机视觉(绘图)
  8. Windows Debugging之六
  9. Node.js丶Stream使用及常用方法
  10. 深入理解 Javascript 面向对象编程
  11. 生活广场远程预付费电能管理系统的设计与应用
  12. Python selenium长截屏
  13. esp8266_deauther第四篇
  14. IPSec:IKEv2协议详解
  15. CodeForces - 1144C Two Shuffled Sequences【优先队列】
  16. 基于springboot+bootstrap+mysql+redis搭建一套完整的权限架构【八】【完善整个项目】
  17. 网页 插件 html,HTML 插件
  18. Chrome浏览器突然无法打开的解决方法
  19. 【Java学习笔记】1:Java语言基础
  20. 出国留学,转计算机编程学习入门以及面试经验之一家之言

热门文章

  1. 两种办法解决外网资源下载速度过慢的问题
  2. 渠道为王:销售渠道建设3部曲 读后感
  3. postgresql触发器实例
  4. 数据结构1800题-错题集-第五章
  5. 路由守卫 Maximum call stack size exceeded
  6. 测试环境搭建-7:安装loadrunner提示此计算机上缺少vc2005_sp1_with_atl_fix_redist解决方法
  7. Html静态页面更新,解决浏览器缓存不更新问题
  8. 梦幻西游五虎将访谈系列:主策划小白
  9. attachEvent
  10. C++ 什么是句柄?为什么会有句柄?HANDLE