-
Notifications
You must be signed in to change notification settings - Fork 0
/
compress.py
34 lines (27 loc) · 1.03 KB
/
compress.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from argparse import ArgumentParser
from pathlib import Path
from PIL import Image
parser = ArgumentParser()
parser.add_argument("-i", "--input", type=Path, default=".")
parser.add_argument("-o", "--output_dir", type=Path, default=".")
parser.add_argument("-q", "--quality", type=int, default=100)
parser.add_argument("-s", "--size", type=int, nargs=2, default=[1920, 1920])
args = parser.parse_args()
input = args.input
output_dir = args.output_dir
output_dir.mkdir(parents=True, exist_ok=True)
suffixes = (".avif", ".bmp", ".jpeg", ".jpg", ".png", ".webp")
files = (
[f for f in input.glob("*.*") if f.suffix in suffixes]
if input.is_dir()
else [input] if input.is_file() else []
)
for file in files:
image = Image.open(file).convert("RGB")
image.thumbnail(args.size)
output = output_dir / f"{file.stem}.jpg"
index = 1
while output.exists():
output = output_dir / f"{file.stem} ({index}).jpg"
index += 1
image.save(output, optimize=True, quality=args.quality)