|
|
import streamlit as st |
|
|
from PIL import Image, ImageEnhance, ImageOps |
|
|
from io import BytesIO |
|
|
|
|
|
|
|
|
st.set_page_config(page_title="Image Editor", page_icon="π¨", layout="wide") |
|
|
st.title("π¨ Image Editor") |
|
|
st.write("Easily upload, enhance, and download your images with a variety of filters and adjustments.") |
|
|
|
|
|
|
|
|
st.sidebar.header("ποΈ Image Editing Options") |
|
|
|
|
|
|
|
|
uploaded_file = st.sidebar.file_uploader("π€ Upload an Image", type=["png", "jpg", "jpeg"]) |
|
|
if uploaded_file: |
|
|
|
|
|
col1, col2 = st.columns(2) |
|
|
with col1: |
|
|
st.header("Original Image") |
|
|
image = Image.open(uploaded_file) |
|
|
st.image(image, use_container_width=True) |
|
|
|
|
|
|
|
|
with col2: |
|
|
st.header("Edited Image") |
|
|
edited_image = image.copy() |
|
|
|
|
|
|
|
|
if st.sidebar.checkbox("π³ Convert to Grayscale"): |
|
|
edited_image = ImageOps.grayscale(edited_image) |
|
|
|
|
|
|
|
|
brightness = st.sidebar.slider("π‘ Brightness", 0.5, 2.0, 1.0) |
|
|
enhancer = ImageEnhance.Brightness(edited_image) |
|
|
edited_image = enhancer.enhance(brightness) |
|
|
|
|
|
|
|
|
contrast = st.sidebar.slider("ποΈ Contrast", 0.5, 2.0, 1.0) |
|
|
enhancer = ImageEnhance.Contrast(edited_image) |
|
|
edited_image = enhancer.enhance(contrast) |
|
|
|
|
|
|
|
|
sharpness = st.sidebar.slider("πͺ Sharpness", 0.5, 3.0, 1.0) |
|
|
enhancer = ImageEnhance.Sharpness(edited_image) |
|
|
edited_image = enhancer.enhance(sharpness) |
|
|
|
|
|
|
|
|
if st.sidebar.checkbox("πΌοΈ Add Border"): |
|
|
border_size = st.sidebar.slider("Border Size", 1, 50, 10) |
|
|
border_color = st.sidebar.color_picker("Border Color", "#000000") |
|
|
edited_image = ImageOps.expand(edited_image, border=border_size, fill=border_color) |
|
|
|
|
|
|
|
|
st.image(edited_image, use_container_width=True) |
|
|
|
|
|
|
|
|
buf = BytesIO() |
|
|
edited_image.save(buf, format="PNG") |
|
|
byte_im = buf.getvalue() |
|
|
st.download_button( |
|
|
label="π₯ Download Edited Image", |
|
|
data=byte_im, |
|
|
file_name="edited_image.png", |
|
|
mime="image/png", |
|
|
) |
|
|
else: |
|
|
st.info("π Upload an image to get started!") |