File size: 6,871 Bytes
c15e744
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
import decimal
import os.path
from io import BytesIO
from os import path
from pathlib import Path

import numpy.random
from PIL.ImageFilter import *
from rembg import remove
import streamlit as s
from PIL import Image, ImageColor, ImageFilter
from aspose.imaging import RasterImage
import aspose.pycore as aspycore

s.set_page_config(page_title="BACKGROUND", page_icon=":book:", layout="centered", initial_sidebar_state="auto")
with open("style.css") as file_style:
    s.markdown(f"<style>{file_style.read()}</style>", unsafe_allow_html=True)

s.write("<h1 style='color:yellow;'>UNE NOUVELLE MANIERE DE MANUPULER LES IMAGES</h1>", unsafe_allow_html=True)
s.write("###### Vous avez marre de toujours utiliser Photoshop :dog: ! Mais oui, il fait ramer votre ordinateur. ")
s.write("###### Mais la solution, elle est là ! BACKGROUND vous ouvre ses porte.")
s.write("### Enlever l'arrière-plan de l'image")
s.sidebar.write("# :snake: Background :snake:")

col1, col2 = s.columns(2)

bordure = s.sidebar.number_input("Améliorer la bordure", min_value=0, max_value=400, value=220, step=5)
fond = s.sidebar.slider("Améliorer l'arrière-plan", min_value=0, max_value=100, value=15)
row1 = s.sidebar.container(border=True)
check = row1.checkbox("Activer le masque", value=False)
contoure_leger = row1.checkbox("Contour léger", value=False)
select_img_filtre = row1.selectbox("Filtres", options=(
    "Selectionner un filtre", "Flou panoramic", "Nettété", "Flou Gaussien", "Masquage flou"))

# On charge l'image
image_upload = s.file_uploader("Choississez une image", type=["png", "jpg", "jpeg"], accept_multiple_files=False)


def convert_img(image):
    buf = BytesIO()
    image.save(buf, format="PNG")
    byte_img = buf.getvalue()
    return byte_img


def fix_image(image):
    image = Image.open(image)

    # Ajout des éléments dans la colonne 1
    col1.write("### Image originale")
    col1.image(image)
    # Traiter l'image
    fixed = remove(image, alpha_matting=False, only_mask=check, alpha_matting_background_threshold=fond,
                   alpha_matting_foreground_threshold=bordure, post_process_mask=contoure_leger)

    # Affichage de l'image détourrée
    new_fixed = fixed
    if select_img_filtre != "Selectionner un filtre":

        if select_img_filtre == "Flou panoramic":
            blur_value = row1._number_input("Intensité du flou panaoramic :", min_value=0.0, max_value=100.0,
                                            value=10.0, step=5.0)
            fixed = convert_img(fixed.filter(GaussianBlur(radius=blur_value)))

            print("Blur")

        elif select_img_filtre == "Nettété":
            fixed = convert_img(fixed.filter(DETAIL))
            print("Détail")

        elif select_img_filtre == "Flou Gaussien":
            blur_value = row1._number_input("Intensité du flou gaussien :", min_value=0.0, max_value=100.0,
                                            value=20.0, step=2.0)
            fixed = convert_img(fixed.filter(BoxBlur(radius=blur_value)))



        elif select_img_filtre == "Masquage flou":
            blur_value = row1._number_input("Niveau du flou :", min_value=0, max_value=10,
                                            value=5, step=1)

            # le seuil contrôle le changement de luminosité minimum qui sera accentué
            lumiere_value = row1._number_input("Seuil de la luminosité:", min_value=0, max_value=30,
                                               value=3, step=1)
            # pourcentage de rayon de flou
            per_value = row1._number_input("Pourcentage de l'effet :", min_value=0, max_value=500,
                                           value=100, step=5)

            def hex_to_rgb(hex):
                """
                Utilisez une compréhension de liste en combinaison avec int()une notation de tranche de liste pour obtenir les composants RVB de la chaîne hexadécimale.
                Utilisez tuple()pour convertir la liste résultante en tuple.
                :param hex:
                :return:
                """
                return tuple(int(hex[i:i + 2], 16) for i in (0, 2, 4))

            fixed = convert_img(
                fixed.filter(UnsharpMask(radius=blur_value, percent=per_value, threshold=lumiere_value)))

    if select_img_filtre == "Flou panoramic":
        col2.write("### Image détourée avec Flou panoramic")

        col2.image(fixed)
        s.sidebar.markdown("\n")
        s.sidebar.download_button("Télécharger l'image", fixed, mime="image/png",
                                  file_name="image.png")

    elif select_img_filtre == "Nettété":
        col2.write("### Image détourée nette")

        col2.image(fixed)
        s.sidebar.markdown("\n")
        s.sidebar.download_button("Télécharger l'image", fixed, mime="image/png",
                                  file_name="image.png")
    elif select_img_filtre == "Flou Gaussien":
        col2.write("### Image détourée avec Flou Gaussien")

        col2.image(fixed)
        s.sidebar.markdown("\n")
        s.sidebar.download_button("Télécharger l'image", fixed, mime="image/png",
                                  file_name="image.png")
    elif select_img_filtre == "Masquage flou":
        col2.write("### Image détourée - Autres Effets")
        col2.image(fixed)
        s.sidebar.markdown("\n")
        s.sidebar.info(
            "Rendre les images plus claires et plus claires et spectaculaires en augmentant le contraste et en réduisant le bruit.")

        s.sidebar.download_button("Télécharger l'image", fixed, mime="image/png",
                                  file_name="image.png")

    else:
        col2.write("### Image détourée")

        col2.image(fixed)
        s.sidebar.markdown("\n")
        s.sidebar.download_button("Télécharger l'image", fixed.tobytes(), mime="image/png",
                                  file_name="image.png")
    # Information sur l'image
    s.markdown(f"#### Informations sur l'image :")
    s.markdown("\n")
    if select_img_filtre == "Selectionner un filtre":
        s.markdown(
            f"<p> Taille de l'image : {image.width} x {image.height}</p> <p>Mode avant : {image.mode} -  Mode après : {image.mode}</p>"
            f"<p>Format de l'image : {image.format}</p>"
            f"<p>Format ISO : {image.format_description}</p>", unsafe_allow_html=True)
        s.markdown(f"<p>Dimension bordure : {fixed.getbbox()}</p>", unsafe_allow_html=True)

    else:
        s.markdown(
            f"<p> Taille de l'image : {image.width} x {image.height}</p> <p>Mode avant : {image.mode}</p>"
            f"<p>Format de l'image : {image.format}</p>"
            f"<p>Format ISO : {image.format_description}</p>", unsafe_allow_html=True)


if image_upload is not None:
    fix_image(image_upload)
else:
    s.write("##### En attente d'une image uploadée !")