53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
import os
|
|
import imageio.v3 as iio
|
|
from PIL import Image
|
|
|
|
input_dir = os.getcwd()
|
|
output_dir = os.path.join(input_dir, "output_images")
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
|
|
supported_extensions = {
|
|
".avif", ".webp", ".png", ".heif", ".heic",
|
|
".bmp", ".tiff"
|
|
}
|
|
|
|
files = [
|
|
f for f in os.listdir(input_dir)
|
|
if os.path.splitext(f)[1].lower() in supported_extensions
|
|
]
|
|
|
|
total = len(files)
|
|
count = 0
|
|
|
|
print(f"Found {total} convertible images\n")
|
|
|
|
for filename in files:
|
|
filepath = os.path.join(input_dir, filename)
|
|
name, ext = os.path.splitext(filename)
|
|
ext = ext.lower()
|
|
|
|
count += 1
|
|
|
|
try:
|
|
if ext == ".avif":
|
|
img_array = iio.imread(filepath)
|
|
img = Image.fromarray(img_array).convert("RGB")
|
|
else:
|
|
img = Image.open(filepath).convert("RGB")
|
|
|
|
output_path = os.path.join(output_dir, name + ".jpg")
|
|
|
|
if os.path.exists(output_path):
|
|
print(f"[{count}/{total}] ⏭️ Skipped (exists): {name}.jpg")
|
|
continue
|
|
|
|
img.thumbnail((320, 320))
|
|
|
|
img.save(output_path, "JPEG", quality=90, subsampling=0)
|
|
|
|
print(f"[{count}/{total}] ✅ Converted: {filename} → {name}.jpg")
|
|
|
|
except Exception as e:
|
|
print(f"[{count}/{total}] ❌ Failed: {filename} ({e})")
|
|
|
|
print("\nConversion finished.") |