arti-angular-app/deploy-this/compress-with-structure.py

52 lines
2.1 KiB
Python
Executable File

import os
from PIL import Image, UnidentifiedImageError
from shutil import copy2
# Ścieżki katalogów
input_folder = "src/main/resources/static/zaklik-public-images" # Folder źródłowy
output_folder = "src/main/resources/static/zaklik-public-images" # Folder docelowy
# Funkcja kompresująca obrazy
def compress_image(input_path, output_path):
try:
with Image.open(input_path) as img:
img_format = img.format # Zachowaj format pliku
if img_format in ["JPEG", "PNG"]:
img.save(output_path, optimize=True, quality=15)
else:
copy2(input_path, output_path) # Kopiuj bez zmian, jeśli format nie jest obsługiwany
except UnidentifiedImageError:
print(f"Nie rozpoznano formatu obrazu: {input_path}")
# Funkcja do przetwarzania plików w folderze
def process_folder(input_folder, output_folder):
for root, _, files in os.walk(input_folder):
for file in files:
# Ścieżka do pliku wejściowego
input_path = os.path.join(root, file)
# Tworzenie ścieżki docelowej z odpowiednią strukturą katalogów
relative_path = os.path.relpath(root, input_folder)
target_dir = os.path.join(output_folder, relative_path)
os.makedirs(target_dir, exist_ok=True)
# Obsługa plików już skompresowanych
if "(compressed)" in file:
continue
if "properties" in file:
continue
# Generowanie nazwy pliku wyjściowego
name, ext = os.path.splitext(file)
output_file = f"{name}(compressed){ext}"
output_path = os.path.join(target_dir, output_file)
# Sprawdzenie, czy skompresowany plik już istnieje
if os.path.exists(output_path):
print(f"Pominięto, plik już istnieje: {output_path}")
continue
# Kompresja pliku
print(f"Kompresowanie: {input_path} -> {output_path}")
compress_image(input_path, output_path)
# Wykonanie skryptu
process_folder(input_folder, output_folder)