From 420e1374d8269be0a9108cddeebb2d8791915385 Mon Sep 17 00:00:00 2001 From: Gabriel Saldana Date: Tue, 5 Mar 2013 00:05:35 -0600 Subject: [PATCH] Modifies EXIF section with Camera Info, display toggle and template styling --- mediagoblin/db/mixin.py | 27 ++++++ mediagoblin/static/css/base.css | 32 +++++++ .../templates/mediagoblin/utils/exif.html | 83 ++++++++++++++++++- 3 files changed, 139 insertions(+), 3 deletions(-) diff --git a/mediagoblin/db/mixin.py b/mediagoblin/db/mixin.py index a0eeff61..8fb9940c 100644 --- a/mediagoblin/db/mixin.py +++ b/mediagoblin/db/mixin.py @@ -237,6 +237,33 @@ class MediaEntryMixin(GenerateSlugMixin): label = re.sub('(.)([A-Z][a-z]+)', r'\1 \2', key) yield label.replace('EXIF', '').replace('Image', ''), exif_all[key] + def exif_display_data_short(self): + """Display a very short practical version of exif info""" + import time, datetime + if not self.media_data: + return + exif_all = self.media_data.get("exif_all") + # format date taken + takendate = datetime.datetime.strptime( + exif_all['Image DateTimeOriginal']['printable'], + '%Y:%m:%d %H:%M:%S').date() + taken = takendate.strftime('%B %d %Y') + fnum = str(exif_all['EXIF FNumber']['printable']).split('/') + # calculate aperture + if len(fnum) == 2: + aperture = "f/%.1f" % (float(fnum[0])/float(fnum[1])) + elif fnum[0] != 'None': + aperture = "f/%s" % (fnum[0]) + else: + aperture = None + return { + "Camera" : exif_all['Image Model']['printable'], + "Exposure" : '%s sec' % exif_all['EXIF ExposureTime']['printable'], + "Aperture" : aperture, + "ISO" : exif_all['EXIF ISOSpeedRatings']['printable'], + "Focal Length" : '%s mm' % exif_all['EXIF FocalLength']['printable'], + "Date Taken" : taken, + } class MediaCommentMixin(object): @property diff --git a/mediagoblin/static/css/base.css b/mediagoblin/static/css/base.css index 0cb36753..096e2522 100644 --- a/mediagoblin/static/css/base.css +++ b/mediagoblin/static/css/base.css @@ -481,6 +481,38 @@ img.media_icon { vertical-align: sub; } +/* EXIF information */ + +#exif_content h3 { + border-bottom: 1px solid #333; +} + +#exif_camera_information { + margin-bottom: 20px; +} + +#exif_additional_info { + display: none; +} + +#exif_additional_info table { + font-size: 11px; + margin-top: 10px; +} + +#exif_additional_info td { + vertical-align: top; + padding-bottom: 5px; +} + +#exif_content .col1 { + padding-right: 20px; +} + +#exif_additional_info table tr { + margin-bottom: 10px; +} + /* navigation */ .navigation { diff --git a/mediagoblin/templates/mediagoblin/utils/exif.html b/mediagoblin/templates/mediagoblin/utils/exif.html index a89e69c8..746dccf5 100644 --- a/mediagoblin/templates/mediagoblin/utils/exif.html +++ b/mediagoblin/templates/mediagoblin/utils/exif.html @@ -17,18 +17,95 @@ #} {% block exif_content %} + + +
{% if app_config['exif_visible'] and media.media_data and media.media_data.exif_all is defined and media.media_data.exif_all %} -

EXIF

- +

Camera Information

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Taken on{{ media.exif_display_data_short()['Date Taken'] }}
Camera{{ media.exif_display_data_short()['Camera'] }}
Exposure{{ media.exif_display_data_short()['Exposure'] }}
Aperture{{ media.exif_display_data_short()['Aperture'] }}
ISO{{ media.exif_display_data_short()['ISO'] }}
Focal Length{{ media.exif_display_data_short()['Focal Length'] }}
+

+ Additional Information +

+
+ {% for key, tag in media.exif_display_iter() %} - + {% endfor %}
{{ key }}{{ key }} {{ tag.printable }}
+
{% endif %} + +
{% endblock %} -- 2.25.1