ahmedumeraziz commited on
Commit
a370f85
·
verified ·
1 Parent(s): 0f0888f

Create backup_app.py

Browse files
Files changed (1) hide show
  1. backup_app.py +120 -0
backup_app.py ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Image Optimizer free for use no resell!
2
+ # Copyright by Volkan K-Budak
3
+ # Created for TSOWatch Commuinity
4
+ import streamlit as st
5
+ from PIL import Image
6
+ import io
7
+ import traceback
8
+ import time
9
+
10
+ def compress_image(image, format='webp', quality=85):
11
+ try:
12
+ # Korrektur: Wandle 'jpg' in 'jpeg' um
13
+ save_format = 'jpeg' if format.lower() == 'jpg' else format
14
+
15
+ img_byte_arr = io.BytesIO()
16
+ image.save(img_byte_arr, format=save_format.upper(), quality=quality)
17
+ img_byte_arr.seek(0)
18
+ return Image.open(img_byte_arr)
19
+ except Exception as e:
20
+ st.error(f"Image compression error: {e}")
21
+ st.error(traceback.format_exc())
22
+ return None
23
+
24
+ def main():
25
+ st.title("Image optimization tool")
26
+
27
+ st.sidebar.header("Optimization settings")
28
+
29
+ uploaded_file = st.file_uploader("Select an image", type=['jpg', 'png', 'jpeg', 'webp'])
30
+
31
+ if uploaded_file is not None:
32
+ try:
33
+ original_image = Image.open(uploaded_file)
34
+
35
+ # Aktuelles Format ermitteln
36
+ current_format = original_image.format.lower() if original_image.format else uploaded_file.name.split('.')[-1].lower()
37
+ current_format = 'jpeg' if current_format == 'jpg' else current_format
38
+
39
+ st.subheader("Original image")
40
+ st.image(original_image, caption=f"Original image ({current_format.upper()})")
41
+
42
+ original_size_bytes = len(uploaded_file.getvalue())
43
+ st.write(f"Original image size: {original_size_bytes} Bytes")
44
+
45
+ compression_quality = st.sidebar.slider(
46
+ "Compression quality",
47
+ min_value=1,
48
+ max_value=100,
49
+ value=85
50
+ )
51
+
52
+ # Zielformate ohne aktuelles Format
53
+ target_formats = [fmt for fmt in ['webp', 'jpg', 'png'] if fmt != current_format]
54
+
55
+ target_format = st.sidebar.selectbox(
56
+ "Zielformat",
57
+ target_formats
58
+ )
59
+
60
+ st.warning("⚠️ Please click 'Optimize Image' ONLY ONCE'!")
61
+
62
+ progress_bar = st.progress(0)
63
+
64
+ if st.button("Optimize image"):
65
+ try:
66
+ progress_bar.progress(20)
67
+ time.sleep(0.5)
68
+
69
+ optimized_image = compress_image(
70
+ original_image,
71
+ format=target_format,
72
+ quality=compression_quality
73
+ )
74
+
75
+ progress_bar.progress(60)
76
+ time.sleep(0.5)
77
+
78
+ if optimized_image:
79
+ # Korrektur: Speichern mit korrektem Format
80
+ save_format = 'jpeg' if target_format.lower() == 'jpg' else target_format
81
+
82
+ img_byte_arr = io.BytesIO()
83
+ optimized_image.save(img_byte_arr, format=save_format.upper(), quality=compression_quality)
84
+ img_byte_arr.seek(0)
85
+
86
+ progress_bar.progress(100)
87
+ time.sleep(0.5)
88
+
89
+ optimized_size_bytes = img_byte_arr.getbuffer().nbytes
90
+ compression_ratio = (1 - optimized_size_bytes / original_size_bytes) * 100
91
+
92
+ st.subheader("Optimization results")
93
+ col1, col2 = st.columns(2)
94
+
95
+ with col1:
96
+ st.image(optimized_image, caption=f"Optimized ({target_format.upper()})")
97
+
98
+ with col2:
99
+ st.write(f"Original size: {original_size_bytes} Bytes")
100
+ st.write(f"Optimized size: {optimized_size_bytes} Bytes")
101
+ st.write(f"Compression rate: {compression_ratio:.2f}%")
102
+
103
+ st.download_button(
104
+ label=f"Download {target_format.upper()}",
105
+ data=img_byte_arr,
106
+ file_name=f"optimized_image.{target_format}",
107
+ mime=f"image/{target_format}"
108
+ )
109
+
110
+ progress_bar.empty()
111
+
112
+ except Exception as e:
113
+ st.error(f"Image optimization error: {e}")
114
+ progress_bar.empty()
115
+
116
+ except Exception as e:
117
+ st.error(f"Error loading image: {e}")
118
+
119
+ if __name__ == "__main__":
120
+ main()