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 !")
|