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 |