From 0f8221dca40dc8628f8b8146a2ef2043e95781c2 Mon Sep 17 00:00:00 2001 From: Bassam Date: Thu, 15 Mar 2012 12:13:44 -0400 Subject: [PATCH] fix for ticket #404 --- mediagoblin/media_types/image/processing.py | 38 +++++++++++++-------- mediagoblin/tools/exif.py | 7 ++++ 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/mediagoblin/media_types/image/processing.py b/mediagoblin/media_types/image/processing.py index 769de89b..2728ecf2 100644 --- a/mediagoblin/media_types/image/processing.py +++ b/mediagoblin/media_types/image/processing.py @@ -21,7 +21,8 @@ from mediagoblin import mg_globals as mgg from mediagoblin.processing import BadMediaFail, \ create_pub_filepath, THUMB_SIZE, MEDIUM_SIZE from mediagoblin.tools.exif import exif_fix_image_orientation, \ - extract_exif, clean_exif, get_gps_data, get_useful + extract_exif, clean_exif, get_gps_data, get_useful, \ + exif_image_needs_rotation def process_image(entry): """ @@ -32,7 +33,6 @@ def process_image(entry): conversions_subdir = os.path.join( workbench.dir, 'conversions') os.mkdir(conversions_subdir) - queued_filepath = entry.queued_media_file queued_filename = workbench.localized_file( mgg.queue_store, queued_filepath, @@ -72,24 +72,31 @@ def process_image(entry): # file, a `medium.jpg` files is created and later associated with the media # entry. medium = Image.open(queued_filename) + if medium.size[0] > MEDIUM_SIZE[0] or medium.size[1] > MEDIUM_SIZE[1] \ + or exif_image_needs_rotation(exif_tags): + + medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS) + + - # Fix orientation - medium = exif_fix_image_orientation(medium, exif_tags) + # Fix orientation + medium = exif_fix_image_orientation(medium, exif_tags) - if medium.size[0] > MEDIUM_SIZE[0] or medium.size[1] > MEDIUM_SIZE[1]: - medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS) + - medium_filename = 'medium' + extension - medium_filepath = create_pub_filepath(entry, medium_filename) + medium_filename = 'medium' + extension + medium_filepath = create_pub_filepath(entry, medium_filename) - tmp_medium_filename = os.path.join( - conversions_subdir, medium_filename) + tmp_medium_filename = os.path.join( + conversions_subdir, medium_filename) - with file(tmp_medium_filename, 'w') as medium_file: - medium.save(medium_file) + with file(tmp_medium_filename, 'w') as medium_file: + medium.save(medium_file) - mgg.public_store.copy_local_to_storage( - tmp_medium_filename, medium_filepath) + mgg.public_store.copy_local_to_storage( + tmp_medium_filename, medium_filepath) + else: + medium_filepath = None # we have to re-read because unlike PIL, not everything reads # things in string representation :) @@ -111,7 +118,8 @@ def process_image(entry): media_files_dict = entry.setdefault('media_files', {}) media_files_dict['thumb'] = thumb_filepath media_files_dict['original'] = original_filepath - media_files_dict['medium'] = medium_filepath + if medium_filepath: + media_files_dict['medium'] = medium_filepath # Insert exif data into database media_data = entry.setdefault('media_data', {}) diff --git a/mediagoblin/tools/exif.py b/mediagoblin/tools/exif.py index de6dd128..448a342e 100644 --- a/mediagoblin/tools/exif.py +++ b/mediagoblin/tools/exif.py @@ -32,6 +32,13 @@ USEFUL_TAGS = [ 'EXIF UserComment', ] +def exif_image_needs_rotation(exif_tags): + """ + Returns True if EXIF orientation requires rotation + """ + return 'Image Orientation' in exif_tags \ + and exif_tags['Image Orientation'].values[0] != 1 + def exif_fix_image_orientation(im, exif_tags): """ Translate any EXIF orientation to raw orientation -- 2.25.1