52 lines
2.1 KiB
Python
Executable File
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)
|