Spaces:
Sleeping
Sleeping
import streamlit as st | |
from PIL import Image, ImageEnhance, ImageFilter | |
import numpy as np | |
import cv2 | |
import io | |
# Function to adjust brightness, contrast, saturation | |
def adjust_image(img, brightness=1.0, contrast=1.0, saturation=1.0): | |
enhancer = ImageEnhance.Brightness(img) | |
img = enhancer.enhance(brightness) | |
enhancer = ImageEnhance.Contrast(img) | |
img = enhancer.enhance(contrast) | |
enhancer = ImageEnhance.Color(img) | |
img = enhancer.enhance(saturation) | |
return img | |
# Function to apply grayscale filter | |
def apply_grayscale(img): | |
return img.convert("L") | |
# Function to apply blur effect | |
def apply_blur(img): | |
return img.filter(ImageFilter.GaussianBlur(radius=5)) | |
# Function to crop image | |
def crop_image(img, left, upper, right, lower): | |
return img.crop((left, upper, right, lower)) | |
# Function to cut a piece of the image | |
def cut_piece(img, x, y, width, height): | |
img_np = np.array(img) | |
cut_img = img_np[y:y+height, x:x+width] | |
return Image.fromarray(cut_img) | |
# Streamlit App UI | |
st.title("Image Editing App") | |
uploaded_file = st.file_uploader("Upload an image", type=["png", "jpg", "jpeg"]) | |
if uploaded_file is not None: | |
# Open the uploaded image | |
img = Image.open(uploaded_file) | |
st.image(img, caption="Uploaded Image", use_column_width=True) | |
# Adjust brightness, contrast, and saturation | |
st.sidebar.header("Adjust Image") | |
brightness = st.sidebar.slider("Brightness", 0.0, 2.0, 1.0) | |
contrast = st.sidebar.slider("Contrast", 0.0, 2.0, 1.0) | |
saturation = st.sidebar.slider("Saturation", 0.0, 2.0, 1.0) | |
img = adjust_image(img, brightness, contrast, saturation) | |
# Filters and effects | |
filter_option = st.sidebar.selectbox( | |
"Select a Filter", | |
["None", "Grayscale", "Blur"] | |
) | |
if filter_option == "Grayscale": | |
img = apply_grayscale(img) | |
elif filter_option == "Blur": | |
img = apply_blur(img) | |
# Crop and cut image functionality | |
crop_option = st.sidebar.checkbox("Crop Image") | |
if crop_option: | |
left = st.sidebar.slider("Left", 0, img.width, 0) | |
upper = st.sidebar.slider("Upper", 0, img.height, 0) | |
right = st.sidebar.slider("Right", left, img.width, img.width) | |
lower = st.sidebar.slider("Lower", upper, img.height, img.height) | |
img = crop_image(img, left, upper, right, lower) | |
cut_option = st.sidebar.checkbox("Cut a Piece of Image") | |
if cut_option: | |
x = st.sidebar.slider("X position", 0, img.width, 0) | |
y = st.sidebar.slider("Y position", 0, img.height, 0) | |
width = st.sidebar.slider("Width", 1, img.width - x, 100) | |
height = st.sidebar.slider("Height", 1, img.height - y, 100) | |
img = cut_piece(img, x, y, width, height) | |
# Display edited image | |
st.image(img, caption="Edited Image", use_column_width=True) | |
# Option to download edited image | |
buffered = io.BytesIO() | |
img.save(buffered, format="PNG") | |
st.download_button(label="Download Image", data=buffered.getvalue(), file_name="edited_image.png", mime="image/png") | |