KubraBashir commited on
Commit
45ca800
·
verified ·
1 Parent(s): 6055f94

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +76 -49
app.py CHANGED
@@ -1,71 +1,98 @@
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
-
 
1
  import streamlit as st
2
+ from PIL import Image, ImageEnhance, ImageFilter, ImageOps
3
  import numpy as np
4
 
5
+ # Title
6
+ st.title("Advanced Image Editor")
7
 
8
+ # Sidebar Header
9
  st.sidebar.title("Editing Options")
10
 
11
+ # Upload Image
12
+ uploaded_file = st.sidebar.file_uploader("Upload an Image", type=["jpg", "jpeg", "png"])
13
 
14
  if uploaded_file:
15
+ # Load the image
16
+ img = Image.open(uploaded_file).convert("RGBA") # Support transparency
17
+ st.image(img, caption="Original Image", use_column_width=True)
18
+
19
+ # Background Color Change
20
+ st.sidebar.header("Background Color")
21
+ bg_color = st.sidebar.color_picker("Pick a background color", "#FFFFFF")
22
+ background = Image.new("RGBA", img.size, bg_color)
23
+ img_with_bg = Image.alpha_composite(background, img)
24
+
25
+ # Image Transformations
26
  st.sidebar.header("Transformations")
27
+ crop_left = st.sidebar.slider("Crop Left (%)", 0, 50, 0)
28
+ crop_top = st.sidebar.slider("Crop Top (%)", 0, 50, 0)
29
+ crop_right = st.sidebar.slider("Crop Right (%)", 0, 50, 0)
30
+ crop_bottom = st.sidebar.slider("Crop Bottom (%)", 0, 50, 0)
31
+
32
+ rotation = st.sidebar.slider("Rotation (°)", 0, 360, 0)
33
  flip_horizontal = st.sidebar.checkbox("Flip Horizontally")
34
  flip_vertical = st.sidebar.checkbox("Flip Vertically")
35
+
36
+ # Apply Crop
37
+ left = int(crop_left * img_with_bg.width / 100)
38
+ top = int(crop_top * img_with_bg.height / 100)
39
+ right = img_with_bg.width - int(crop_right * img_with_bg.width / 100)
40
+ bottom = img_with_bg.height - int(crop_bottom * img_with_bg.height / 100)
41
+ img_cropped = img_with_bg.crop((left, top, right, bottom))
42
+
43
+ # Apply Rotation and Flips
44
+ img_rotated = img_cropped.rotate(rotation, expand=True)
45
  if flip_horizontal:
46
  img_rotated = img_rotated.transpose(Image.FLIP_LEFT_RIGHT)
47
  if flip_vertical:
48
  img_rotated = img_rotated.transpose(Image.FLIP_TOP_BOTTOM)
49
 
50
+ # Snapchat-Like Filters
 
 
 
 
 
 
 
 
 
 
51
  st.sidebar.header("Filters")
52
+ filters = st.sidebar.selectbox(
53
+ "Select Filter",
54
+ ["None", "Grayscale", "Sepia", "Negative", "Blur", "Contour", "Detail", "Emboss"]
55
+ )
56
+ if filters == "Grayscale":
57
+ img_filtered = img_rotated.convert("L").convert("RGBA")
58
+ elif filters == "Sepia":
59
+ sepia_filter = np.array(img_rotated)[:, :, :3]
60
+ sepia = np.dot(sepia_filter, [0.393, 0.769, 0.189]).clip(0, 255).astype("uint8")
61
+ img_filtered = Image.fromarray(sepia).convert("RGBA")
62
+ elif filters == "Negative":
63
+ img_filtered = ImageOps.invert(img_rotated.convert("RGB")).convert("RGBA")
64
+ elif filters == "Blur":
65
+ img_filtered = img_rotated.filter(ImageFilter.BLUR)
66
+ elif filters == "Contour":
67
+ img_filtered = img_rotated.filter(ImageFilter.CONTOUR)
68
+ elif filters == "Detail":
69
+ img_filtered = img_rotated.filter(ImageFilter.DETAIL)
70
+ elif filters == "Emboss":
71
+ img_filtered = img_rotated.filter(ImageFilter.EMBOSS)
72
  else:
73
+ img_filtered = img_rotated
74
+
75
+ # Enhancements
76
+ st.sidebar.header("Enhancements")
77
+ brightness = st.sidebar.slider("Brightness", 0.5, 2.0, 1.0)
78
+ contrast = st.sidebar.slider("Contrast", 0.5, 2.0, 1.0)
79
+ sharpness = st.sidebar.slider("Sharpness", 0.5, 2.0, 1.0)
80
 
81
+ img_final = ImageEnhance.Brightness(img_filtered).enhance(brightness)
82
+ img_final = ImageEnhance.Contrast(img_final).enhance(contrast)
83
+ img_final = ImageEnhance.Sharpness(img_final).enhance(sharpness)
84
 
85
+ # Display Final Image
86
+ st.image(img_final, caption="Edited Image", use_column_width=True)
87
+
88
+ # Download Option
89
  st.sidebar.header("Download")
90
+ img_final = img_final.convert("RGB")
91
+ st.sidebar.download_button(
92
+ "Download Edited Image",
93
+ data=img_final.tobytes(),
94
+ file_name="edited_image.jpg",
95
+ mime="image/jpeg"
96
+ )
97
  else:
98
+ st.info("Please upload an image to start editing.")