Scripting thumbnail image file creation on macOS

One of the sites that I manage uses a jQuery-based image gallery to display images in a grid. The script decides which thumbnail to use based on how large and image is needed. A series of suffixes à la Flickr[1] is used to signify classes of image size. I wrote the following script to automate the process of scanning a source folder and creating four thumbnail sizes to an output directory.

It’s all pretty self-explanatory.

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
#!/usr/bin/python
# encoding=utf8

import os
import argparse
import glob
import subprocess

# instantiate argument parser
parser = argparse.ArgumentParser(description='Create thumbnails for YAPCA site')
# arguments
parser.add_argument('srcdir', help='Source directory to search')
parser.add_argument('outdir', help='Thumbnail output directory')
# parse
args = parser.parse_args()

extensions = [ ('t',99), ('m',239), ('n',319), ('q', 499)]

for imgpath in glob.glob(os.path.join(args.srcdir,"*.jpg")):
imgname = os.path.basename(imgpath)
imgbase = os.path.splitext(imgname)[0]
for e in extensions:
thumbbase = imgbase + '_' + e[0]
thumbname = thumbbase + ".jpg"
thumbpath = os.path.join(args.outdir,thumbname)
if os.path.isfile(thumbpath):
print "File: {0} exists".format(thumbname)
else:
# this thumbsize doesn't exist, so we must create it
dimension = e[1]
print "File: {0} does NOT exist. Creating for dimension {1}\n".format(thumbname,dimension)
cmd = "sips --resampleHeightWidthMax {0} '{1}' --out '{2}'".format(dimension, imgpath,thumbpath)
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()
p_status = p.wait()

  1. Well, sort of. I don't think this is exactly what Flickr uses; and I made up the _q suffix for the less than 500px image.