1+ import os
2+ import sys
3+ import time
4+ import subprocess
5+ import tkinter as tk
6+ from PIL import Image
7+ from tkinter import filedialog
8+
9+ #Config
10+ quality_param = 5
11+
12+ menu = tk .Tk ()
13+ menu .title ("Image Compressor" )
14+ #Window dimensions
15+ width = 300
16+ height = 200
17+ #Center
18+ menu .geometry (f"{ width } x{ height } +{ int (menu .winfo_screenwidth ()/ 2 - width / 2 )} +{ int (menu .winfo_screenheight ()/ 2 - height / 2 )} " )
19+
20+ #Variables to store the inputs
21+ input_folder = ""
22+ output_folder = ""
23+ quality = ""
24+
25+ #Variables to check if values were introduced
26+ b_input = False
27+ b_output = False
28+ b_quality = False
29+
30+ #Functions to do OnClick
31+ def choose_input_folder ():
32+ global input_folder , b_input
33+ input_folder = filedialog .askdirectory ()
34+ b_input = True
35+ def choose_output_folder ():
36+ global output_folder , b_output
37+ output_folder = filedialog .askdirectory ()
38+ b_output = True
39+ def enter ():
40+ global b_quality , quality
41+ if b_input == False :
42+ label_input .config (fg = "red" )
43+ else :
44+ label_input .config (fg = "black" )
45+ if b_output == False :
46+ label_output .config (fg = "red" )
47+ else :
48+ label_output .config (fg = "black" )
49+ quality = entry_quality .get ()
50+ if not quality .isdigit () or int (quality ) > 95 :
51+ label_quality .config (fg = "red" )
52+ return
53+ else :
54+ label_quality .config (fg = "black" )
55+ b_quality = True
56+ if (b_input and b_output and b_quality ):
57+ menu .destroy ()
58+
59+ #Create widgets
60+ label_input = tk .Label (menu , text = "Input folder:" )
61+ label_output = tk .Label (menu , text = "Output folder:" )
62+ label_quality = tk .Label (menu , text = "Compression quality (0-95):" )
63+ button_input = tk .Button (menu , text = "Choose folder" , command = choose_input_folder )
64+ button_output = tk .Button (menu , text = "Choose folder" , command = choose_output_folder )
65+ entry_quality = tk .Entry (menu )
66+ button_enter = tk .Button (menu , text = "Compress" , command = enter )
67+ entry_quality .insert (0 , "5" )
68+
69+ #Pack widgets
70+ label_input .pack ()
71+ button_input .pack ()
72+ label_output .pack ()
73+ button_output .pack ()
74+ label_quality .pack ()
75+ entry_quality .pack ()
76+ button_enter .pack ()
77+
78+ menu .mainloop ()
79+
80+ print ("Input folder:" , input_folder )
81+ print ("Output folder:" , output_folder )
82+ print ("Quality:" , quality )
83+
84+ exe_path = os .path .dirname (sys .executable )
85+
86+ if (b_input and b_output and b_quality ):
87+ print ("#####Running Script#####" )
88+
89+ #Directory checks
90+ if (not os .path .isdir (input_folder ) or not os .path .exists (input_folder )):
91+ print ("WARNING: Directory: " + input_folder + " doesn't exist or is not a directory" )
92+ input_folder = os .getcwd () + input_folder
93+ print ("Using: " + input_folder )
94+ if (not os .path .isdir (input_folder ) or not os .path .exists (input_folder )):
95+ print ("ERROR: Directory: " + input_folder + " folder doesn't exist or is not a directory" )
96+ sys .exit (1 )
97+ if (not os .path .exists (output_folder )):
98+ print ("WARNING: \" " + output_folder + "\" doesn't exist." )
99+ if (not os .path .exists (os .getcwd () + output_folder )):
100+ print ("WARNING: \" " + os .getcwd () + output_folder + "\" doesn't exist. Creating folder..." )
101+ os .mkdir (output_folder )
102+ print ("Created: " + output_folder )
103+ print ("Using: " + input_folder )
104+
105+ #Conversion
106+ print ("Quality value set to: " , quality )
107+ inFiles = os .listdir (input_folder )
108+ for img in inFiles :
109+ in_path_img = input_folder + "/" + img
110+ out_path_img = output_folder + "/" + img
111+ try :
112+ img = Image .open (in_path_img )
113+ img .save (out_path_img , optimize = True , quality = quality )
114+ except Exception as e :
115+ print ("An exception occurred: {}" .format (e ))
116+
117+ else :
118+ print ("#####ABORTED#####" )
119+
120+ time .sleep (2 ) #Let results be known
121+ print ("Compression completed" )
0 commit comments