From 6e9f6b7d520962a1f6c54884b07030d05c259e6c Mon Sep 17 00:00:00 2001 From: Matthias Vogelgesang Date: Tue, 30 Jul 2013 17:42:28 +0200 Subject: [PATCH] Read EXIF tags and put them in the media context --- sigal/image.py | 28 ++++++++++++++++++++++++++++ sigal/writer.py | 3 +++ 2 files changed, 31 insertions(+) diff --git a/sigal/image.py b/sigal/image.py index bba8634..80abe21 100644 --- a/sigal/image.py +++ b/sigal/image.py @@ -26,6 +26,7 @@ import sys from PIL import Image as PILImage from PIL import ImageDraw, ImageOps +from PIL.ExifTags import TAGS from pilkit.processors import Transpose from pilkit.utils import save_image @@ -99,3 +100,30 @@ def add_copyright(img, text): draw = ImageDraw.Draw(img) draw.text((5, img.size[1] - 15), '\xa9 ' + text) + + +def get_exif_tags(source): + if '.jpg' in source.lower(): + img = PILImage.open(source) + exif = img._getexif() + + if exif: + data = dict((TAGS.get(tag, tag), value) + for (tag, value) in exif.items()) + + # Provide more accessible tags + fnumber = data.get('FNumber', (0, 1)) + exposure = data.get('ExposureTime', (0, 1)) + focal = data.get('FocalLength', (0, 1)) + + simple = { + 'iso': data.get('ISOSpeedRatings', 0), + 'fstop': float(fnumber[0]) / fnumber[1], + 'exposure': '{0}/{1}'.format(*exposure), + 'focal': round(float(focal[0]) / focal[1]) + } + + data['simple'] = simple + return data + + return {} diff --git a/sigal/writer.py b/sigal/writer.py index 3b41cc4..3e2d762 100644 --- a/sigal/writer.py +++ b/sigal/writer.py @@ -150,6 +150,9 @@ class Writer(object): if ext in self.settings['img_ext_list']: media_ctx['type'] = 'img' media_ctx['file'] = i + + file_path = os.path.join(path, i) + media_ctx['exif'] = sigal.image.get_exif_tags(file_path) else: media_ctx['type'] = 'vid' media_ctx['file'] = base + '.webm'