139 lines
5.9 KiB
Text
139 lines
5.9 KiB
Text
|
|
Metadata-Version: 2.4
|
||
|
|
Name: Willow
|
||
|
|
Version: 1.11.0
|
||
|
|
Summary: A Python image library that sits on top of Pillow, Wand and OpenCV
|
||
|
|
Keywords: Imaging
|
||
|
|
Author-email: Karl Hobley <karl@kaed.uk>
|
||
|
|
Maintainer-email: Wagtail Core team <hello@wagtail.org>
|
||
|
|
Requires-Python: >=3.9
|
||
|
|
Description-Content-Type: text/markdown
|
||
|
|
Classifier: Development Status :: 5 - Production/Stable
|
||
|
|
Classifier: Topic :: Multimedia :: Graphics
|
||
|
|
Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion
|
||
|
|
Classifier: Intended Audience :: Developers
|
||
|
|
Classifier: License :: OSI Approved :: BSD License
|
||
|
|
Classifier: Operating System :: OS Independent
|
||
|
|
Classifier: Programming Language :: Python
|
||
|
|
Classifier: Programming Language :: Python :: 3
|
||
|
|
Classifier: Programming Language :: Python :: 3 :: Only
|
||
|
|
Classifier: Programming Language :: Python :: 3.9
|
||
|
|
Classifier: Programming Language :: Python :: 3.10
|
||
|
|
Classifier: Programming Language :: Python :: 3.11
|
||
|
|
Classifier: Programming Language :: Python :: 3.12
|
||
|
|
Classifier: Programming Language :: Python :: 3.13
|
||
|
|
License-File: LICENSE
|
||
|
|
Requires-Dist: filetype>=1.0.10,!=1.1.0
|
||
|
|
Requires-Dist: defusedxml>=0.7,<1.0
|
||
|
|
Requires-Dist: Sphinx>=7.0 ; extra == "docs"
|
||
|
|
Requires-Dist: sphinx-wagtail-theme>=6.1.1,<7.0 ; extra == "docs"
|
||
|
|
Requires-Dist: sphinxcontrib-spelling>=8.0,<9.0 ; extra == "docs"
|
||
|
|
Requires-Dist: sphinx_copybutton>=0.5 ; extra == "docs"
|
||
|
|
Requires-Dist: pillow-heif>=0.10.0 ; extra == "heif" and ( python_version < '3.12')
|
||
|
|
Requires-Dist: pillow-heif>=0.13.0 ; extra == "heif" and ( python_version >= '3.12')
|
||
|
|
Requires-Dist: Pillow>=11.3.0,<12.0.0 ; extra == "pillow"
|
||
|
|
Requires-Dist: willow[pillow, wand, heif] ; extra == "testing"
|
||
|
|
Requires-Dist: coverage[toml]>=7.2.7,<8.0 ; extra == "testing"
|
||
|
|
Requires-Dist: pre-commit>=3.4.0 ; extra == "testing"
|
||
|
|
Requires-Dist: Wand>=0.6,<1.0 ; extra == "wand"
|
||
|
|
Project-URL: Changelog, https://willow.wagtail.org/latest/changelog.html
|
||
|
|
Project-URL: Documentation, https://willow.wagtail.org/
|
||
|
|
Project-URL: Source, https://github.com/wagtail/Willow
|
||
|
|
Provides-Extra: docs
|
||
|
|
Provides-Extra: heif
|
||
|
|
Provides-Extra: pillow
|
||
|
|
Provides-Extra: testing
|
||
|
|
Provides-Extra: wand
|
||
|
|
|
||
|
|
# [Willow image library](https://pypi.org/project/Willow/)
|
||
|
|
|
||
|
|
[](https://pypi.org/project/Willow/)
|
||
|
|
[](https://pypi.org/project/Willow/)
|
||
|
|
[](https://github.com/wagtail/Willow/actions)
|
||
|
|
|
||
|
|
A wrapper that combines the functionality of multiple Python image libraries into one API.
|
||
|
|
|
||
|
|
[Documentation](https://willow.wagtail.org)
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
Willow is a simple image library that combines the APIs of [Pillow](https://pillow.readthedocs.io/), [Wand](https://docs.wand-py.org) and [OpenCV](https://opencv.org/).
|
||
|
|
It converts the image between the libraries when necessary.
|
||
|
|
|
||
|
|
Willow currently has basic resize and crop operations, face and feature detection and animated GIF support.
|
||
|
|
New operations and library integrations can also be [easily implemented](https://willow.wagtail.org/latest/guide/extend.html).
|
||
|
|
|
||
|
|
The library is written in pure Python and supports versions 3.9, 3.10, 3.11, 3.12, and 3.13.
|
||
|
|
|
||
|
|
## Examples
|
||
|
|
|
||
|
|
### Resizing an image
|
||
|
|
|
||
|
|
```python
|
||
|
|
from willow.image import Image
|
||
|
|
|
||
|
|
f = open('test.png', 'rb')
|
||
|
|
img = Image.open(f)
|
||
|
|
|
||
|
|
# Resize the image to 100x100 pixels
|
||
|
|
img = img.resize((100, 100))
|
||
|
|
|
||
|
|
# Save it
|
||
|
|
with open('test_thumbnail.png', 'wb') as out:
|
||
|
|
img.save_as_png(out)
|
||
|
|
```
|
||
|
|
|
||
|
|
This will open the image file with Pillow or Wand (if Pillow is unavailable).
|
||
|
|
|
||
|
|
It will then resize it to 100x100 pixels and save it back out as a PNG file.
|
||
|
|
|
||
|
|
### Detecting faces
|
||
|
|
|
||
|
|
```python
|
||
|
|
from willow.image import Image
|
||
|
|
|
||
|
|
f = open('photo.png', 'rb')
|
||
|
|
img = Image.open(f)
|
||
|
|
|
||
|
|
# Find faces
|
||
|
|
faces = img.detect_faces()
|
||
|
|
```
|
||
|
|
|
||
|
|
Like above, the image file will be loaded with either Pillow or Wand.
|
||
|
|
|
||
|
|
As neither Pillow nor Wand support detecting faces, Willow would automatically convert the image to OpenCV and use that to perform the detection.
|
||
|
|
|
||
|
|
## Available operations
|
||
|
|
|
||
|
|
[Documentation](https://willow.wagtail.org/latest/guide/operations.html)
|
||
|
|
|
||
|
|
| Operation | Pillow | Wand | OpenCV |
|
||
|
|
| ------------------------------------------------ | ------ | ---- | ------ |
|
||
|
|
| `get_size()` | ✓ | ✓ | ✓ |
|
||
|
|
| `get_frame_count()` | ✓\*\* | ✓ | ✓\*\* |
|
||
|
|
| `resize(size)` | ✓ | ✓ | |
|
||
|
|
| `crop(rect)` | ✓ | ✓ | |
|
||
|
|
| `rotate(angle)` | ✓ | ✓ | |
|
||
|
|
| `set_background_color_rgb(color)` | ✓ | ✓ | |
|
||
|
|
| `transform_colorspace_to_srgb(rendering_intent)` | ✓ | | |
|
||
|
|
| `auto_orient()` | ✓ | ✓ | |
|
||
|
|
| `save_as_jpeg(file, quality)` | ✓ | ✓ | |
|
||
|
|
| `save_as_png(file)` | ✓ | ✓ | |
|
||
|
|
| `save_as_gif(file)` | ✓ | ✓ | |
|
||
|
|
| `save_as_webp(file, quality)` | ✓ | ✓ | |
|
||
|
|
| `save_as_heic(file, quality, lossless)` | ✓⁺ | | |
|
||
|
|
| `save_as_avif(file, quality, lossless)` | ✓ | ✓ | |
|
||
|
|
| `save_as_ico(file)` | ✓ | ✓ | |
|
||
|
|
| `has_alpha()` | ✓ | ✓ | ✓\* |
|
||
|
|
| `has_animation()` | ✓\* | ✓ | ✓\* |
|
||
|
|
| `get_pillow_image()` | ✓ | | |
|
||
|
|
| `get_wand_image()` | | ✓ | |
|
||
|
|
| `detect_features()` | | | ✓ |
|
||
|
|
| `detect_faces(cascade_filename)` | | | ✓ |
|
||
|
|
|
||
|
|
\* Always returns `False`
|
||
|
|
|
||
|
|
\*\* Always returns `1`
|
||
|
|
|
||
|
|
⁺ Requires the [pillow-heif](https://pypi.org/project/pillow-heif/) library
|
||
|
|
|