From bd0144d528992dea626d61ce1395c32baa2e7c43 Mon Sep 17 00:00:00 2001 From: Andre D Date: Wed, 26 Oct 2011 16:12:21 -0400 Subject: [PATCH] Fix issues in uploaded subreddit image processing. * Large jpg files (above 64k) will no longer fail. * PNG to PNG no longer processes through PIL. --- r2/r2/lib/media.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/r2/r2/lib/media.py b/r2/r2/lib/media.py index 6ac8d72fc..c6b06f68a 100644 --- a/r2/r2/lib/media.py +++ b/r2/r2/lib/media.py @@ -94,18 +94,25 @@ def upload_media(image, never_expire=True, file_type='.jpg'): f = tempfile.NamedTemporaryFile(suffix=file_type, delete=False) try: img = image + do_convert = True if isinstance(img, basestring): img = str_to_image(img) - - if not img.mode == 'RGBA': # Indexed images will not convert properly - img = img.convert('RGBA') + if img.format == "PNG" and file_type == ".png": + img.verify() + f.write(image) + f.close() + do_convert = False - if file_type == ".jpg": - # PIL does not play nice when converting alpha channels to jpg - background = Image.new('RGBA', img.size, (255, 255, 255)) - background.paste(img, img) - img = background.convert('RGB') - img.save(f, quality=85, optimize=True) + if do_convert: + img = img.convert('RGBA') + if file_type == ".jpg": + # PIL does not play nice when converting alpha channels to jpg + background = Image.new('RGBA', img.size, (255, 255, 255)) + background.paste(img, img) + img = background.convert('RGB') + img.save(f, quality=85) # Bug in the JPG encoder with the optimize flag, even if set to false + else: + img.save(f, optimize=True) if file_type == ".png": optimize_png(f.name, g.png_optimizer)