diff options
| author | Debulois Quentin <quentin.debulois@gmail.com> | 2020-09-17 08:40:49 +0200 |
|---|---|---|
| committer | Debulois Quentin <quentin.debulois@gmail.com> | 2020-09-17 08:40:49 +0200 |
| commit | 1050e54ea530326fb4288a56c3e2ee4781f569b5 (patch) | |
| tree | 32c09ddc78591d093092c5a17081c0ed2ff14027 | |
| parent | 7e375df5b11da3175b2e173e3ef40667b0d28f06 (diff) | |
Création de fichier en vu de la POO (convertisseur & config)
| -rw-r--r-- | Redim/config.py | 25 | ||||
| -rw-r--r-- | Redim/convertisseur.py | 88 | ||||
| -rw-r--r-- | Redim/main.py | 136 |
3 files changed, 125 insertions, 124 deletions
diff --git a/Redim/config.py b/Redim/config.py new file mode 100644 index 0000000..2634ded --- /dev/null +++ b/Redim/config.py @@ -0,0 +1,25 @@ +import json + +class config(): + def sauvegarde(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final): + dictionnaire = { + "dimensions" : [[largeur1, hauteur1], [largeur2,hauteur2]], + "background_color" : background_color, + "format_final" : format_final + } + if not isdir(json_path): + mkdir(json_path) + with open(join(json_path, "config_redim"), "w") as f: + json.dump(dictionnaire, f) + + def lecture(json_path): + with open(join(json_path, "config_redim"), "r") as f: + dictionnaire = json.load(f) + largeur1 = dictionnaire["dimensions"][0][0] + hauteur1 = dictionnaire["dimensions"][0][1] + largeur2 = dictionnaire["dimensions"][1][0] + hauteur2 = dictionnaire["dimensions"][1][1] + background_color = dictionnaire["background_color"] + format_final = dictionnaire["format_final"] + return largeur1, hauteur1, largeur2, hauteur2, background_color, format_final + diff --git a/Redim/convertisseur.py b/Redim/convertisseur.py new file mode 100644 index 0000000..2a7ce70 --- /dev/null +++ b/Redim/convertisseur.py @@ -0,0 +1,88 @@ +from PIL.Image import ANTIALIAS +from PIL.Image import new as image_new +from PIL.Image import open as image_open + + +class Redim(): + def __init__(self, formats_acceptes): + self.formats_acceptes = formats_acceptes + + def start(self, dossier, larg, haut, background_color, format_final): + if dossier == "": + print(" >>>ERREUR<<< : Aucun dossier selectionne.") + return + if isdir(dossier): + liste_fichier, dossier_sauvegarde = self.listage_fichiers_et_dossiers(dossier, larg) + self.main(liste_fichier, dossier_sauvegarde, larg, haut, background_color, format_final) + else: + print(" >>>ERREUR<<< : Le dossier n'existe plus.") + + def listage_fichiers_et_dossiers(self, dossier, larg): + liste_fichier = [] + dossier_sauvegarde = join(dossier, str(larg)) + if not isdir(dossier_sauvegarde): + mkdir(dossier_sauvegarde) + for nom in listdir(dossier): + if isfile(join(dossier, nom)): + if join(dossier, nom).rsplit(".", 1)[-1] in self.formats_acceptes: + liste_fichier.append([join(dossier, nom), nom]) + return liste_fichier, dossier_sauvegarde + + def suppression_de_alpha(self, img, background_color): + img = img.convert("RGBA") + if img.mode in ("RGBA", "LA"): + fond = image_new(img.mode[:-1], img.size, background_color) + fond.paste(img, img.split()[-1]) + img = fond + img.convert("RGB") + return img + + def redimensionnement(self, img, larg, haut): + if (img.size[0] >= larg) or (img.size[1] >= haut): + img.thumbnail((larg, haut), ANTIALIAS) + elif (img.size[0] / img.size[1]) <= (larg / haut): + nouvelle_larg = int(haut * img.size[0] / img.size[1]) + img = img.resize((nouvelle_larg, haut), ANTIALIAS) + else: + nouvelle_haut = int(larg * img.size[1] / img.size[0] ) + img = img.resize((larg, nouvelle_haut), ANTIALIAS) + return img + + def rennomage(self, origine_nom, larg, format_final): + charcters_indesirable = ("(", ")", "[", "]", "{", "}","'", "#", + "&","$","£", "¤", "€", "`", "^", "°", "¨", + "@", "!", ",", "~", "%", ";", "µ", "§") + charcters_underscore = (" ", "-") + nouveau_nom = origine_nom + for i in charcters_indesirable: + nouveau_nom = nouveau_nom.replace(i, "") + for i in charcters_underscore: + nouveau_nom = nouveau_nom.replace(i, "_") + return nouveau_nom.lower() + "_modif_" + str(larg) + format_final + + def main(self, liste_fichier, dossier_sauvegarde, larg, haut, background_color, format_final): + for nom in liste_fichier: + try: + print(" [+] Travail sur :", nom[1]) + img = image_open(nom[0]) + print(" >> Taille initiale :", img.size[0] ,"x" ,img.size[1], "px") + if nom[1].rsplit(".", 1)[-1] in ("png", "webp"): + img = self.suppression_de_alpha(img, background_color) + img = self.redimensionnement(img, larg, haut) + print(" >> Taille apres redimensionnement :", img.size[0] ,"x" ,img.size[1], "px") + nouveau_nom = self.rennomage(nom[1].rsplit(".", 1)[0], larg, format_final) + fond = image_new("RGB", (larg, haut), background_color) + fond.paste(img, ((larg - img.size[0]) // 2, (haut - img.size[1]) // 2)) + if isfile(join(dossier_sauvegarde, nouveau_nom)): + adverbes_multplicatifs = ("_bis", "_ter", "_quater", "_quinquies", "_sexies", "_septies") + nom_deja_present = nouveau_nom + iteration = 0 + while isfile(join(dossier_sauvegarde, nom_deja_present)): + nom_deja_present = nouveau_nom.rsplit(".", 1)[0] + adverbes_multplicatifs[iteration] + nom_deja_present += format_final + iteration += 1 + fond.save(join(dossier_sauvegarde, nom_deja_present)) + else: + fond.save(join(dossier_sauvegarde, nouveau_nom)) + except Exception as e: + print(" >>>ERREUR<<< : ", e) diff --git a/Redim/main.py b/Redim/main.py index 4dc4a49..6c22f62 100644 --- a/Redim/main.py +++ b/Redim/main.py @@ -1,110 +1,20 @@ #!/usr/bin/python -""" -Nécessite Pillow & PyQt5 -""" - import json from os import system, listdir, mkdir, environ, getenv from os.path import join, isfile, isdir, getmtime from sys import platform, exit from time import time from shutil import rmtree -from PIL.Image import ANTIALIAS -from PIL.Image import new as image_new -from PIL.Image import open as image_open from PyQt5.QtWidgets import QFileDialog, QApplication, QWidget +from config import * +from convertisseur import * -class Redim(): - def __init__(self, formats_acceptes): - self.formats_acceptes = formats_acceptes - - def start(self, dossier, larg, haut, background_color, format_final): - if dossier == "": - print(" >>>ERREUR<<< : Aucun dossier selectionne.") - return - if isdir(dossier): - liste_fichier, dossier_sauvegarde = self.listage_fichiers_et_dossiers(dossier, larg) - self.main(liste_fichier, dossier_sauvegarde, larg, haut, background_color, format_final) - else: - print(" >>>ERREUR<<< : Le dossier n'existe plus.") - - def listage_fichiers_et_dossiers(self, dossier, larg): - liste_fichier = [] - dossier_sauvegarde = join(dossier, str(larg)) - if not isdir(dossier_sauvegarde): - mkdir(dossier_sauvegarde) - for nom in listdir(dossier): - if isfile(join(dossier, nom)): - if join(dossier, nom).rsplit(".", 1)[-1] in self.formats_acceptes: - liste_fichier.append([join(dossier, nom), nom]) - return liste_fichier, dossier_sauvegarde - - def suppression_de_alpha(self, img, background_color): - img = img.convert("RGBA") - if img.mode in ("RGBA", "LA"): - fond = image_new(img.mode[:-1], img.size, background_color) - fond.paste(img, img.split()[-1]) - img = fond - img.convert("RGB") - return img - - def redimensionnement(self, img, larg, haut): - if (img.size[0] >= larg) or (img.size[1] >= haut): - img.thumbnail((larg, haut), ANTIALIAS) - elif (img.size[0] / img.size[1]) <= (larg / haut): - nouvelle_larg = int(haut * img.size[0] / img.size[1]) - img = img.resize((nouvelle_larg, haut), ANTIALIAS) - else: - nouvelle_haut = int(larg * img.size[1] / img.size[0] ) - img = img.resize((larg, nouvelle_haut), ANTIALIAS) - return img - - def rennomage(self, origine_nom, larg, format_final): - charcters_indesirable = ("(", ")", "[", "]", "{", "}","'", "#", - "&","$","£", "¤", "€", "`", "^", "°", "¨", - "@", "!", ",", "~", "%", ";", "µ", "§") - charcters_underscore = (" ", "-") - nouveau_nom = origine_nom - for i in charcters_indesirable: - nouveau_nom = nouveau_nom.replace(i, "") - for i in charcters_underscore: - nouveau_nom = nouveau_nom.replace(i, "_") - return nouveau_nom.lower() + "_modif_" + str(larg) + format_final - - def main(self, liste_fichier, dossier_sauvegarde, larg, haut, background_color, format_final): - for nom in liste_fichier: - try: - print(" [+] Travail sur :", nom[1]) - img = image_open(nom[0]) - print(" >> Taille initiale :", img.size[0] ,"x" ,img.size[1], "px") - if nom[1].rsplit(".", 1)[-1] in ("png", "webp"): - img = self.suppression_de_alpha(img, background_color) - img = self.redimensionnement(img, larg, haut) - print(" >> Taille apres redimensionnement :", img.size[0] ,"x" ,img.size[1], "px") - nouveau_nom = self.rennomage(nom[1].rsplit(".", 1)[0], larg, format_final) - fond = image_new("RGB", (larg, haut), background_color) - fond.paste(img, ((larg - img.size[0]) // 2, (haut - img.size[1]) // 2)) - if isfile(join(dossier_sauvegarde, nouveau_nom)): - adverbes_multplicatifs = ("_bis", "_ter", "_quater", "_quinquies", "_sexies", "_septies") - nom_deja_present = nouveau_nom - iteration = 0 - while isfile(join(dossier_sauvegarde, nom_deja_present)): - nom_deja_present = nouveau_nom.rsplit(".", 1)[0] + adverbes_multplicatifs[iteration] - nom_deja_present += format_final - iteration += 1 - fond.save(join(dossier_sauvegarde, nom_deja_present)) - else: - fond.save(join(dossier_sauvegarde, nouveau_nom)) - except Exception as e: - print(" >>>ERREUR<<< : ", e) - - def nettoyage_pyinstaller(self): - for i in listdir(environ["TMP"]): - if i.startswith("_MEI") and isdir(i) and (int(getmtime(join(environ["TMP"], i))) < (time() - 86400)): - rmtree(join(environ["TMP"], i)) - +def nettoyage_pyinstaller(self): + for i in listdir(environ["TMP"]): + if i.startswith("_MEI") and isdir(i) and (int(getmtime(join(environ["TMP"], i))) < (time() - 86400)): + rmtree(join(environ["TMP"], i)) def reset_screen(banner): if platform != "linux": @@ -113,28 +23,6 @@ def reset_screen(banner): system("clear") print(*banner) -def sauvegarde_json(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final): - dictionnaire = { - "dimensions" : [[largeur1, hauteur1], [largeur2,hauteur2]], - "background_color" : background_color, - "format_final" : format_final - } - if not isdir(json_path): - mkdir(json_path) - with open(join(json_path, "config_redim"), "w") as f: - json.dump(dictionnaire, f) - -def lecture_json(json_path): - with open(join(json_path, "config_redim"), "r") as f: - dictionnaire = json.load(f) - largeur1 = dictionnaire["dimensions"][0][0] - hauteur1 = dictionnaire["dimensions"][0][1] - largeur2 = dictionnaire["dimensions"][1][0] - hauteur2 = dictionnaire["dimensions"][1][1] - background_color = dictionnaire["background_color"] - format_final = dictionnaire["format_final"] - return largeur1, hauteur1, largeur2, hauteur2, background_color, format_final - if __name__ == "__main__": largeur1 = 500 hauteur1 = 350 @@ -149,9 +37,9 @@ if __name__ == "__main__": while True: redim = Redim(formats_acceptes) if not isfile(join(json_path, "config_redim")): - sauvegarde_json(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final) + config.sauvegarde(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final) else: - largeur1, hauteur1, largeur2, hauteur2, background_color, format_final = lecture_json(json_path) + largeur1, hauteur1, largeur2, hauteur2, background_color, format_final = config.lecture(json_path) if platform != "linux": redim.nettoyage_pyinstaller() banner = ( @@ -212,7 +100,7 @@ if __name__ == "__main__": hauteur1 = dimensions[1] largeur2 = dimensions[2] hauteur2 = dimensions[3] - sauvegarde_json(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final) + config.sauvegarde(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final) print("\n[-] Modification effectue.") input("\n[-] fin, appuyer sur \'entrer\' pour recommencer .") break @@ -233,7 +121,7 @@ if __name__ == "__main__": except: print(" >>>ERREUR<<< Valeur incorrecte.") background_color = nouveau_background_color - sauvegarde_json(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final) + config.sauvegarde(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final) print("\n[-] Modification effectue.") input("\n[-] fin, appuyer sur \'entrer\' pour recommencer .") break @@ -249,7 +137,7 @@ if __name__ == "__main__": nouveau_format = int(nouveau_format.strip()) if nouveau_format > 0: format_final = "." + formats_acceptes[nouveau_format - 1] - sauvegarde_json(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final) + config.sauvegarde(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final) print("\n[-] Modification effectue.") else: print(">>>ERREUR<<< Choix invalide.") @@ -268,7 +156,7 @@ if __name__ == "__main__": hauteur2 = 900 background_color = [255, 255, 255] format_final = ".webp" - sauvegarde_json(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final) + config.sauvegarde(json_path, largeur1, hauteur1, largeur2, hauteur2, background_color, format_final) print("\n[-] Modification effectue.") input("\n[-] fin, appuyer sur \'entrer\' pour recommencer .") break |
