Merge remote-tracking branch 'refs/remotes/rodney757/reprocessing'

Conflicts:
	mediagoblin/db/migrations.py
This commit is contained in:
Christopher Allan Webber
2013-09-18 14:45:23 -05:00
4 changed files with 108 additions and 0 deletions

View File

@@ -120,6 +120,9 @@ class CommonAsciiProcessor(MediaProcessor):
thumb_size = (mgg.global_config['media:thumb']['max_width'],
mgg.global_config['media:thumb']['max_height'])
if self._skip_resizing(font, thumb_size):
return
tmp_thumb = os.path.join(
self.conversions_subdir,
self.name_builder.fill('{basename}.thumbnail.png'))
@@ -144,10 +147,33 @@ class CommonAsciiProcessor(MediaProcessor):
Image.ANTIALIAS)
thumb.save(thumb_file)
thumb_info = {'font': font,
'width': thumb_size[0],
'height': thumb_size[1]}
self.entry.set_file_metadata('thumb', **thumb_info)
_log.debug('Copying local file to public storage')
store_public(self.entry, 'thumb', tmp_thumb,
self.name_builder.fill('{basename}.thumbnail.jpg'))
def _skip_resizing(self, font, thumb_size):
thumb_info = self.entry.get_file_metadata('thumb')
if not thumb_info:
return False
skip = True
if thumb_info.get('font') != font:
skip = False
elif thumb_info.get('width') != thumb_size[0]:
skip = False
elif thumb_info.get('height') != thumb_size[1]:
skip = False
return skip
class InitialProcessor(CommonAsciiProcessor):
"""

View File

@@ -76,6 +76,14 @@ def resize_image(entry, resized, keyname, target_name, new_size,
resized.save(resized_file, quality=quality)
store_public(entry, keyname, tmp_resized_filename, target_name)
# store the thumb/medium info
image_info = {'width': new_size[0],
'height': new_size[1],
'quality': quality,
'filter': filter}
entry.set_file_metadata(keyname, **image_info)
def resize_tool(entry,
force, keyname, orig_file, target_name,
@@ -86,6 +94,13 @@ def resize_tool(entry,
max_height = mgg.global_config['media:' + keyname]['max_height']
new_size = (max_width, max_height)
# If thumb or medium is already the same quality and size, then don't
# reprocess
if _skip_resizing(entry, keyname, new_size, quality, filter):
_log.info('{0} of same size and quality already in use, skipping '
'resizing of media {1}.'.format(keyname, entry.id))
return
# If the size of the original file exceeds the specified size for the desized
# file, a target_name file is created and later associated with the media
# entry.
@@ -105,6 +120,32 @@ def resize_tool(entry,
quality, filter)
def _skip_resizing(entry, keyname, size, quality, filter):
"""
Determines wither the saved thumb or medium is of the same quality and size
"""
image_info = entry.get_file_metadata(keyname)
if not image_info:
return False
skip = True
if image_info.get('width') != size[0]:
skip = False
elif image_info.get('height') != size[1]:
skip = False
elif image_info.get('filter') != filter:
skip = False
elif image_info.get('quality') != quality:
skip = False
return skip
SUPPORTED_FILETYPES = ['png', 'gif', 'jpg', 'jpeg', 'tiff']