awais0300 commited on
Commit
7dd215d
·
verified ·
1 Parent(s): 4d8df32

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -6
app.py CHANGED
@@ -1,8 +1,8 @@
1
  import streamlit as st
2
- from PIL import Image, ImageEnhance
3
  import io
4
 
5
- # Function to show image
6
  def show_image(img):
7
  st.image(img, caption="Edited Image", use_column_width=True)
8
 
@@ -10,8 +10,16 @@ def show_image(img):
10
  def reset_image():
11
  st.session_state["image"] = st.session_state["original_image"]
12
 
 
 
 
 
 
 
 
 
13
  # Title of the app
14
- st.title("Image Editor and Reset Tool")
15
 
16
  # Sidebar for uploading the original image
17
  st.sidebar.header("Upload Image")
@@ -25,8 +33,13 @@ if uploaded_image is not None:
25
  if "original_image" not in st.session_state:
26
  st.session_state["original_image"] = img.copy()
27
 
 
 
 
 
28
  st.session_state["image"] = img.copy()
29
 
 
30
  show_image(st.session_state["image"])
31
 
32
  # Options to edit the image
@@ -36,13 +49,36 @@ if uploaded_image is not None:
36
  # Rotation
37
  rotate_angle = st.sidebar.slider("Rotate image", 0, 360, 0)
38
  if rotate_angle != 0:
39
- st.session_state["image"] = st.session_state["image"].rotate(rotate_angle)
 
40
 
41
  # Brightness Adjustment
42
  brightness_factor = st.sidebar.slider("Brightness", 0.0, 2.0, 1.0)
43
  enhancer = ImageEnhance.Brightness(st.session_state["image"])
44
- st.session_state["image"] = enhancer.enhance(brightness_factor)
 
 
 
 
 
 
 
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  # Crop Image (User specifies the cropping box)
47
  st.sidebar.subheader("Crop Image")
48
  crop_x1 = st.sidebar.slider("Crop X1", 0, st.session_state["image"].width, 0)
@@ -51,11 +87,25 @@ if uploaded_image is not None:
51
  crop_y2 = st.sidebar.slider("Crop Y2", 0, st.session_state["image"].height, st.session_state["image"].height)
52
  if crop_x1 < crop_x2 and crop_y1 < crop_y2:
53
  st.session_state["image"] = st.session_state["image"].crop((crop_x1, crop_y1, crop_x2, crop_y2))
54
-
 
 
 
55
  # Reset Image
56
  if st.sidebar.button("Reset to Original"):
57
  reset_image()
58
  st.sidebar.success("Image reset to original.")
59
 
 
 
 
 
 
60
  # Display the edited image
61
  show_image(st.session_state["image"])
 
 
 
 
 
 
 
1
  import streamlit as st
2
+ from PIL import Image, ImageEnhance, ImageFilter
3
  import io
4
 
5
+ # Function to display image
6
  def show_image(img):
7
  st.image(img, caption="Edited Image", use_column_width=True)
8
 
 
10
  def reset_image():
11
  st.session_state["image"] = st.session_state["original_image"]
12
 
13
+ # Function to undo the last edit
14
+ def undo_edit():
15
+ if len(st.session_state["history"]) > 1:
16
+ st.session_state["history"].pop() # Remove last edit
17
+ st.session_state["image"] = st.session_state["history"][-1]
18
+ else:
19
+ st.sidebar.warning("No more edits to undo!")
20
+
21
  # Title of the app
22
+ st.title("Advanced Image Editor")
23
 
24
  # Sidebar for uploading the original image
25
  st.sidebar.header("Upload Image")
 
33
  if "original_image" not in st.session_state:
34
  st.session_state["original_image"] = img.copy()
35
 
36
+ # Store the current image and edit history
37
+ if "history" not in st.session_state:
38
+ st.session_state["history"] = [img.copy()]
39
+
40
  st.session_state["image"] = img.copy()
41
 
42
+ # Display the image
43
  show_image(st.session_state["image"])
44
 
45
  # Options to edit the image
 
49
  # Rotation
50
  rotate_angle = st.sidebar.slider("Rotate image", 0, 360, 0)
51
  if rotate_angle != 0:
52
+ edited_img = st.session_state["image"].rotate(rotate_angle)
53
+ st.session_state["image"] = edited_img
54
 
55
  # Brightness Adjustment
56
  brightness_factor = st.sidebar.slider("Brightness", 0.0, 2.0, 1.0)
57
  enhancer = ImageEnhance.Brightness(st.session_state["image"])
58
+ edited_img = enhancer.enhance(brightness_factor)
59
+ st.session_state["image"] = edited_img
60
+
61
+ # Contrast Adjustment
62
+ contrast_factor = st.sidebar.slider("Contrast", 0.0, 2.0, 1.0)
63
+ enhancer = ImageEnhance.Contrast(st.session_state["image"])
64
+ edited_img = enhancer.enhance(contrast_factor)
65
+ st.session_state["image"] = edited_img
66
 
67
+ # Sharpness Adjustment
68
+ sharpness_factor = st.sidebar.slider("Sharpness", 0.0, 2.0, 1.0)
69
+ enhancer = ImageEnhance.Sharpness(st.session_state["image"])
70
+ edited_img = enhancer.enhance(sharpness_factor)
71
+ st.session_state["image"] = edited_img
72
+
73
+ # Apply Filters
74
+ filter_option = st.sidebar.selectbox("Apply Filter", ["None", "Blur", "Edge Enhance", "Detail"])
75
+ if filter_option == "Blur":
76
+ st.session_state["image"] = st.session_state["image"].filter(ImageFilter.GaussianBlur(radius=2))
77
+ elif filter_option == "Edge Enhance":
78
+ st.session_state["image"] = st.session_state["image"].filter(ImageFilter.EDGE_ENHANCE)
79
+ elif filter_option == "Detail":
80
+ st.session_state["image"] = st.session_state["image"].filter(ImageFilter.DETAIL)
81
+
82
  # Crop Image (User specifies the cropping box)
83
  st.sidebar.subheader("Crop Image")
84
  crop_x1 = st.sidebar.slider("Crop X1", 0, st.session_state["image"].width, 0)
 
87
  crop_y2 = st.sidebar.slider("Crop Y2", 0, st.session_state["image"].height, st.session_state["image"].height)
88
  if crop_x1 < crop_x2 and crop_y1 < crop_y2:
89
  st.session_state["image"] = st.session_state["image"].crop((crop_x1, crop_y1, crop_x2, crop_y2))
90
+
91
+ # Save the image in the edit history
92
+ st.session_state["history"].append(st.session_state["image"].copy())
93
+
94
  # Reset Image
95
  if st.sidebar.button("Reset to Original"):
96
  reset_image()
97
  st.sidebar.success("Image reset to original.")
98
 
99
+ # Undo Last Edit
100
+ if st.sidebar.button("Undo Last Edit"):
101
+ undo_edit()
102
+ st.sidebar.success("Last edit undone.")
103
+
104
  # Display the edited image
105
  show_image(st.session_state["image"])
106
+
107
+ # Allow the user to download the edited image
108
+ buffer = io.BytesIO()
109
+ st.session_state["image"].save(buffer, format="PNG")
110
+ buffer.seek(0)
111
+ st.sidebar.download_button("Download Edited Image", buffer, "edited_image.png", "image/png")