summaryrefslogtreecommitdiff
path: root/Redim/convertisseur.py
blob: 2a7ce70c5dacc18de5939a100748cda1dac81b9a (plain)
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
78
79
80
81
82
83
84
85
86
87
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)