From f5b6839a78b27511aba1fbef74c5372e2af4a9db Mon Sep 17 00:00:00 2001 From: Neil Williams Date: Fri, 1 Jun 2012 12:11:13 -0700 Subject: [PATCH] Losslessly optimize JPEGs. Disabled by default in example.ini. Install jpegoptim or an equivalent and set the configuration properly. --- r2/example.ini | 2 ++ r2/r2/lib/media.py | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/r2/example.ini b/r2/example.ini index 5c6e59c4a..fa186cc7d 100755 --- a/r2/example.ini +++ b/r2/example.ini @@ -349,6 +349,8 @@ translator_password = takedown_sr = _takedowns # png compressor png_optimizer = /usr/bin/env optipng +# jpeg compressor +jpeg_optimizer = # -- search -- # where is solor? diff --git a/r2/r2/lib/media.py b/r2/r2/lib/media.py index 74ba7e9cf..bca6c226d 100644 --- a/r2/r2/lib/media.py +++ b/r2/r2/lib/media.py @@ -20,6 +20,8 @@ # CondeNet, Inc. All Rights Reserved. ################################################################################ +import subprocess + from pylons import g, config from r2.models.link import Link @@ -50,6 +52,13 @@ log = g.log MEDIA_FILENAME_LENGTH = 12 +def optimize_jpeg(filename, optimizer): + if optimizer: + with open(os.path.devnull, 'w') as devnull: + subprocess.check_call((optimizer, filename), + stdout=devnull) + + def thumbnail_url(link): """Given a link, returns the url for its thumbnail based on its fullname""" if link.has_thumbnail: @@ -116,6 +125,8 @@ def upload_media(image, never_expire=True, file_type='.jpg'): if file_type == ".png": optimize_png(f.name, g.png_optimizer) + elif file_type == ".jpg": + optimize_jpeg(f.name, g.jpeg_optimizer) contents = open(f.name).read() file_name = get_filename_from_content(contents) if g.media_store == "s3":