49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
|
'''
|
||
|
Recompress all jpg images in the current directory.
|
||
|
Add /r to do nested directories as well.
|
||
|
'''
|
||
|
|
||
|
from voussoirkit import bytestring
|
||
|
import io
|
||
|
import os
|
||
|
import PIL.Image
|
||
|
import PIL.ImageFile
|
||
|
import string
|
||
|
import sys
|
||
|
|
||
|
PIL.ImageFile.LOAD_TRUNCATED_IMAGES = True
|
||
|
|
||
|
if '/r' in sys.argv:
|
||
|
from voussoirkit import spinal
|
||
|
walker = spinal.walk_generator()
|
||
|
files = list(walker)
|
||
|
files = [f.absolute_path for f in files]
|
||
|
|
||
|
else:
|
||
|
files = os.listdir()
|
||
|
files = [f for f in files if os.path.isfile(f)]
|
||
|
|
||
|
files = [f for f in files if any(ext in f.lower() for ext in ['.jpg', '.jpeg'])]
|
||
|
|
||
|
bytes_saved = 0
|
||
|
remaining_size = 0
|
||
|
for filename in files:
|
||
|
print(''.join(c for c in filename if c in string.printable))
|
||
|
bytesio = io.BytesIO()
|
||
|
i = PIL.Image.open(filename)
|
||
|
i.save(bytesio, format='jpeg', quality=80)
|
||
|
|
||
|
bytesio.seek(0)
|
||
|
new_bytes = bytesio.read()
|
||
|
old_size = os.path.getsize(filename)
|
||
|
new_size = len(new_bytes)
|
||
|
remaining_size += new_size
|
||
|
if new_size < old_size:
|
||
|
bytes_saved += (old_size - new_size)
|
||
|
f = open(filename, 'wb')
|
||
|
f.write(new_bytes)
|
||
|
f.close()
|
||
|
|
||
|
print('Saved', bytestring.bytestring(bytes_saved))
|
||
|
print('Remaining are', bytestring.bytestring(remaining_size))
|