18 August 2015 0 comments Python
optisorl is a Python package for sorl-thumbnail which is a kick-ass Python package for Django.
sorl-thumbnail is pretty popular and used by a lot of people who have images they want to display as thumbnails.
A problem you find is that oftentimes the PNG thumbnails aren't as optimized as they can be. A great tool for having a second optimization pass on an PNG file is pngquant. You basically, run it like this:
$ ls -l bugzilla.png -rw-r--r--@ 1 peterbe staff 12188 Dec 12 2014 bugzilla.png $ pngquant bugzilla.png :~/Downloads$ ls -l bugzilla-fs8.png -rw-r--r--@ 1 peterbe staff 6630 Aug 18 13:15 bugzilla-fs8.png
That's a 140x140 pixel PNG that became 5,558 bytes smaller (46% saving).
Anyway, this is where
optisorl comes in. It's an extension to
sorl-thumbnail that is able to execute
pngquant on the PNG right after the thumbnail file has been created. It does so by calling out a sub-process command to
pngquant. See the code here which is all the magic there is to it really.
The reason I built this was to reduce the images on Air Mozilla. At the time I did the measurement, the PNGs total weight on the home page was 129KB and after running them all through
optisorl the total weight was only 65KB.
To install, it just pip install it like so:
$ pip install optisorl
And you need to install
brew install pngquant or
apt-get install pngquant.
Then, to activate it you need to set this Django setting:
THUMBNAIL_BACKEND = 'optisorl.backend.OptimizingThumbnailBackend'
If you decide to put the
pngquant executable somewhere not on the
PATH you can add to your
settings.py file something like this:
PNGQUANT_LOCATION = '/path/to/bin/pngquant'
There's a bunch of features it doesn't have but we can work together on that. For example, there are certain PNG images that you might want to display as thumbnails but due to something about the image, e.g. its use of Alpha channels, you might want to explicitly disable optimizations.