From 2ae0671f5b8ccf3d3a31b95cf0ddaee544bc701a Mon Sep 17 00:00:00 2001 From: Julian T Date: Sat, 17 Apr 2021 00:29:38 +0200 Subject: Show and order by taken date --- build.py | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) (limited to 'build.py') diff --git a/build.py b/build.py index e627f8f..f018b94 100755 --- a/build.py +++ b/build.py @@ -1,12 +1,14 @@ #!/usr/bin/env python3 import jinja2 import PIL.Image +import PIL.ImageOps import argparse import yaml import os import re import hashlib import glob +from datetime import datetime imagereg = re.compile("([a-z0-9]*)\\..*") @@ -76,13 +78,15 @@ class ImageLocation: fname = f"{thash}.{settings['ext']}" print(f"Converting file {imgname} to {fname}") - im = PIL.Image.open(imgname) - - width = settings["res"] - res = (width, int((im.size[1] / im.size[0]) * width)) - im = im.resize(res, PIL.Image.ANTIALIAS) tmpname = f"{self.tmpname}.{settings['ext']}" - im.save(tmpname) + with PIL.Image.open(imgname) as im: + target_height = settings["res"] + im = PIL.ImageOps.exif_transpose(im) + if im.size[0] > target_height: + res = (int((im.size[0] / im.size[1]) * target_height), target_height) + im = im.resize(res, PIL.Image.ANTIALIAS) + + im.save(tmpname) os.rename(tmpname, os.path.join(self.folder, fname)) @@ -119,6 +123,24 @@ class Image: self.scaledpath = "" self.fullurl = "" + self.taken = None + self.load_metadata() + + def load_metadata(self): + try: + with PIL.Image.open(self.filename) as im: + taken_str = im.getexif()[36867] + except KeyError: + print(f"Could not load date from image {self.filename}") + return + + self.taken = datetime.strptime(taken_str, "%Y:%m:%d %H:%M:%S") + + +def value_or_default(val, default=None): + if val is None: + return default + return val class Loader: @@ -152,6 +174,11 @@ class Loader: self.images.append(img) + self.images = sorted(self.images, + key=lambda img: value_or_default(img.taken, + datetime.min), + reverse=True) + class Renderer: def __init__(self, loader, resolution, extension): @@ -197,7 +224,7 @@ class Renderer: parser = argparse.ArgumentParser() parser.add_argument("--dest", "-d", default="build", help="where to put resulting files") -parser.add_argument("--size", "-s", default="1920", help="size to scale web images to") +parser.add_argument("--size", "-s", default="1080", help="size to scale web images to") parser.add_argument("--commit", "-g", help="git commit hash to announce") parser.add_argument("--clean", help="clean unused image files", action="store_true") parser.add_argument("--config", "-c", default="imginfo.yml", help="where to load image definitions from") -- cgit v1.2.3