Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from PIL import Image | |
| import io | |
| import numpy as np | |
| from image_optimization_utils import ( | |
| compress_image, | |
| convert_image_format, | |
| resize_image | |
| ) | |
| def main(): | |
| st.title("Bild Optimierungs-Tool") | |
| # Seitenleiste für Einstellungen | |
| st.sidebar.header("Optimierungseinstellungen") | |
| # Datei-Upload | |
| uploaded_file = st.file_uploader("Wählen Sie ein Bild", type=['jpg', 'png', 'jpeg', 'webp']) | |
| if uploaded_file is not None: | |
| # Bild laden | |
| original_image = Image.open(uploaded_file) | |
| # Vorschau des Originalbildes | |
| st.subheader("Originalbild") | |
| st.image(original_image, caption="Ursprüngliches Bild") | |
| # Kompressionseinstellungen | |
| compression_quality = st.sidebar.slider( | |
| "Kompressionsqualität", | |
| min_value=1, | |
| max_value=100, | |
| value=85 | |
| ) | |
| # Zielformate | |
| target_formats = st.sidebar.multiselect( | |
| "Zielformate", | |
| ['jpg', 'png', 'webp'], | |
| default=['webp'] | |
| ) | |
| # Optimierungsbutton | |
| if st.button("Bild optimieren"): | |
| # Optimierungsergebnisse | |
| results = {} | |
| for format in target_formats: | |
| # Bild komprimieren und konvertieren | |
| optimized_image = convert_image_format( | |
| original_image, | |
| target_format=format, | |
| quality=compression_quality | |
| ) | |
| # Speichern im Speicher | |
| img_byte_arr = io.BytesIO() | |
| optimized_image.save(img_byte_arr, format=format.upper(), quality=compression_quality) | |
| img_byte_arr = img_byte_arr.getvalue() | |
| # Größenberechnung | |
| original_size = len(uploaded_file.getvalue()) | |
| optimized_size = len(img_byte_arr) | |
| compression_ratio = (1 - optimized_size / original_size) * 100 | |
| # Ergebnisse speichern | |
| results[format] = { | |
| 'image': optimized_image, | |
| 'original_size': original_size, | |
| 'optimized_size': optimized_size, | |
| 'compression_ratio': compression_ratio | |
| } | |
| # Ergebnisse anzeigen | |
| st.subheader("Optimierungsergebnisse") | |
| for format, result in results.items(): | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| st.image(result['image'], caption=f"Optimiert ({format.upper()})") | |
| with col2: | |
| st.write(f"Ursprüngliche Größe: {result['original_size']} Bytes") | |
| st.write(f"Optimierte Größe: {result['optimized_size']} Bytes") | |
| st.write(f"Kompressionsrate: {result['compression_ratio']:.2f}%") | |
| # Download-Button | |
| img_byte_arr = io.BytesIO() | |
| result['image'].save(img_byte_arr, format=format.upper(), quality=compression_quality) | |
| st.download_button( | |
| label=f"Download {format.upper()}", | |
| data=img_byte_arr.getvalue(), | |
| file_name=f"optimized_image.{format}", | |
| mime=f"image/{format}" | |
| ) | |
| # Hilfsfunktionen in separater Datei image_optimization_utils.py |