2019-04-09 04:10:08 +00:00
|
|
|
#!/usr/bin/env python3
|
2019-04-10 03:54:03 +00:00
|
|
|
# GenThumb.py - Takes a directory listing and generates thumbnails for all JPGs, as well as creates a PathList.txt file
|
|
|
|
# Usage: ./GenThumb.py -b "S3MOUNT(implicit)/path/to/browse"
|
2019-04-09 04:10:08 +00:00
|
|
|
|
|
|
|
from pathlib import Path
|
|
|
|
from PIL import Image
|
|
|
|
import logging
|
|
|
|
import _thread
|
|
|
|
import time
|
2019-04-09 19:09:58 +00:00
|
|
|
import getopt
|
|
|
|
import sys
|
|
|
|
import os
|
2019-04-09 04:10:08 +00:00
|
|
|
|
|
|
|
logging.basicConfig(filename='GenThumb.log', level=logging.DEBUG,
|
|
|
|
format='%(asctime)s [%(levelname)s] %(message)s',
|
|
|
|
datefmt='%m/%d/%Y %I:%M:%S %p')
|
|
|
|
logging.info("---------------")
|
|
|
|
|
2019-04-09 19:09:58 +00:00
|
|
|
baseuri = os.environ.get('BASEURI',"https://s3.wasabisys.com/c0de-photography/")
|
|
|
|
s3_path = os.environ.get('S3MOUNT', "/mnt/photos/")
|
|
|
|
thumb_path = os.environ.get('THUMBNAILS', "./thumbs")
|
2019-04-09 04:10:08 +00:00
|
|
|
thumbsize = (250, 250)
|
|
|
|
|
2019-04-09 19:09:58 +00:00
|
|
|
try:
|
|
|
|
opts, args = getopt.getopt(sys.argv[1:],"hb:",["browse="])
|
|
|
|
except getopt.GetoptError:
|
|
|
|
print ('GenThumb.py -b <browse path>')
|
|
|
|
sys.exit(2)
|
|
|
|
for opt, arg in opts:
|
|
|
|
if opt == '-h':
|
|
|
|
print ('GenThumb.py -b <browse path>')
|
|
|
|
sys.exit()
|
|
|
|
elif opt in ("-b", "--browse"):
|
|
|
|
browse_path = arg
|
|
|
|
|
2019-04-09 04:10:08 +00:00
|
|
|
logging.info("Getting Paths (Can take time on large directories)")
|
|
|
|
filelist = list(Path(s3_path + browse_path).rglob("*.[jJ][pP][gG]"))
|
|
|
|
thumblist = list(Path(thumb_path).rglob("*.[jJ][pP][gG]"))
|
|
|
|
|
2019-04-09 06:42:32 +00:00
|
|
|
def gen_thumb(image, imagepath):
|
2019-04-09 05:38:15 +00:00
|
|
|
Path(thumb_path + '/' + imagepath).mkdir(mode=0o755, parents=True, exist_ok=True) # Generate the path if it doesn't already exist
|
|
|
|
thumbname = "%s/%s/%s" % (thumb_path, imagepath, image.name)
|
2019-04-09 04:10:08 +00:00
|
|
|
|
|
|
|
if image.name in "%s" % thumblist:
|
|
|
|
logging.debug("Skipping %s" % image)
|
|
|
|
else:
|
|
|
|
logging.info("Generating thumbnail for New Image: %s" % (image))
|
|
|
|
|
|
|
|
img = Image.open(image)
|
|
|
|
img.thumbnail(thumbsize)
|
|
|
|
img.save(thumbname)
|
|
|
|
|
|
|
|
logging.info("Saved Thumbnail as %s" % thumbname)
|
|
|
|
|
2019-04-10 05:00:33 +00:00
|
|
|
logging.debug("Creating pathlist file as: pathlist_%s.txt" % browse_path.replace('/', ':'))
|
2019-04-09 07:37:57 +00:00
|
|
|
with open('pathlist_%s.txt' % browse_path.replace('/', ':'), 'w') as pathlist:
|
2019-04-09 04:10:08 +00:00
|
|
|
for image in filelist:
|
2019-04-09 06:42:32 +00:00
|
|
|
imagepath = "%s" % image.parent
|
|
|
|
imagepath = imagepath.strip(s3_path)
|
2019-04-09 07:37:57 +00:00
|
|
|
# The pathlist file is used by GenTemplate.py to generate a specific gallery for a specific directory and its children
|
2019-04-09 06:42:32 +00:00
|
|
|
pathlist.write(baseuri + imagepath + '/' + image.name + '\n')
|
2019-04-09 04:10:08 +00:00
|
|
|
try:
|
2019-04-09 05:38:15 +00:00
|
|
|
# WARNING: Each file found will become a thread! Be sure your computer can handle the load
|
2019-04-09 06:42:32 +00:00
|
|
|
_thread.start_new_thread(gen_thumb, (image, imagepath,))
|
2019-04-09 04:10:08 +00:00
|
|
|
time.sleep(0.15)
|
|
|
|
except:
|
|
|
|
logging.error("unable to start thread")
|
|
|
|
|
|
|
|
logging.info("Wait for all threads to save")
|
|
|
|
|
|
|
|
while(1):
|
|
|
|
pass
|
|
|
|
|