| xqd
@@ -0,0 +1,81 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+# -*- coding: UTF-8 -*-
|
|
|
+
|
|
|
+import os
|
|
|
+import os.path
|
|
|
+import click
|
|
|
+import tinify
|
|
|
+
|
|
|
+
|
|
|
+online_key_list = [
|
|
|
+ "sq5RzZVjHxVKRN0CHSBn659XPb67PyMl",
|
|
|
+ "rcj2WmWcPZGMDbmwDXJ69XQKGhyr6mCw",# 可以继续添加 防止一个key不够
|
|
|
+]
|
|
|
+online_key_list_iter = iter(online_key_list)
|
|
|
+online_key = next(online_key_list_iter)
|
|
|
+
|
|
|
+version = "1.0.1" # 版本
|
|
|
+
|
|
|
+# 压缩的核心
|
|
|
+def compress_core(inputFile, outputFile, img_width):
|
|
|
+ global online_key
|
|
|
+ compresskey = online_key
|
|
|
+ tinify.key = compresskey
|
|
|
+ print "file = %s" % inputFile
|
|
|
+ try:
|
|
|
+ source = tinify.from_file(inputFile)
|
|
|
+ if img_width is not -1:
|
|
|
+ resized = source.resize(method="scale", width=img_width)
|
|
|
+ resized.to_file(outputFile)
|
|
|
+ else:
|
|
|
+ source.to_file(outputFile)
|
|
|
+ except tinify.AccountError, e:
|
|
|
+
|
|
|
+ online_key = next(online_key_list_iter)
|
|
|
+ compress_core(inputFile, outputFile, img_width) # 递归方法 继续读取
|
|
|
+ except tinify.ClientError, e:
|
|
|
+ print(e)
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+# 仅压缩指定文件
|
|
|
+def compress_file(inputFile, width):
|
|
|
+ print "compress_file-------------------------------------"
|
|
|
+ if not os.path.isfile(inputFile):
|
|
|
+ print "这不是一个文件,请输入文件的正确路径!"
|
|
|
+ return
|
|
|
+
|
|
|
+ basename = os.path.basename(inputFile)
|
|
|
+ fileName, fileSuffix = os.path.splitext(basename)
|
|
|
+ if fileSuffix == '.png' or fileSuffix == '.jpg' or fileSuffix == '.jpeg':
|
|
|
+ compress_core(inputFile, inputFile, width)
|
|
|
+ else:
|
|
|
+ print "不支持该文件类型!"
|
|
|
+
|
|
|
+
|
|
|
+@click.command()
|
|
|
+@click.option('-d', "--dir", type=str, default='/', help="压缩文件夹下所有文件")
|
|
|
+@click.option('-f', "--file", type=str, default=None, help="单个文件压缩")
|
|
|
+@click.option('-s', "--size", type=str, default='1024k', help="需要压缩的文件大小")
|
|
|
+@click.option('-w', "--width", type=int, default=-1, help="图片宽度,默认不变")
|
|
|
+def run(dir, file, width, size):
|
|
|
+ if file is not None:
|
|
|
+ compress_file(file, width) # 仅压缩一个文件
|
|
|
+ pass
|
|
|
+ elif dir is not None:
|
|
|
+ find_path = "find " + dir + " -regex '.*\(jpg\|JPG\|png\|PNG\|jpeg\)' -type f -size +" + size + " | sort -nr"
|
|
|
+ # print(find_path)
|
|
|
+ result = os.popen(find_path).read().split('\n')
|
|
|
+
|
|
|
+ for item in result:
|
|
|
+ # print(item)
|
|
|
+ compress_file(item, width)
|
|
|
+ pass
|
|
|
+ pass
|
|
|
+ else:
|
|
|
+ print '请指定要压缩的文件或文件夹'
|
|
|
+ print "结束!"
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ run()
|