
This script can be useful if you want to create a web picture gallery. The first version is described here. This version is using Python and the ImageMagick tool convert (documentation here).
The script will resize pictures in two formats :
- thumbnail : square size 200px
- web “full size” : 1080px
You will have to set the following variable with your own folder settings :
- thumbnail folder : dest_thumb
- web “full size” folder : dest_resize
- source image folder : source
The folder structure is automatically created in both destination folders (thumbnail and web folders). Comments are welcome !
#!/usr/bin/env python
# -*- coding: utf8 -*-
import os
import re
import collections
import subprocess
import shutil
import PIL
from PIL import Image
from glob import glob
dest_thumb="/images/thumbnail/"
param_thumb=['-thumbnail', 'x200', '-resize', '200x<', '-resize', '50%', '-gravity', 'center', '-crop', '100x100+0+0', '+repage', '-format', 'jpg', '-quality', '91', '-auto-orient']
dest_resize="/images/resized/"
param_resize =['-geometry', 'x1080', '-auto-orient']
source="/images/full/"
convert_tool="/usr/bin/convert"
result = dict()
for root, dirs, files in os.walk(source, topdown=True):
for name in files:
if re.search(r'\.jpeg$|\.jpg$', name, re.IGNORECASE):
result.setdefault(os.path.relpath(root, source),[]).append(name)
dest_folder_list = {
dest_thumb: param_thumb,
dest_resize: param_resize
}
for destfoldername, param_resize in dest_folder_list.items():
# CONVERT
for key in result:
if not (os.path.isdir(destfoldername+key)):
os.makedirs(destfoldername+key)
for filename in result[key]:
# REMOVE HIDDEN FILE THAT BEGIN WITH "._"
if re.search(r'(^\.\_).*(\.jpeg$|\.jpg$)', filename, re.IGNORECASE):
os.remove(source+key+"/"+filename)
else:
if not (os.path.exists(destfoldername+key+"/"+filename)):
srcfile = source+key+"/"+filename
dstfile = destfoldername+key+"/"+filename
cnv_cmd = [ convert_tool , srcfile ] + param_resize + [ dstfile ]
p = subprocess.Popen(cnv_cmd)
# CLEAN THUMB AND RESIZE FOLDER
result_clean = dict()
for root_clean, dirs_clean, files_clean in os.walk(destfoldername, topdown=True):
for name_clean in files_clean:
if re.search(r'\.jpeg$|\.jpg$', name_clean, re.IGNORECASE):
result_clean.setdefault(os.path.relpath(root_clean, destfoldername),[]).append(name_clean)
for key in result_clean:
if not (os.path.exists(source+key)):
shutil.rmtree(destfoldername+key,ignore_errors=True)
My Powershell script categories
- Active Directory
- Cluster
- Database
- Exchange
- Files and folders
- Hardware
- Network
- Operating System
- PKI
- SCCM
- Service and process
- Tips
- VMWare
Automatic pictures resizing with Imagemagick
