Alibrown commited on
Commit
1cfc13a
·
verified ·
1 Parent(s): b3860a7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -21
app.py CHANGED
@@ -1,31 +1,32 @@
1
  import streamlit as st
2
  from PIL import Image
3
  import io
4
- import numpy as np
5
- from image_optimization_utils import (
6
- compress_image,
7
- convert_image_format,
8
- resize_image
9
- )
 
 
 
 
 
 
10
 
11
  def main():
12
  st.title("Bild Optimierungs-Tool")
13
 
14
- # Seitenleiste für Einstellungen
15
  st.sidebar.header("Optimierungseinstellungen")
16
 
17
- # Datei-Upload
18
  uploaded_file = st.file_uploader("Wählen Sie ein Bild", type=['jpg', 'png', 'jpeg', 'webp'])
19
 
20
  if uploaded_file is not None:
21
- # Bild laden
22
  original_image = Image.open(uploaded_file)
23
 
24
- # Vorschau des Originalbildes
25
  st.subheader("Originalbild")
26
  st.image(original_image, caption="Ursprüngliches Bild")
27
 
28
- # Kompressionseinstellungen
29
  compression_quality = st.sidebar.slider(
30
  "Kompressionsqualität",
31
  min_value=1,
@@ -33,37 +34,30 @@ def main():
33
  value=85
34
  )
35
 
36
- # Zielformate
37
  target_formats = st.sidebar.multiselect(
38
  "Zielformate",
39
  ['jpg', 'png', 'webp'],
40
  default=['webp']
41
  )
42
 
43
- # Optimierungsbutton
44
  if st.button("Bild optimieren"):
45
- # Optimierungsergebnisse
46
  results = {}
47
 
48
  for format in target_formats:
49
- # Bild komprimieren und konvertieren
50
  optimized_image = convert_image_format(
51
  original_image,
52
  target_format=format,
53
  quality=compression_quality
54
  )
55
 
56
- # Speichern im Speicher
57
  img_byte_arr = io.BytesIO()
58
  optimized_image.save(img_byte_arr, format=format.upper(), quality=compression_quality)
59
  img_byte_arr = img_byte_arr.getvalue()
60
 
61
- # Größenberechnung
62
  original_size = len(uploaded_file.getvalue())
63
  optimized_size = len(img_byte_arr)
64
  compression_ratio = (1 - optimized_size / original_size) * 100
65
 
66
- # Ergebnisse speichern
67
  results[format] = {
68
  'image': optimized_image,
69
  'original_size': original_size,
@@ -71,7 +65,6 @@ def main():
71
  'compression_ratio': compression_ratio
72
  }
73
 
74
- # Ergebnisse anzeigen
75
  st.subheader("Optimierungsergebnisse")
76
  for format, result in results.items():
77
  col1, col2 = st.columns(2)
@@ -84,7 +77,6 @@ def main():
84
  st.write(f"Optimierte Größe: {result['optimized_size']} Bytes")
85
  st.write(f"Kompressionsrate: {result['compression_ratio']:.2f}%")
86
 
87
- # Download-Button
88
  img_byte_arr = io.BytesIO()
89
  result['image'].save(img_byte_arr, format=format.upper(), quality=compression_quality)
90
  st.download_button(
@@ -94,4 +86,5 @@ def main():
94
  mime=f"image/{format}"
95
  )
96
 
97
- # Hilfsfunktionen in separater Datei image_optimization_utils.py
 
 
1
  import streamlit as st
2
  from PIL import Image
3
  import io
4
+
5
+ def compress_image(image, quality=85):
6
+ img_byte_arr = io.BytesIO()
7
+ image.save(img_byte_arr, format='JPEG', quality=quality)
8
+ img_byte_arr.seek(0)
9
+ return Image.open(img_byte_arr)
10
+
11
+ def convert_image_format(image, target_format='webp', quality=85):
12
+ img_byte_arr = io.BytesIO()
13
+ image.save(img_byte_arr, format=target_format.upper(), quality=quality)
14
+ img_byte_arr.seek(0)
15
+ return Image.open(img_byte_arr)
16
 
17
  def main():
18
  st.title("Bild Optimierungs-Tool")
19
 
 
20
  st.sidebar.header("Optimierungseinstellungen")
21
 
 
22
  uploaded_file = st.file_uploader("Wählen Sie ein Bild", type=['jpg', 'png', 'jpeg', 'webp'])
23
 
24
  if uploaded_file is not None:
 
25
  original_image = Image.open(uploaded_file)
26
 
 
27
  st.subheader("Originalbild")
28
  st.image(original_image, caption="Ursprüngliches Bild")
29
 
 
30
  compression_quality = st.sidebar.slider(
31
  "Kompressionsqualität",
32
  min_value=1,
 
34
  value=85
35
  )
36
 
 
37
  target_formats = st.sidebar.multiselect(
38
  "Zielformate",
39
  ['jpg', 'png', 'webp'],
40
  default=['webp']
41
  )
42
 
 
43
  if st.button("Bild optimieren"):
 
44
  results = {}
45
 
46
  for format in target_formats:
 
47
  optimized_image = convert_image_format(
48
  original_image,
49
  target_format=format,
50
  quality=compression_quality
51
  )
52
 
 
53
  img_byte_arr = io.BytesIO()
54
  optimized_image.save(img_byte_arr, format=format.upper(), quality=compression_quality)
55
  img_byte_arr = img_byte_arr.getvalue()
56
 
 
57
  original_size = len(uploaded_file.getvalue())
58
  optimized_size = len(img_byte_arr)
59
  compression_ratio = (1 - optimized_size / original_size) * 100
60
 
 
61
  results[format] = {
62
  'image': optimized_image,
63
  'original_size': original_size,
 
65
  'compression_ratio': compression_ratio
66
  }
67
 
 
68
  st.subheader("Optimierungsergebnisse")
69
  for format, result in results.items():
70
  col1, col2 = st.columns(2)
 
77
  st.write(f"Optimierte Größe: {result['optimized_size']} Bytes")
78
  st.write(f"Kompressionsrate: {result['compression_ratio']:.2f}%")
79
 
 
80
  img_byte_arr = io.BytesIO()
81
  result['image'].save(img_byte_arr, format=format.upper(), quality=compression_quality)
82
  st.download_button(
 
86
  mime=f"image/{format}"
87
  )
88
 
89
+ if __name__ == "__main__":
90
+ main()