from PIL import Image import os from pathlib import Path def compress_image(image_path:str) -> None: '''Takes up a PNG file, compresses it and converts it to a WEBP. Uses the pillow, pathlib and os module to do this. Args: image_path: The path to the image (str)''' try: compression_level = 6 img_nm = Path(os.path.basename(image_path)) compressed_png_path =Path(f"images_webp/{img_nm}") if not(os.path.exists(compressed_png_path.with_suffix(".webp"))): # opening image img = Image.open(Path(image_path)) # compressing image img.save(compressed_png_path, format="png", optimize=True, compress_level=compression_level) # opening compressed image img_compressed = Image.open(compressed_png_path) # Convert the compressed PNG to WebP img_compressed.save(compressed_png_path.with_suffix(".webp"), format="webp") # removing the compressed PNG os.remove(compressed_png_path) else: print("File already exists") except FileNotFoundError as e: print(f"Error: {e}") paths = Path("images").glob("**/*.png") for path in paths: compress_image(str(path))