Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
import streamlit as st
|
2 |
-
from PIL import Image, ImageEnhance, ImageFilter, ImageOps, ImageDraw
|
3 |
import numpy as np
|
4 |
import io
|
5 |
|
@@ -12,7 +12,7 @@ uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])
|
|
12 |
if uploaded_file:
|
13 |
# Load image
|
14 |
img = Image.open(uploaded_file).convert("RGBA")
|
15 |
-
st.image(img, caption="Original Image",
|
16 |
|
17 |
# Sidebar Options
|
18 |
st.sidebar.title("Editing Options")
|
@@ -38,29 +38,33 @@ if uploaded_file:
|
|
38 |
st.sidebar.header("Background Color")
|
39 |
bg_color = st.sidebar.color_picker("Pick a Background Color", "#FFFFFF")
|
40 |
bg_layer = Image.new("RGBA", img_rotated.size, bg_color)
|
41 |
-
|
|
|
|
|
|
|
|
|
42 |
|
43 |
# Filters
|
44 |
st.sidebar.header("Filters")
|
45 |
filters = st.sidebar.selectbox("Choose a filter", ["None", "Grayscale", "Sepia", "Negative", "Blur", "Contour", "Detail", "Emboss"])
|
46 |
if filters == "Grayscale":
|
47 |
-
img_filtered =
|
48 |
elif filters == "Sepia":
|
49 |
-
sepia_filter = np.array(
|
50 |
sepia = np.dot(sepia_filter, [0.393, 0.769, 0.189]).clip(0, 255).astype("uint8")
|
51 |
img_filtered = Image.fromarray(sepia).convert("RGBA")
|
52 |
elif filters == "Negative":
|
53 |
-
img_filtered = ImageOps.invert(
|
54 |
elif filters == "Blur":
|
55 |
-
img_filtered =
|
56 |
elif filters == "Contour":
|
57 |
-
img_filtered =
|
58 |
elif filters == "Detail":
|
59 |
-
img_filtered =
|
60 |
elif filters == "Emboss":
|
61 |
-
img_filtered =
|
62 |
else:
|
63 |
-
img_filtered =
|
64 |
|
65 |
# Adjustments
|
66 |
st.sidebar.header("Adjustments")
|
@@ -83,7 +87,7 @@ if uploaded_file:
|
|
83 |
img_resized_rgb = img_resized.convert("RGB")
|
84 |
|
85 |
# Display Final Image
|
86 |
-
st.image(img_resized, caption="Edited Image",
|
87 |
|
88 |
# Download Button
|
89 |
st.sidebar.header("Download")
|
|
|
1 |
import streamlit as st
|
2 |
+
from PIL import Image, ImageEnhance, ImageFilter, ImageOps, ImageDraw
|
3 |
import numpy as np
|
4 |
import io
|
5 |
|
|
|
12 |
if uploaded_file:
|
13 |
# Load image
|
14 |
img = Image.open(uploaded_file).convert("RGBA")
|
15 |
+
st.image(img, caption="Original Image", use_container_width=True)
|
16 |
|
17 |
# Sidebar Options
|
18 |
st.sidebar.title("Editing Options")
|
|
|
38 |
st.sidebar.header("Background Color")
|
39 |
bg_color = st.sidebar.color_picker("Pick a Background Color", "#FFFFFF")
|
40 |
bg_layer = Image.new("RGBA", img_rotated.size, bg_color)
|
41 |
+
img_with_bg = Image.alpha_composite(bg_layer, img_rotated)
|
42 |
+
|
43 |
+
# Ensure RGBA transparency
|
44 |
+
if img_with_bg.mode != "RGBA":
|
45 |
+
img_with_bg = img_with_bg.convert("RGBA")
|
46 |
|
47 |
# Filters
|
48 |
st.sidebar.header("Filters")
|
49 |
filters = st.sidebar.selectbox("Choose a filter", ["None", "Grayscale", "Sepia", "Negative", "Blur", "Contour", "Detail", "Emboss"])
|
50 |
if filters == "Grayscale":
|
51 |
+
img_filtered = img_with_bg.convert("L").convert("RGBA")
|
52 |
elif filters == "Sepia":
|
53 |
+
sepia_filter = np.array(img_with_bg)[:, :, :3]
|
54 |
sepia = np.dot(sepia_filter, [0.393, 0.769, 0.189]).clip(0, 255).astype("uint8")
|
55 |
img_filtered = Image.fromarray(sepia).convert("RGBA")
|
56 |
elif filters == "Negative":
|
57 |
+
img_filtered = ImageOps.invert(img_with_bg.convert("RGB")).convert("RGBA")
|
58 |
elif filters == "Blur":
|
59 |
+
img_filtered = img_with_bg.filter(ImageFilter.BLUR)
|
60 |
elif filters == "Contour":
|
61 |
+
img_filtered = img_with_bg.filter(ImageFilter.CONTOUR)
|
62 |
elif filters == "Detail":
|
63 |
+
img_filtered = img_with_bg.filter(ImageFilter.DETAIL)
|
64 |
elif filters == "Emboss":
|
65 |
+
img_filtered = img_with_bg.filter(ImageFilter.EMBOSS)
|
66 |
else:
|
67 |
+
img_filtered = img_with_bg
|
68 |
|
69 |
# Adjustments
|
70 |
st.sidebar.header("Adjustments")
|
|
|
87 |
img_resized_rgb = img_resized.convert("RGB")
|
88 |
|
89 |
# Display Final Image
|
90 |
+
st.image(img_resized, caption="Edited Image", use_container_width=True)
|
91 |
|
92 |
# Download Button
|
93 |
st.sidebar.header("Download")
|