PyGuetzli
=========

|Github| |Discord| |PYPI Version| |Build Status| |License|

**PyGuetzli** is a Python binding for Google’s
`Guetzli <https://github.com/google/guetzli>`__ library.

Description of **Guetzli** from official’s repo:

   Guetzli is a JPEG encoder that aims for excellent compression density
   at high visual quality. Guetzli-generated images are typically 20-30%
   smaller than images of equivalent quality generated by libjpeg.
   Guetzli generates only sequential (nonprogressive) JPEGs due to
   faster decompression speeds they offer.


Documentation
-------------

* `Installation <https://wanadev.github.io/pyguetzli/install.html>`_
* `Guetzli Python Module <https://wanadev.github.io/pyguetzli/guetzli.html>`_
* `Using with PIL / Pillow images <https://wanadev.github.io/pyguetzli/pil_image.html>`_
* `Contributing / Reporting a bug <https://wanadev.github.io/pyguetzli/contributing.html>`_

More topics at https://wanadev.github.io/pyguetzli/


Usage Example
-------------

.. code-block:: python

   import pyguetzli

   input_jpeg = open("./test/image.jpg", "rb").read()
   optimized_jpeg = pyguetzli.process_jpeg_bytes(input_jpeg)

   output = open("./optimized.jpg", "wb")
   output.write(optimized_jpeg)


Changelog
---------

* **[NEXT]** (changes on ``master`` but not released yet):

  * Nothing yet :)

* **1.0.12:**

  * Guetzli: Fixed a crash caused by a bad access to a vector revealed when
    compiled with "-D_GLIBCXX_ASSERTIONS" (David Odin)

* **1.0.11:**

  * ``arm64`` and ``universal2`` wheels for macOS
  * ``x86`` and ``x68_64`` wheels for musl-based Linux distro (Alpine,...)
  * ``win32`` wheels for Windows (``x86_64`` were already available)

* **1.0.10:** Python 3.10 support and wheels
* **1.0.9:** Provides prebuilt wheel packages
* **1.0.8:** Updates Guetzli and python dependencies
* **1.0.7:** Fixes unicode issue when installing pyguetzli (#4)
* **1.0.6:** Fixes a typo in compilator options on unix
* **1.0.5:** Adds optimization flags when compiling Guetzli
* **1.0.4:** MS Windows support
* **1.0.3:** Updates Guetzli library
* **1.0.2**: PIL Images: fixes crash with non RGB/RGBA images
  (grayscale, indexed,…)
* **1.0.1**: Adds ``--std=c++11`` flag when building Guetzli
* **1.0.0**:

  * New and simpler API
  * Built-in function to deal with PIL / Pillow Images
  * Documentation (Sphinx)
  * Guetzli update

* **0.9.0**: Initial release


.. |Github| image:: https://img.shields.io/github/stars/wanadev/pyguetzli?label=Github&logo=github
   :target: https://github.com/wanadev/pyguetzli
.. |Discord| image:: https://img.shields.io/badge/chat-Discord-8c9eff?logo=discord&logoColor=ffffff
   :target: https://discord.gg/BmUkEdMuFp
.. |PYPI Version| image:: https://img.shields.io/pypi/v/pyguetzli.svg
   :target: https://pypi.python.org/pypi/pyguetzli
.. |Build Status| image:: https://github.com/wanadev/pyguetzli/actions/workflows/python-ci.yml/badge.svg
   :target: https://github.com/wanadev/pyguetzli/actions
.. |License| image:: https://img.shields.io/pypi/l/pyguetzli.svg
   :target: https://github.com/wanadev/pyguetzli/blob/master/LICENSE
