from PIL import Image import io def compress_image(image, quality=85): """ Komprimiert ein Bild mit angegebener Qualität :param image: PIL Image Objekt :param quality: Kompressionsqualität (1-100) :return: Komprimiertes PIL Image """ img_byte_arr = io.BytesIO() image.save(img_byte_arr, format='JPEG', quality=quality) img_byte_arr.seek(0) return Image.open(img_byte_arr) def convert_image_format(image, target_format='webp', quality=85): """ Konvertiert Bild in Zielformat :param image: PIL Image Objekt :param target_format: Zielformat (jpg, png, webp) :param quality: Kompressionsqualität :return: Konvertiertes PIL Image """ img_byte_arr = io.BytesIO() image.save(img_byte_arr, format=target_format.upper(), quality=quality) img_byte_arr.seek(0) return Image.open(img_byte_arr) def resize_image(image, max_width=None, max_height=None): """ Ändert Bildgröße unter Beibehaltung des Seitenverhältnisses :param image: PIL Image Objekt :param max_width: Maximale Breite :param max_height: Maximale Höhe :return: Größenverändertes PIL Image """ if max_width and max_height: image.thumbnail((max_width, max_height)) return image