-
Notifications
You must be signed in to change notification settings - Fork 0
/
11_optimize_images_with_wand.py
executable file
·57 lines (46 loc) · 1.69 KB
/
11_optimize_images_with_wand.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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import fnmatch
import os
import spandebug
# pip install Wand
from wand.image import Image
# pip install http://pypi.python.org/packages/source/h/hurry.filesize/hurry.filesize-0.9.tar.gz
from hurry.filesize import size
# constants
PATH = '/home/phil/images'
PATTERN = '*.JPG'
def get_image_file_names(filepath, pattern):
matches = []
if os.path.exists(filepath):
for root, dirnames, filenames in os.walk(filepath):
for filename in fnmatch.filter(filenames, pattern):
matches.append(os.path.join(root, filename)) # full path
if matches:
print("Found {} files, with a total file size of {}.".format(
len(matches), get_total_size(matches)))
return matches
else:
print("No files found.")
else:
print("Sorry that path does not exist. Try again.")
def get_total_size(list_of_image_names):
total_size = 0
for image_name in list_of_image_names:
total_size += os.path.getsize(image_name)
return size(total_size)
def resize_images(list_of_image_names):
print("Optimizing ... ")
for index, image_name in enumerate(list_of_image_names):
with open(image_name) as f:
image_binary = f.read()
with Image(blob=image_binary) as img:
if img.height >= 600:
img.transform(resize='x600')
img.save(filename=image_name)
print("Optimization complete.")
if __name__ == '__main__':
with spandebug.SysdigTrace():
all_images = get_image_file_names(PATH, PATTERN)
with spandebug.SysdigTrace():
resize_images(all_images)
with spandebug.SysdigTrace():
get_image_file_names(PATH, PATTERN)