
Create thumbnails in Python
I needed a script that would take a folder of pictures, resize the pictures, save them in a new folder and also make square thumbnails with the picture centered in the thumbnail. This Python script that I wrote does this very task quickly and produces lean images ( for example resulting thumbnails are 8 Kb comparing to Photoshop that for some reason was giving me images that are 5-8 times as heavy, 45 Kb for a 65×65 image)
The script also produces HTML code that you can just cut and paste into a responsive gallery like http://tympanus.net/codrops/2011/09/20/responsive-image-gallery/
You need to have PIL and Python installed to run this script.
Here’s the script:
[sourcecode language=”python”]
#!/usr/bin/env python
# encoding: utf-8
"""
resizeImages.py
This script takes a folder named ‘photos’, creates two folders to store resized photos and thumbnails
Created by Maksim Surguy on 2012-04-09.
https://maxoffsky.com
"""
import os
from PIL import Image
def ensure_dir(f):
d = os.path.dirname(f)
if not os.path.exists(d):
os.makedirs(d)
def main():
# set max image dimensions
max_width = 640
max_height = 400
# set thumbnail size
thumb_size = (65, 65)
# optional – set the folder names if different names needed
photo_source_folder = "photos"
output_big_folder = "pics"
output_thumb_folder = "thumbs"
# do not edit below this line
htmlsource = ""
thumb_box = (0,0)
source_folder = os.getcwd() + "/" + photo_source_folder + "/"
current_folder = os.getcwd()+ "/"
ensure_dir(current_folder+ output_big_folder + "/")
ensure_dir(current_folder+ output_thumb_folder + "/")
dirList = [fname for fname in os.listdir(source_folder)
if fname.lower().endswith(".png") or fname.lower().endswith(".jpg")]
for fname in dirList:
print "Resizing %s" % fname
htmlsource += ‘<li><a href="#"><img src="%s/%s" data-large="%s/%s" alt="image" data-description=" " /></a></li>n’%(output_thumb_folder,fname,output_big_folder, fname)
image = Image.open(source_folder + fname)
if image.size[0] <= 640 and image.size[1] <= 400:
image.save(current_folder + output_big_folder + "/" + fname, "JPEG", quality = 92)
else:
image_big = image.copy()
image_big.thumbnail((max_width, max_height), Image.ANTIALIAS)
image_big.save(current_folder + output_big_folder + "/" + fname, "JPEG", quality = 92)
image.thumbnail(thumb_size, Image.ANTIALIAS)
thumb_box = ( thumb_size[0]/2 – image.size[0]/2 , thumb_size[1]/2 – image.size[1]/2)
thumbnail = Image.new ("RGB", thumb_size)
thumbnail.paste(image, thumb_box)
thumbnail.save(current_folder + output_thumb_folder + "/" + fname, "JPEG", quality = 90)
open("output.html", "w").write(htmlsource)
if __name__ == ‘__main__’:
main()
[/sourcecode]
You can download the script here:
Download