tinyimg.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. import os
  4. import os.path
  5. import click
  6. import tinify
  7. online_key_list = [
  8. "eCaBl5SWbQaAJbT2MX3xnFzvHfLZA93O",
  9. "pPgiVMQxqFEExdAGwQI6nFlLKqtYlruz",
  10. "1DkU3Rp61yTi683OOvsd3daw9kVEqZf0",
  11. "PUxtVdhYtodwO4jC7d6I4VdsEyDx37mw",
  12. "fp1VyXlzPWQgJyLN7JRWYvgLjtkqSYvH",
  13. "nXNH4VFVjvPJtkDytSynSCnY0G1FmYwh",
  14. "ZhjfRpjGvh7txM90WJyj9tkRfkwKGNcC",
  15. "F79DPN8vNhx2wc40cBg60qJ4h3SvXyV8",
  16. "y48xStsV3tjQ6mw6yYk5gXVBlSGKgMWs",
  17. "G0t57lLwWHkS5nK2RqPPsQCP7WZP6lGP",
  18. "dpls8PYG8SpZYZxfzybB4FGYK1FV1qZv",
  19. "sq5RzZVjHxVKRN0CHSBn659XPb67PyMl",
  20. "rcj2WmWcPZGMDbmwDXJ69XQKGhyr6mCw",# 可以继续添加 防止一个key不够
  21. "lC3jHypLlbSCrpCCL14qTNb960kTnbkf",# m@swz.com
  22. "pmYS1vP6nHhRYmZlGnmlCMlsBSrf1CVs",# 244591203@qq.com
  23. "NL7qKdJQ7LkY0N57xm8w9PF5QCc1Krq0",# mengmengde1@qq.com
  24. "THrhX541L3CGNZV0z3xw1n1qzd0tHkm8",# mengmengde1@qq.com
  25. "9kznMYZh85fHtyXsB6RRnyddX9qg7mQ4",# 18981831779@qq.com
  26. "F0skt4C4MlmpF1YzySx6VBcdjlDx1Ky3",# yy@9026.com
  27. "XbY1rqS40Mr84nZ8bBJtvS3Z98gCclFJ",# jy@9026.com
  28. "8m0H7g1rvD0YpxD6FTcGFjdFw774S4fB",# zp@9026.com
  29. "4V5zXlPv7kKZ0K19yDkhzMFs2pF3pHBw",# ds@9026.com
  30. "Rw0LGrg3Xz6fwHJJXLHZ72gVdsmhFf0j",# qy@9026.com
  31. "c3hpP9831BHhMXCjx1lq2gxvtxLzlYTc",# waimai@9026.com
  32. "h4jN0rrNSKMG1Yg3PNZLhJx1zpdMyB5D",# xh@9026.com
  33. "K02ZDM62xgNPh4pxxMrvwY19p1QL1kL2",# xs@9026.com
  34. "KjSlVcxRwq3LxCn68vfFlnKPlmH0yTV7",# wx@9026.com
  35. "YSnrC3DBGQqBDgS868BRs8dyzW6p9M1t",# qc@9026.com
  36. ]
  37. online_key_list_iter = iter(online_key_list)
  38. online_key = next(online_key_list_iter)
  39. version = "1.0.1" # 版本
  40. # 压缩的核心
  41. def compress_core(inputFile, outputFile, img_width):
  42. global online_key
  43. compresskey = online_key
  44. tinify.key = compresskey
  45. print "file = %s" % inputFile
  46. try:
  47. source = tinify.from_file(inputFile)
  48. if img_width is not -1:
  49. resized = source.resize(method="scale", width=img_width)
  50. resized.to_file(outputFile)
  51. else:
  52. source.to_file(outputFile)
  53. except tinify.AccountError, e:
  54. online_key = next(online_key_list_iter)
  55. compress_core(inputFile, outputFile, img_width) # 递归方法 继续读取
  56. except tinify.ClientError, e:
  57. print(e)
  58. pass
  59. # 仅压缩指定文件
  60. def compress_file(inputFile, width):
  61. print "compress_file-------------------------------------"
  62. if not os.path.isfile(inputFile):
  63. print "这不是一个文件,请输入文件的正确路径!"
  64. return
  65. basename = os.path.basename(inputFile)
  66. fileName, fileSuffix = os.path.splitext(basename)
  67. if fileSuffix == '.png' or fileSuffix == '.jpg' or fileSuffix == '.jpeg':
  68. compress_core(inputFile, inputFile, width)
  69. else:
  70. print "不支持该文件类型!"
  71. @click.command()
  72. @click.option('-d', "--dir", type=str, default='/', help="压缩文件夹下所有文件")
  73. @click.option('-f', "--file", type=str, default=None, help="单个文件压缩")
  74. @click.option('-s', "--size", type=str, default='1024k', help="需要压缩的文件大小")
  75. @click.option('-w', "--width", type=int, default=-1, help="图片宽度,默认不变")
  76. def run(dir, file, width, size):
  77. if file is not None:
  78. compress_file(file, width) # 仅压缩一个文件
  79. pass
  80. elif dir is not None:
  81. find_path = "find " + dir + " -regex '.*\(jpg\|JPG\|png\|PNG\|jpeg\)' -type f -size +" + size + " | sort -nr"
  82. # print(find_path)
  83. result = os.popen(find_path).read().split('\n')
  84. for item in result:
  85. # print(item)
  86. compress_file(item, width)
  87. pass
  88. pass
  89. else:
  90. print '请指定要压缩的文件或文件夹'
  91. print "结束!"
  92. if __name__ == "__main__":
  93. run()