Spaces:
Running
Running
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
from PIL import Image, ImageEnhance, ImageFilter
|
3 |
+
import numpy as np
|
4 |
+
|
5 |
+
# App title
|
6 |
+
st.title("Image Editor App")
|
7 |
+
|
8 |
+
# Sidebar for options
|
9 |
+
st.sidebar.title("Editing Options")
|
10 |
+
|
11 |
+
# File uploader
|
12 |
+
uploaded_file = st.sidebar.file_uploader("Upload an image", type=["jpg", "jpeg", "png", "bmp", "tiff"])
|
13 |
+
|
14 |
+
if uploaded_file:
|
15 |
+
# Open the uploaded image
|
16 |
+
img = Image.open(uploaded_file)
|
17 |
+
st.image(img, caption="Uploaded Image", use_column_width=True)
|
18 |
+
|
19 |
+
# Image Editing Options
|
20 |
+
st.sidebar.header("Transformations")
|
21 |
+
resize_width = st.sidebar.slider("Resize Width", 50, img.width, img.width)
|
22 |
+
resize_height = st.sidebar.slider("Resize Height", 50, img.height, img.height)
|
23 |
+
rotation = st.sidebar.slider("Rotate", 0, 360, 0)
|
24 |
+
flip_horizontal = st.sidebar.checkbox("Flip Horizontally")
|
25 |
+
flip_vertical = st.sidebar.checkbox("Flip Vertically")
|
26 |
+
|
27 |
+
# Apply transformations
|
28 |
+
img_resized = img.resize((resize_width, resize_height))
|
29 |
+
img_rotated = img_resized.rotate(rotation, expand=True)
|
30 |
+
if flip_horizontal:
|
31 |
+
img_rotated = img_rotated.transpose(Image.FLIP_LEFT_RIGHT)
|
32 |
+
if flip_vertical:
|
33 |
+
img_rotated = img_rotated.transpose(Image.FLIP_TOP_BOTTOM)
|
34 |
+
|
35 |
+
# Image Enhancement
|
36 |
+
st.sidebar.header("Enhancements")
|
37 |
+
brightness = st.sidebar.slider("Brightness", 0.1, 3.0, 1.0)
|
38 |
+
contrast = st.sidebar.slider("Contrast", 0.1, 3.0, 1.0)
|
39 |
+
sharpness = st.sidebar.slider("Sharpness", 0.1, 3.0, 1.0)
|
40 |
+
|
41 |
+
enhancer_brightness = ImageEnhance.Brightness(img_rotated).enhance(brightness)
|
42 |
+
enhancer_contrast = ImageEnhance.Contrast(enhancer_brightness).enhance(contrast)
|
43 |
+
enhancer_sharpness = ImageEnhance.Sharpness(enhancer_contrast).enhance(sharpness)
|
44 |
+
|
45 |
+
# Filters
|
46 |
+
st.sidebar.header("Filters")
|
47 |
+
filters = st.sidebar.selectbox("Select Filter", ["None", "BLUR", "CONTOUR", "DETAIL", "EDGE_ENHANCE", "SHARPEN"])
|
48 |
+
if filters == "BLUR":
|
49 |
+
img_filtered = enhancer_sharpness.filter(ImageFilter.BLUR)
|
50 |
+
elif filters == "CONTOUR":
|
51 |
+
img_filtered = enhancer_sharpness.filter(ImageFilter.CONTOUR)
|
52 |
+
elif filters == "DETAIL":
|
53 |
+
img_filtered = enhancer_sharpness.filter(ImageFilter.DETAIL)
|
54 |
+
elif filters == "EDGE_ENHANCE":
|
55 |
+
img_filtered = enhancer_sharpness.filter(ImageFilter.EDGE_ENHANCE)
|
56 |
+
elif filters == "SHARPEN":
|
57 |
+
img_filtered = enhancer_sharpness.filter(ImageFilter.SHARPEN)
|
58 |
+
else:
|
59 |
+
img_filtered = enhancer_sharpness
|
60 |
+
|
61 |
+
# Display final image
|
62 |
+
st.image(img_filtered, caption="Edited Image", use_column_width=True)
|
63 |
+
|
64 |
+
# Download option
|
65 |
+
st.sidebar.header("Download")
|
66 |
+
img_filtered = img_filtered.convert("RGB")
|
67 |
+
img_bytes = img_filtered.tobytes()
|
68 |
+
st.sidebar.download_button("Download Edited Image", data=img_bytes, file_name="edited_image.jpg", mime="image/jpeg")
|
69 |
+
else:
|
70 |
+
st.info("Upload an image to start editing.")
|
71 |
+
|