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 pngquant
like 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.