{ "info": { "author": "Peter Bengtsson", "author_email": "mail@peterbe.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "optisorl\n========\n\nCopyright Peter Bengtsson, mail@peterbe.com, 2015-2016\n\n|Travis|\n\nLicense: BSD\n\nAbout optisorl\n--------------\n\n`sorl-thumbnail `_ is a\ngreat Django library that takes your stored images and automatically\nconvert them into desired sized thumbnails and store them with nice\nnames in the ``MEDIA_ROOT``. The problem is that the engines that do\nthe resizing often doesn't do an amazing job of optimizing them.\nUsually optimizing an image means carefully deleting things the human\neye can't notice anyway. This becomes incredibly relevant when the\nthumbnail you create is so small in resolution that the user really\nstands very little chance to notice.\n\nThis package, is a pluggable backend to ``sorl-thumbnail`` that\nattempts to do a good job of optimizing the generated thumbnail just\nright after it has been written to disk.\n\nInstallation\n------------\n\nFirst, simply `pip install optisorl`.\n\nThen add, in your Django settings::\n\n THUMBNAIL_BACKEND = 'optisorl.backend.OptimizingThumbnailBackend'\n\nThen review the sections below about being prepared for PNGs, GIFs and JPEGs. \n\nOptimizing PNGs\n---------------\n\n``optisorl`` uses a binary called `pngquant `_\nwhich is a command line tool that do lossy compression of PNG images\nand supports alpha transparency. ``pngquant`` is\nBSD licensed. It's easy to install on most systems. For example\n``brew install pngquant`` or ``apt-get install pngquant``.\n\nWhat happens is that when ``optisorl`` notices that a thumbnail was\ncreated it (and stored in ``MEDIA_ROOT``) it then takes that file and\nexecutes ``pngquant`` something like this:\n\n::\n\n pngquant -o /path/file.tmp.png --skip-if-larger -- /path/file.png\n\nNote the ``--skip-if-larger`` which means that if the thumbnail is really\nreally small already the resulting optimization might not be any better\nand it thus omits doing an optimization.\n\nIf you want to override the location of the executable ``pngquant`` you\ncan set this setting for example:\n\n.. code:: python\n\n # in settings.py or equivalent\n\n PNGQUANT_LOCATION = '/opt/special/bin/pngquant2.0'\n\n\nOptimizing GIFs\n---------------\n\n``optisorl`` uses `gifsicle `_ with\nlevel 3 optimization. ``gifsicle`` is GPL licensed but use is not\nrestricted by a license. To install it use ``brew install gifsicle``\nor ``apt-get install gifsicle``.\n\nTo override where the ``gifsicle`` executable is located you can set\nin your settings:\n\n.. code:: python\n\n # in settings.py or equivalent\n\n GIFSICLE_LOCATION = '/opt/special/bin/gifsicle'\n\n\nIf you want to disable all optimization of GIFs just set\n``GIFSICLE_LOCATION`` (in your ``settings.py``) to ``None`` or ``False``.\n\n\nOptimizing JPEGs\n----------------\n\n``optisorl`` uses `mozjpeg `_ to\noptimize JPEGs. It's a great fit because it almost never reduces\nthe quality such that human eyes can notice it. Especially when the\nthumbnails are relatively small. The command that we use to execute\n``mozjpeg`` looks like this::\n\n mozjpeg -outfile DESTINATION -optimise SOURCE\n\nYou can override where the executable is by setting:\n\n.. code:: python\n\n # in settings.py or equivalent\n\n MOZJPEG_LOCATION = '/my/bin/mozjpeg'\n\nFor an example of what kind of results you can get with ``mozjpeg``\nsee this blog post:\n`Examples of mozjpeg savings `_.\nAlso see blog post `mozjpeg installation and sample `_.\n\nLimitations\n-----------\n\nHelp is most welcome. At the moment...\n\n* Does not support S3 storage\n\n* Unable to NOT optimize images in run-time\n\n* Not possible to override certain ``pngquant`` parameters\n\n* Not possible to override certain ``gifsicle`` parameters\n\n* Not possible to override certain ``mozjpeg`` parameters\n\n\n.. |Travis| image:: https://travis-ci.org/peterbe/optisorl.png?branch=master\n :target: https://travis-ci.org/peterbe/optisorl", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/peterbe/optisorl", "keywords": null, "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "optisorl", "package_url": "https://pypi.org/project/optisorl/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/optisorl/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/peterbe/optisorl" }, "release_url": "https://pypi.org/project/optisorl/0.2.1/", "requires_dist": null, "requires_python": null, "summary": "Backend plugin for sorl-thumbnail that optimizes thumbnails", "version": "0.2.1" }, "last_serial": 2061862, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "cf0e2d314aa8cc4e035a3b9a0674a471", "sha256": "908aa59518b46e9706b40c2bb60c5d3314ebb05cb7ced08c65c202a0761e94e0" }, "downloads": -1, "filename": "optisorl-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "cf0e2d314aa8cc4e035a3b9a0674a471", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5376, "upload_time": "2015-08-14T23:42:20", "url": "https://files.pythonhosted.org/packages/8e/46/942cd7d1c8ccbe4f712019e0784b3fea2f78852eb262d172a029de0f4515/optisorl-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d415644c6d172218d203df2f0adc6bfd", "sha256": "4f214a66f29000b037bd391b2db247b461453eee4f2a9d4db6b31af85d4d6911" }, "downloads": -1, "filename": "optisorl-0.1.0.tar.gz", "has_sig": false, "md5_digest": "d415644c6d172218d203df2f0adc6bfd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3589, "upload_time": "2015-08-14T23:42:16", "url": "https://files.pythonhosted.org/packages/8c/08/893c5997b5f0238037aa13311705e6686b6a492be0eb5393a7aadfe9f283/optisorl-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "56f6da0068d2f6a652252920ddb29229", "sha256": "990866cf4252a9234f1f97aca563928fdcdc5a1fe9687eb1506071e819ed6d78" }, "downloads": -1, "filename": "optisorl-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "56f6da0068d2f6a652252920ddb29229", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5376, "upload_time": "2015-08-15T14:00:34", "url": "https://files.pythonhosted.org/packages/f2/76/058d3fca378545bf7d5369a5c2af178181d0bd53baf3528274fcb3df0974/optisorl-0.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d2b262e740888fd2618cae822e296730", "sha256": "a51caf458b2071daa7ed582fe2624c2533710f3fb0393923f1648aa01d78b3b4" }, "downloads": -1, "filename": "optisorl-0.1.1.tar.gz", "has_sig": false, "md5_digest": "d2b262e740888fd2618cae822e296730", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3566, "upload_time": "2015-08-15T14:00:38", "url": "https://files.pythonhosted.org/packages/da/57/d8298e5ff2b4fd10558f4e6c76a57322469e7e58a0e3c3d24a1ab75f3031/optisorl-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "85bbb315ef8dec1d23735308c24df6b6", "sha256": "e7b9d08fb81b10e2406a188641e73ac1c9bf77a6fc4d9819ca587055548a7ea2" }, "downloads": -1, "filename": "optisorl-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "85bbb315ef8dec1d23735308c24df6b6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5841, "upload_time": "2015-08-27T17:08:58", "url": "https://files.pythonhosted.org/packages/b7/9a/a8daca90b569e088ab25b3f045ce95eca76aea56949e4bdda485efa29602/optisorl-0.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16be549e21241292b03b7cfd282d8366", "sha256": "6845277bbf1b3d733510145a04f464baab0b9ae9f9a78da70b499654a0a5a7e9" }, "downloads": -1, "filename": "optisorl-0.1.2.tar.gz", "has_sig": false, "md5_digest": "16be549e21241292b03b7cfd282d8366", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3873, "upload_time": "2015-08-27T17:09:02", "url": "https://files.pythonhosted.org/packages/1c/de/23072ea06284b92f19d809e2a82f7670ca3f125857cb0f8dd4232992f03c/optisorl-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "cc54e516167dcf2b2358f6a25bc3a677", "sha256": "9981d0bde8b9700453d6f69d4d005e7fd7f00bcc84de4249dc5c7724ada53dcb" }, "downloads": -1, "filename": "optisorl-0.1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "cc54e516167dcf2b2358f6a25bc3a677", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 6412, "upload_time": "2015-09-01T18:18:36", "url": "https://files.pythonhosted.org/packages/10/7e/a1c22766302f6c41d0976441169cf5e15d0733927aac46150f35747b14e3/optisorl-0.1.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e75595206c83aff28d52b8d577187e4a", "sha256": "e4f5f1f65a5d7a792b1ed9b37f187594d0d82154a8594d234dc0551d77b9fadc" }, "downloads": -1, "filename": "optisorl-0.1.3.tar.gz", "has_sig": false, "md5_digest": "e75595206c83aff28d52b8d577187e4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4265, "upload_time": "2015-09-01T18:18:39", "url": "https://files.pythonhosted.org/packages/21/29/f9ce5b3406f241840f09e588dcbe5fdb8b5ac4c2af68cf17889223803967/optisorl-0.1.3.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "a23d7148e36a26e0dcb5db205ca961d6", "sha256": "808f22b6d4da608a255f40792e80cf8483f443425dbcb5f18ebe236295c19bbf" }, "downloads": -1, "filename": "optisorl-0.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "a23d7148e36a26e0dcb5db205ca961d6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6803, "upload_time": "2016-04-13T13:48:25", "url": "https://files.pythonhosted.org/packages/e9/19/17cf3bca1ba63dc633f5d146057f06096946a5c49f6ba4990f860d89010f/optisorl-0.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a330f29e4373193376494a427fa2f43", "sha256": "4b18d8a270075aa0fe9588790162c03a80e822237e3346a2817d6e82236f1a49" }, "downloads": -1, "filename": "optisorl-0.2.1.tar.gz", "has_sig": false, "md5_digest": "8a330f29e4373193376494a427fa2f43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4532, "upload_time": "2016-04-13T13:48:14", "url": "https://files.pythonhosted.org/packages/d2/63/4bbbaa95e5ccf5f39ea723714aa2e1ae861e1ce8cf408a874d7aed5d7aeb/optisorl-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a23d7148e36a26e0dcb5db205ca961d6", "sha256": "808f22b6d4da608a255f40792e80cf8483f443425dbcb5f18ebe236295c19bbf" }, "downloads": -1, "filename": "optisorl-0.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "a23d7148e36a26e0dcb5db205ca961d6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6803, "upload_time": "2016-04-13T13:48:25", "url": "https://files.pythonhosted.org/packages/e9/19/17cf3bca1ba63dc633f5d146057f06096946a5c49f6ba4990f860d89010f/optisorl-0.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a330f29e4373193376494a427fa2f43", "sha256": "4b18d8a270075aa0fe9588790162c03a80e822237e3346a2817d6e82236f1a49" }, "downloads": -1, "filename": "optisorl-0.2.1.tar.gz", "has_sig": false, "md5_digest": "8a330f29e4373193376494a427fa2f43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4532, "upload_time": "2016-04-13T13:48:14", "url": "https://files.pythonhosted.org/packages/d2/63/4bbbaa95e5ccf5f39ea723714aa2e1ae861e1ce8cf408a874d7aed5d7aeb/optisorl-0.2.1.tar.gz" } ] }