1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
from PIL import Image import os import tkinter as tk from tkinter import filedialog
size_ratio = 0.7
quality = 70
def batch_compress(srcPath, distPath):
for filename in os.listdir(srcPath): if not os.path.exists(distPath): os.makedirs(distPath)
srcFile = os.path.join(srcPath, filename) distFile = os.path.join(distPath, filename)
if os.path.isfile(srcFile): if(is_image(srcFile)): compression(srcFile,distFile) else: print (distFile + " 文件不是图片,跳过!") elif os.path.isdir(srcFile): batch_compress(srcFile, distFile)
def is_image(srcFile): if (srcFile.lower().endswith(('.bmp', '.dib','.gif', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff'))): return True else: return False
def compression(srcFile,distFile): try: srcImg = Image.open(srcFile) w, h = srcImg.size distImg = srcImg.resize((int(w * size_ratio), int(h * size_ratio)), Image.ANTIALIAS) distImg.save(distFile, quality=quality) print (distFile + " 压缩成功!") except Exception as e: print (distFile + " 压缩失败!异常信息:", e)
def chooseDir(): root = tk.Tk() root.withdraw() choose_dir_path = filedialog.askdirectory() if choose_dir_path is None or len(choose_dir_path) <= 0: print('没有任何选择,程序退出!') exit() print('您选择的目录:', choose_dir_path) return choose_dir_path
if __name__ == '__main__': print ("=================开始执行=================") choose_dir_path = chooseDir() batch_compress(choose_dir_path, choose_dir_path + "/dist") print ("=================执行结束=================") print ("压缩后的图片已经保存到:" + choose_dir_path + "/dist")
|