chore(deps): update dependency pillow to v12 #36

Closed
renovate-bot wants to merge 2 commits from renovate/pillow-12.x into main
Contributor

This PR contains the following updates:

Package Change Age Confidence
Pillow (changelog) ==11.0.0==12.3.0 age confidence

Release Notes

python-pillow/Pillow (Pillow)

v12.3.0

Compare Source

https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html

Removals

Documentation

Dependencies

Testing

Type hints

Other changes

v12.2.0

Compare Source

https://pillow.readthedocs.io/en/stable/releasenotes/12.2.0.html

Documentation

Dependencies

Testing

Other changes

v12.1.1

Compare Source

https://pillow.readthedocs.io/en/stable/releasenotes/12.1.1.html

Dependencies

Other changes

v12.1.0

Compare Source

https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html

Deprecations

Documentation

Dependencies

Testing

Type hints

Other changes

v12.0.0

Compare Source

https://pillow.readthedocs.io/en/stable/releasenotes/12.0.0.html

Removals

Deprecations

Documentation

Dependencies

Testing

Type hints

Other changes

v11.3.0

Compare Source

https://pillow.readthedocs.io/en/stable/releasenotes/11.3.0.html

Deprecations

Documentation

Dependencies

Testing

Type hints

Other changes

v11.2.1

Compare Source

https://pillow.readthedocs.io/en/stable/releasenotes/11.2.1.html

Deprecations

Documentation

Dependencies

Testing

Type hints

Other changes

v11.1.0

Compare Source

See GitHub Releases:


Configuration

📅 Schedule: (in timezone America/New_York)

  • Branch creation
    • "before 6am on monday"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [Pillow](https://github.com/python-pillow/Pillow) ([changelog](https://github.com/python-pillow/Pillow/releases)) | `==11.0.0` → `==12.3.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/pillow/12.3.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pillow/11.0.0/12.3.0?slim=true) | --- ### Release Notes <details> <summary>python-pillow/Pillow (Pillow)</summary> ### [`v12.3.0`](https://github.com/python-pillow/Pillow/releases/tag/12.3.0) [Compare Source](https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0) <https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html> #### Removals - Remove non-image ImageCms modes [#&#8203;9697](https://github.com/python-pillow/Pillow/issues/9697) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Documentation - Add release notes for SBOM and performance improvements [#&#8203;9747](https://github.com/python-pillow/Pillow/issues/9747) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add security release notes [#&#8203;9741](https://github.com/python-pillow/Pillow/issues/9741) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add release notes for Python 3.15 beta wheels [#&#8203;9696](https://github.com/python-pillow/Pillow/issues/9696) \[[@&#8203;radarhere](https://github.com/radarhere)] - ImageFont can also be used with ImageText [#&#8203;9597](https://github.com/python-pillow/Pillow/issues/9597) \[[@&#8203;radarhere](https://github.com/radarhere)] - Additional guidelines for security reports [#&#8203;9659](https://github.com/python-pillow/Pillow/issues/9659) \[[@&#8203;wiredfool](https://github.com/wiredfool)] - Fixed typo [#&#8203;9636](https://github.com/python-pillow/Pillow/issues/9636) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added CVEs to 12.2.0 release notes [#&#8203;9591](https://github.com/python-pillow/Pillow/issues/9591) \[[@&#8203;radarhere](https://github.com/radarhere)] - Revise development support information in README [#&#8203;9583](https://github.com/python-pillow/Pillow/issues/9583) \[[@&#8203;aclark4life](https://github.com/aclark4life)] - Add INCIDENT\_RESPONSE.md [#&#8203;9555](https://github.com/python-pillow/Pillow/issues/9555) \[[@&#8203;aclark4life](https://github.com/aclark4life)] - Add STRIDE threat model to security docs [#&#8203;9562](https://github.com/python-pillow/Pillow/issues/9562) \[[@&#8203;aclark4life](https://github.com/aclark4life)] - Add CVEs to 12.2.0 release notes [#&#8203;9556](https://github.com/python-pillow/Pillow/issues/9556) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update README with revised security policy [#&#8203;9553](https://github.com/python-pillow/Pillow/issues/9553) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update security policy [#&#8203;9552](https://github.com/python-pillow/Pillow/issues/9552) \[[@&#8203;aclark4life](https://github.com/aclark4life)] - Update macOS tested Python versions [#&#8203;9534](https://github.com/python-pillow/Pillow/issues/9534) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Dependencies - Update dependency harfbuzz to v14.2.1 [#&#8203;9720](https://github.com/python-pillow/Pillow/issues/9720) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency mypy to v2 [#&#8203;9653](https://github.com/python-pillow/Pillow/issues/9653) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency cibuildwheel to v4 [#&#8203;9665](https://github.com/python-pillow/Pillow/issues/9665) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update github-actions [#&#8203;9655](https://github.com/python-pillow/Pillow/issues/9655) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency libavif to v1.4.2 [#&#8203;9652](https://github.com/python-pillow/Pillow/issues/9652) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency lcms2 to v2.19.1 [#&#8203;9651](https://github.com/python-pillow/Pillow/issues/9651) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency check-jsonschema to v0.37.2 [#&#8203;9650](https://github.com/python-pillow/Pillow/issues/9650) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update google/oss-fuzz digest to [`d872252`](https://github.com/python-pillow/Pillow/commit/d872252) [#&#8203;9614](https://github.com/python-pillow/Pillow/issues/9614) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency lcms2 to v2.19 [#&#8203;9609](https://github.com/python-pillow/Pillow/issues/9609) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency libpng to v1.6.58 - autoclosed [#&#8203;9608](https://github.com/python-pillow/Pillow/issues/9608) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency harfbuzz to v14 [#&#8203;9610](https://github.com/python-pillow/Pillow/issues/9610) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency mypy to v1.20.2 [#&#8203;9599](https://github.com/python-pillow/Pillow/issues/9599) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update github-actions [#&#8203;9611](https://github.com/python-pillow/Pillow/issues/9611) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency cibuildwheel to v3.4.1 [#&#8203;9607](https://github.com/python-pillow/Pillow/issues/9607) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Move dependency versions to single JSON and enable Renovate [#&#8203;9559](https://github.com/python-pillow/Pillow/issues/9559) \[[@&#8203;hugovk](https://github.com/hugovk)] - Updated raqm to 0.10.5 [#&#8203;9557](https://github.com/python-pillow/Pillow/issues/9557) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency cibuildwheel to v3.4.0 [#&#8203;9532](https://github.com/python-pillow/Pillow/issues/9532) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] #### Testing - Remove matrix.os from benchmark [#&#8203;9735](https://github.com/python-pillow/Pillow/issues/9735) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove references to libavif patch [#&#8203;9734](https://github.com/python-pillow/Pillow/issues/9734) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add benchmark tests [#&#8203;9654](https://github.com/python-pillow/Pillow/issues/9654) \[[@&#8203;akx](https://github.com/akx)] - Use reshape() instead of setting NumPy array shape directly [#&#8203;9728](https://github.com/python-pillow/Pillow/issues/9728) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add dependencies.json to Windows cache key [#&#8203;9721](https://github.com/python-pillow/Pillow/issues/9721) \[[@&#8203;radarhere](https://github.com/radarhere)] - Increase AVIF test epsilon for loong64 [#&#8203;9714](https://github.com/python-pillow/Pillow/issues/9714) \[[@&#8203;wszqkzqk](https://github.com/wszqkzqk)] - Add colour to Linux and Windows wheel build logs [#&#8203;9677](https://github.com/python-pillow/Pillow/issues/9677) \[[@&#8203;hugovk](https://github.com/hugovk)] - Do not test NumPy against Python 3.15 Windows AMD64 wheels [#&#8203;9674](https://github.com/python-pillow/Pillow/issues/9674) \[[@&#8203;radarhere](https://github.com/radarhere)] - Run pyroma in `tox -e lint` instead of pytest [#&#8203;9670](https://github.com/python-pillow/Pillow/issues/9670) \[[@&#8203;hugovk](https://github.com/hugovk)] - Update Ghostscript to 10.7.1 [#&#8203;9634](https://github.com/python-pillow/Pillow/issues/9634) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update free-threading CI [#&#8203;9625](https://github.com/python-pillow/Pillow/issues/9625) \[[@&#8203;hugovk](https://github.com/hugovk)] - Increase AVIF test epsilon for riscv64 [#&#8203;9606](https://github.com/python-pillow/Pillow/issues/9606) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add Fedora 44 [#&#8203;9594](https://github.com/python-pillow/Pillow/issues/9594) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test Ubuntu 26.04 LTS (Resolute Raccoon) [#&#8203;9587](https://github.com/python-pillow/Pillow/issues/9587) \[[@&#8203;hugovk](https://github.com/hugovk)] - Skip EPS test\_1 for Ghostscript 10.06.0 [#&#8203;9588](https://github.com/python-pillow/Pillow/issues/9588) \[[@&#8203;radarhere](https://github.com/radarhere)] - Catch subprocess.CalledProcessError in test\_grab\_x11 [#&#8203;9578](https://github.com/python-pillow/Pillow/issues/9578) \[[@&#8203;radarhere](https://github.com/radarhere)] - Correct feature name [#&#8203;9542](https://github.com/python-pillow/Pillow/issues/9542) \[[@&#8203;radarhere](https://github.com/radarhere)] - Skip test if FreeType is not available [#&#8203;9540](https://github.com/python-pillow/Pillow/issues/9540) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove type hint ignore [#&#8203;9538](https://github.com/python-pillow/Pillow/issues/9538) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update macOS tested Python versions [#&#8203;9534](https://github.com/python-pillow/Pillow/issues/9534) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove Debian 12 and Fedora 42 from CI [#&#8203;9530](https://github.com/python-pillow/Pillow/issues/9530) \[[@&#8203;hugovk](https://github.com/hugovk)] - Remove manylinux2014 and Amazon Linux 2 [#&#8203;9528](https://github.com/python-pillow/Pillow/issues/9528) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Type hints - Use NumPy 2.4.6 for mypy [#&#8203;9705](https://github.com/python-pillow/Pillow/issues/9705) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency mypy to v2 [#&#8203;9653](https://github.com/python-pillow/Pillow/issues/9653) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update putpixel type hint to allow lists in xy [#&#8203;9585](https://github.com/python-pillow/Pillow/issues/9585) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove type hint ignore [#&#8203;9538](https://github.com/python-pillow/Pillow/issues/9538) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Other changes - Speed up ImageChops operations [#&#8203;9738](https://github.com/python-pillow/Pillow/issues/9738) \[[@&#8203;akx](https://github.com/akx)] - Speed up `Image.filter()` [#&#8203;9736](https://github.com/python-pillow/Pillow/issues/9736) \[[@&#8203;akx](https://github.com/akx)] - Speed up `Image.getchannel()`, `Image.merge()`, `Image.putalpha()` and `Image.split()` [#&#8203;9675](https://github.com/python-pillow/Pillow/issues/9675) \[[@&#8203;akx](https://github.com/akx)] - Speed up `Image.fill()`, `Image.linear_gradient()` and `Image.radial_gradient()`. [#&#8203;9737](https://github.com/python-pillow/Pillow/issues/9737) \[[@&#8203;akx](https://github.com/akx)] - Speed up `Image.resample()` [#&#8203;9739](https://github.com/python-pillow/Pillow/issues/9739) \[[@&#8203;akx](https://github.com/akx)] - Speed up `alpha_composite`, `matrix`, `negative`, `quantize` [#&#8203;9740](https://github.com/python-pillow/Pillow/issues/9740) \[[@&#8203;akx](https://github.com/akx)] - Remove PyErr\_Clear() of "weird" exceptions [#&#8203;9730](https://github.com/python-pillow/Pillow/issues/9730) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check realloc return value [#&#8203;9722](https://github.com/python-pillow/Pillow/issues/9722) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add max\_length to PdfStream decode() [#&#8203;9718](https://github.com/python-pillow/Pillow/issues/9718) \[[@&#8203;radarhere](https://github.com/radarhere)] - Return early when there is no fill region [#&#8203;9732](https://github.com/python-pillow/Pillow/issues/9732) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow error to be raised if PyDict\_SetItemString fails [#&#8203;9731](https://github.com/python-pillow/Pillow/issues/9731) \[[@&#8203;radarhere](https://github.com/radarhere)] - Speed up `Image.blend()` [#&#8203;9649](https://github.com/python-pillow/Pillow/issues/9649) \[[@&#8203;akx](https://github.com/akx)] - Raise OverflowError if number of vertices is too large for Path [#&#8203;9729](https://github.com/python-pillow/Pillow/issues/9729) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove unused HSV and LAB matrix conversion from C [#&#8203;9724](https://github.com/python-pillow/Pillow/issues/9724) \[[@&#8203;radarhere](https://github.com/radarhere)] - Prevent reusing ImagingDecoderObject.setimage [#&#8203;9656](https://github.com/python-pillow/Pillow/issues/9656) \[[@&#8203;Serotav](https://github.com/Serotav)] - Raise ValueError if FPX tile size is not 64px by 64px [#&#8203;9660](https://github.com/python-pillow/Pillow/issues/9660) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only clear error if it is BufferError [#&#8203;9727](https://github.com/python-pillow/Pillow/issues/9727) \[[@&#8203;radarhere](https://github.com/radarhere)] - Apply XOR mask to 1 and L mode CUR images [#&#8203;9641](https://github.com/python-pillow/Pillow/issues/9641) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not raise error from unknown channel ID when parsing PSD layers [#&#8203;9644](https://github.com/python-pillow/Pillow/issues/9644) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise ValueError if P;2L or P;4L data is truncated in frombytes() [#&#8203;9725](https://github.com/python-pillow/Pillow/issues/9725) \[[@&#8203;radarhere](https://github.com/radarhere)] - Embed SBOM into wheels [#&#8203;9679](https://github.com/python-pillow/Pillow/issues/9679) \[[@&#8203;hugovk](https://github.com/hugovk)] - Do not set eval() globals in ImageMath.unsafe\_eval() [#&#8203;9576](https://github.com/python-pillow/Pillow/issues/9576) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add Tcl/Tk license to wheels [#&#8203;9663](https://github.com/python-pillow/Pillow/issues/9663) \[[@&#8203;radarhere](https://github.com/radarhere)] - Ensure map stride is at least one full row of pixels [#&#8203;9719](https://github.com/python-pillow/Pillow/issues/9719) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise OverflowError if text width exceeds INT\_MAX [#&#8203;9717](https://github.com/python-pillow/Pillow/issues/9717) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise error if image modes do not match ImageCms transform modes [#&#8203;9715](https://github.com/python-pillow/Pillow/issues/9715) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use int64\_t for text height [#&#8203;9716](https://github.com/python-pillow/Pillow/issues/9716) \[[@&#8203;radarhere](https://github.com/radarhere)] - Return if error occurs in Py\_mod\_exec slot [#&#8203;9712](https://github.com/python-pillow/Pillow/issues/9712) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add decompression bomb checks to FontFile classes [#&#8203;9711](https://github.com/python-pillow/Pillow/issues/9711) \[[@&#8203;radarhere](https://github.com/radarhere)] - If C error is raised, return NULL [#&#8203;9706](https://github.com/python-pillow/Pillow/issues/9706) \[[@&#8203;radarhere](https://github.com/radarhere)] - Prevent saving 1 mode images as TGA with run-length encoding [#&#8203;9709](https://github.com/python-pillow/Pillow/issues/9709) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise ValueError if EPS BeginBinary bytecount is negative [#&#8203;9708](https://github.com/python-pillow/Pillow/issues/9708) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not DECREF tuple until tuple items are no longer used [#&#8203;9707](https://github.com/python-pillow/Pillow/issues/9707) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not update NumPy automatically [#&#8203;9713](https://github.com/python-pillow/Pillow/issues/9713) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplified code [#&#8203;9642](https://github.com/python-pillow/Pillow/issues/9642) \[[@&#8203;radarhere](https://github.com/radarhere)] - If realloc fails, do not reduce block size [#&#8203;9702](https://github.com/python-pillow/Pillow/issues/9702) \[[@&#8203;radarhere](https://github.com/radarhere)] - DECREF PyDict\_GetItemRef result [#&#8203;9701](https://github.com/python-pillow/Pillow/issues/9701) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use int64\_t to calculate paste box dimensions [#&#8203;9703](https://github.com/python-pillow/Pillow/issues/9703) \[[@&#8203;radarhere](https://github.com/radarhere)] - Calculate JPEG2000 total\_component\_width for each tile in isolation [#&#8203;9704](https://github.com/python-pillow/Pillow/issues/9704) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise ValueError if value is not bytes for TIFF\_BYTE or TIFF\_ASCII tag [#&#8203;9699](https://github.com/python-pillow/Pillow/issues/9699) \[[@&#8203;radarhere](https://github.com/radarhere)] - Release Py\_Buffer on error [#&#8203;9698](https://github.com/python-pillow/Pillow/issues/9698) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use os.startfile() in WindowsViewer show\_file() [#&#8203;9692](https://github.com/python-pillow/Pillow/issues/9692) \[[@&#8203;radarhere](https://github.com/radarhere)] - Validate large filter sizes when initializing RankFilter [#&#8203;9695](https://github.com/python-pillow/Pillow/issues/9695) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add decompression bomb check to GdImageFile [#&#8203;9693](https://github.com/python-pillow/Pillow/issues/9693) \[[@&#8203;radarhere](https://github.com/radarhere)] - Free image bands when an error occurs while splitting an image [#&#8203;9694](https://github.com/python-pillow/Pillow/issues/9694) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check PyList\_Append return value [#&#8203;9690](https://github.com/python-pillow/Pillow/issues/9690) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check WebPMuxNew return value [#&#8203;9689](https://github.com/python-pillow/Pillow/issues/9689) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check PyCapsule\_New return value [#&#8203;9691](https://github.com/python-pillow/Pillow/issues/9691) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not return negative width for text length [#&#8203;9623](https://github.com/python-pillow/Pillow/issues/9623) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add args argument to METH\_NOARGS methods [#&#8203;9687](https://github.com/python-pillow/Pillow/issues/9687) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check ImagingNewDirty return value [#&#8203;9688](https://github.com/python-pillow/Pillow/issues/9688) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use int64\_t for text width [#&#8203;9686](https://github.com/python-pillow/Pillow/issues/9686) \[[@&#8203;radarhere](https://github.com/radarhere)] - Move PyDateTime\_IMPORT inside Py\_mod\_exec slot [#&#8203;9580](https://github.com/python-pillow/Pillow/issues/9580) \[[@&#8203;radarhere](https://github.com/radarhere)] - Validate size and rank when initializing RankFilter [#&#8203;9661](https://github.com/python-pillow/Pillow/issues/9661) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise ValueError if insufficient data is read from DDS RGB file [#&#8203;9405](https://github.com/python-pillow/Pillow/issues/9405) \[[@&#8203;radarhere](https://github.com/radarhere)] - Correct `IFDRational.__float__()` return value [#&#8203;9676](https://github.com/python-pillow/Pillow/issues/9676) \[[@&#8203;nyxst4ck](https://github.com/nyxst4ck)] - Correct length when accessing ImagePath.Path subscript [#&#8203;9685](https://github.com/python-pillow/Pillow/issues/9685) \[[@&#8203;radarhere](https://github.com/radarhere)] - Release reference on non-flattened sequence error [#&#8203;9684](https://github.com/python-pillow/Pillow/issues/9684) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not release Py\_buffer until buf is no longer in use [#&#8203;9683](https://github.com/python-pillow/Pillow/issues/9683) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not resize macOS retina screenshots by default [#&#8203;9266](https://github.com/python-pillow/Pillow/issues/9266) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add abstract BaseImageFont class [#&#8203;9595](https://github.com/python-pillow/Pillow/issues/9595) \[[@&#8203;radarhere](https://github.com/radarhere)] - Cast before multiplying [#&#8203;9678](https://github.com/python-pillow/Pillow/issues/9678) \[[@&#8203;radarhere](https://github.com/radarhere)] - Limit radius to half width or height of rounded rectangle [#&#8203;9561](https://github.com/python-pillow/Pillow/issues/9561) \[[@&#8203;radarhere](https://github.com/radarhere)] - linesize is always xsize multiplied by pixelsize [#&#8203;9647](https://github.com/python-pillow/Pillow/issues/9647) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check annotate\_hash\_table return value [#&#8203;9572](https://github.com/python-pillow/Pillow/issues/9572) \[[@&#8203;radarhere](https://github.com/radarhere)] - Catch KeyError when checking mode from PNG IHDR chunk [#&#8203;9604](https://github.com/python-pillow/Pillow/issues/9604) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only pass one argument to C expand [#&#8203;9664](https://github.com/python-pillow/Pillow/issues/9664) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise error if declared JPEG2000 marker length is too small [#&#8203;9666](https://github.com/python-pillow/Pillow/issues/9666) \[[@&#8203;radarhere](https://github.com/radarhere)] - In \_dump(), use Python PPM save, instead of C [#&#8203;9566](https://github.com/python-pillow/Pillow/issues/9566) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise error consistently from inside ImagingNewArrow [#&#8203;9571](https://github.com/python-pillow/Pillow/issues/9571) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplify `RankFilter.c` check [#&#8203;9662](https://github.com/python-pillow/Pillow/issues/9662) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support opening and saving L mode AVIF images with libavif >= 1.3.0 [#&#8203;9471](https://github.com/python-pillow/Pillow/issues/9471) \[[@&#8203;radarhere](https://github.com/radarhere)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;9648](https://github.com/python-pillow/Pillow/issues/9648) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Apply libtiff patch to fix CVE-2026-4775 [#&#8203;9646](https://github.com/python-pillow/Pillow/issues/9646) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove duplicate code [#&#8203;9640](https://github.com/python-pillow/Pillow/issues/9640) \[[@&#8203;radarhere](https://github.com/radarhere)] - Switch iOS back to macos-26-intel [#&#8203;9631](https://github.com/python-pillow/Pillow/issues/9631) \[[@&#8203;radarhere](https://github.com/radarhere)] - Don't use list as default in PdfParser read\_prev\_trailer [#&#8203;9629](https://github.com/python-pillow/Pillow/issues/9629) \[[@&#8203;danigm](https://github.com/danigm)] - Add support for Python 3.15 [#&#8203;9624](https://github.com/python-pillow/Pillow/issues/9624) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not draw line or arc if width is zero [#&#8203;9589](https://github.com/python-pillow/Pillow/issues/9589) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use \_accept check in WebP \_open [#&#8203;9605](https://github.com/python-pillow/Pillow/issues/9605) \[[@&#8203;radarhere](https://github.com/radarhere)] - Compare dist sizes vs latest PyPI release [#&#8203;9621](https://github.com/python-pillow/Pillow/issues/9621) \[[@&#8203;hugovk](https://github.com/hugovk)] - Do not generate SBOM in scheduled run on fork [#&#8203;9620](https://github.com/python-pillow/Pillow/issues/9620) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use plugin method directly when saving PDFs [#&#8203;9547](https://github.com/python-pillow/Pillow/issues/9547) \[[@&#8203;radarhere](https://github.com/radarhere)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;9617](https://github.com/python-pillow/Pillow/issues/9617) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Set Renovate prCreation to not-pending [#&#8203;9616](https://github.com/python-pillow/Pillow/issues/9616) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise error if PNG transparency has incorrect type or length when saving [#&#8203;9536](https://github.com/python-pillow/Pillow/issues/9536) \[[@&#8203;radarhere](https://github.com/radarhere)] - If PdfParser buffer is memoryview, release it when closing [#&#8203;9596](https://github.com/python-pillow/Pillow/issues/9596) \[[@&#8203;radarhere](https://github.com/radarhere)] - Correct integer overflow in 16-bit resampling [#&#8203;9480](https://github.com/python-pillow/Pillow/issues/9480) \[[@&#8203;hayatoikoma](https://github.com/hayatoikoma)] - SBOM: Use real versions from dependencies.json [#&#8203;9593](https://github.com/python-pillow/Pillow/issues/9593) \[[@&#8203;hugovk](https://github.com/hugovk)] - Restrict SBOM upload to only Pillow JSON [#&#8203;9598](https://github.com/python-pillow/Pillow/issues/9598) \[[@&#8203;radarhere](https://github.com/radarhere)] - Generate CycloneDX SBOM at release time via CI [#&#8203;9550](https://github.com/python-pillow/Pillow/issues/9550) \[[@&#8203;aclark4life](https://github.com/aclark4life)] - Raise ValueError if ImageOps border has unsupported format [#&#8203;9426](https://github.com/python-pillow/Pillow/issues/9426) \[[@&#8203;veeceey](https://github.com/veeceey)] - Unsafe pointer dereference from unchecked Python integer in Tk initialization [#&#8203;9548](https://github.com/python-pillow/Pillow/issues/9548) \[[@&#8203;barttran2k](https://github.com/barttran2k)] - Reorder renovate.json [#&#8203;9565](https://github.com/python-pillow/Pillow/issues/9565) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add python-pillow GitHub Sponsors to FUNDING.yml [#&#8203;9563](https://github.com/python-pillow/Pillow/issues/9563) \[[@&#8203;aclark4life](https://github.com/aclark4life)] - Correct environment URL [#&#8203;9558](https://github.com/python-pillow/Pillow/issues/9558) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove or protect secrets in Actions [#&#8203;9544](https://github.com/python-pillow/Pillow/issues/9544) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Move Homebrew dependencies into Brewfile [#&#8203;9546](https://github.com/python-pillow/Pillow/issues/9546) \[[@&#8203;hugovk](https://github.com/hugovk)] - Do not precompute horizontal coefficients if not horizontal resizing [#&#8203;9543](https://github.com/python-pillow/Pillow/issues/9543) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix comparison warnings [#&#8203;9541](https://github.com/python-pillow/Pillow/issues/9541) \[[@&#8203;radarhere](https://github.com/radarhere)] - Close PdfParser if error occurs during init [#&#8203;9539](https://github.com/python-pillow/Pillow/issues/9539) \[[@&#8203;radarhere](https://github.com/radarhere)] - Drop experimental Python 3.13 free-threaded wheels [#&#8203;9535](https://github.com/python-pillow/Pillow/issues/9535) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update github-actions [#&#8203;9533](https://github.com/python-pillow/Pillow/issues/9533) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] ### [`v12.2.0`](https://github.com/python-pillow/Pillow/releases/tag/12.2.0) [Compare Source](https://github.com/python-pillow/Pillow/compare/12.1.1...12.2.0) <https://pillow.readthedocs.io/en/stable/releasenotes/12.2.0.html> #### Documentation - Update 12.2.0 release notes [#&#8203;9522](https://github.com/python-pillow/Pillow/issues/9522) \[[@&#8203;hugovk](https://github.com/hugovk)] - Add loader plugins: AMOS abk, Atari Degas, 40+ more obscure formats via Netpbm [#&#8203;9482](https://github.com/python-pillow/Pillow/issues/9482) \[[@&#8203;bitplane](https://github.com/bitplane)] - Update Python versions [#&#8203;9515](https://github.com/python-pillow/Pillow/issues/9515) \[[@&#8203;radarhere](https://github.com/radarhere)] - Jeffrey A. Clark -> Jeffrey 'Alex' Clark [#&#8203;9513](https://github.com/python-pillow/Pillow/issues/9513) \[[@&#8203;aclark4life](https://github.com/aclark4life)] - Add release notes for [#&#8203;9394](https://github.com/python-pillow/Pillow/issues/9394), [#&#8203;9419](https://github.com/python-pillow/Pillow/issues/9419) and [#&#8203;9456](https://github.com/python-pillow/Pillow/issues/9456) [#&#8203;9467](https://github.com/python-pillow/Pillow/issues/9467) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add Amiga Workbench .info loader to 3rd party plugins list [#&#8203;9459](https://github.com/python-pillow/Pillow/issues/9459) \[[@&#8203;bitplane](https://github.com/bitplane)] - Merge PFM documentation into PPM [#&#8203;9434](https://github.com/python-pillow/Pillow/issues/9434) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update macOS tested Pillow versions [#&#8203;9431](https://github.com/python-pillow/Pillow/issues/9431) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix CVE number [#&#8203;9430](https://github.com/python-pillow/Pillow/issues/9430) \[[@&#8203;hugovk](https://github.com/hugovk)] #### Dependencies - Update xz to 5.8.3 [#&#8203;9523](https://github.com/python-pillow/Pillow/issues/9523) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update libjpeg-turbo to 3.1.4.1 [#&#8203;9507](https://github.com/python-pillow/Pillow/issues/9507) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update libpng to 1.6.56 [#&#8203;9499](https://github.com/python-pillow/Pillow/issues/9499) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update freetype to 2.14.3 [#&#8203;9485](https://github.com/python-pillow/Pillow/issues/9485) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated libavif to 1.4.1 [#&#8203;9479](https://github.com/python-pillow/Pillow/issues/9479) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated harfbuzz to 13.2.1 [#&#8203;9461](https://github.com/python-pillow/Pillow/issues/9461) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update Ghostscript to 10.7.0 [#&#8203;9469](https://github.com/python-pillow/Pillow/issues/9469) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update harfbuzz to 13.0.1 [#&#8203;9453](https://github.com/python-pillow/Pillow/issues/9453) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update libavif to 1.4.0 [#&#8203;9460](https://github.com/python-pillow/Pillow/issues/9460) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update freetype to 2.14.2 [#&#8203;9449](https://github.com/python-pillow/Pillow/issues/9449) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update actions/download-artifact action to v8 [#&#8203;9451](https://github.com/python-pillow/Pillow/issues/9451) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated libpng to 1.6.55 [#&#8203;9425](https://github.com/python-pillow/Pillow/issues/9425) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Testing - Cleanup .spider extension in the same test where it is added [#&#8203;9517](https://github.com/python-pillow/Pillow/issues/9517) \[[@&#8203;radarhere](https://github.com/radarhere)] - Run tests in parallel via tox for 3.5x speedup [#&#8203;9516](https://github.com/python-pillow/Pillow/issues/9516) \[[@&#8203;hugovk](https://github.com/hugovk)] - Enable colour in CI logs [#&#8203;9486](https://github.com/python-pillow/Pillow/issues/9486) \[[@&#8203;hugovk](https://github.com/hugovk)] - Update Ghostscript to 10.7.0 [#&#8203;9469](https://github.com/python-pillow/Pillow/issues/9469) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplify TGA test code [#&#8203;9477](https://github.com/python-pillow/Pillow/issues/9477) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update tests to check for ValueError when encoding an empty image [#&#8203;9464](https://github.com/python-pillow/Pillow/issues/9464) \[[@&#8203;radarhere](https://github.com/radarhere)] - Upgrade CI from `macos-15-intel` to `macos-26-intel` [#&#8203;9454](https://github.com/python-pillow/Pillow/issues/9454) \[[@&#8203;hugovk](https://github.com/hugovk)] - Add check-case-conflict hook [#&#8203;9446](https://github.com/python-pillow/Pillow/issues/9446) \[[@&#8203;radarhere](https://github.com/radarhere)] - Specify platform when pulling docker image [#&#8203;9440](https://github.com/python-pillow/Pillow/issues/9440) \[[@&#8203;radarhere](https://github.com/radarhere)] - GHA: Cache libavif and webp builds for Ubuntu [#&#8203;9437](https://github.com/python-pillow/Pillow/issues/9437) \[[@&#8203;hugovk](https://github.com/hugovk)] - Update macOS tested Pillow versions [#&#8203;9431](https://github.com/python-pillow/Pillow/issues/9431) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Other changes - Check calloc return value [#&#8203;9527](https://github.com/python-pillow/Pillow/issues/9527) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check all allocs in the Arrow tree [#&#8203;9488](https://github.com/python-pillow/Pillow/issues/9488) \[[@&#8203;wiredfool](https://github.com/wiredfool)] - Reject non-numeric elements inside list coords [#&#8203;9526](https://github.com/python-pillow/Pillow/issues/9526) \[[@&#8203;hugovk](https://github.com/hugovk)] - Move variable declaration inside define [#&#8203;9525](https://github.com/python-pillow/Pillow/issues/9525) \[[@&#8203;radarhere](https://github.com/radarhere)] - Resize tall images vertically first [#&#8203;9524](https://github.com/python-pillow/Pillow/issues/9524) \[[@&#8203;radarhere](https://github.com/radarhere)] - Avoid overflow by not adding extents together [#&#8203;9520](https://github.com/python-pillow/Pillow/issues/9520) \[[@&#8203;hugovk](https://github.com/hugovk)] - Use long for glyph position [#&#8203;9518](https://github.com/python-pillow/Pillow/issues/9518) \[[@&#8203;hugovk](https://github.com/hugovk)] - Raise an error if the trailer chain loops back on itself [#&#8203;9519](https://github.com/python-pillow/Pillow/issues/9519) \[[@&#8203;hugovk](https://github.com/hugovk)] - Only read as much data from gzip-decompressed data as necessary [#&#8203;9521](https://github.com/python-pillow/Pillow/issues/9521) \[[@&#8203;hugovk](https://github.com/hugovk)] - Allow None extents in C setimage() [#&#8203;9504](https://github.com/python-pillow/Pillow/issues/9504) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use critical sections to protect FontObject [#&#8203;9498](https://github.com/python-pillow/Pillow/issues/9498) \[[@&#8203;colesbury](https://github.com/colesbury)] - Add ImageText.Text.wrap() to wrap text [#&#8203;9286](https://github.com/python-pillow/Pillow/issues/9286) \[[@&#8203;radarhere](https://github.com/radarhere)] - Always call StubHandler open() when opening StubImageFile [#&#8203;9412](https://github.com/python-pillow/Pillow/issues/9412) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved BCn overflow check [#&#8203;9043](https://github.com/python-pillow/Pillow/issues/9043) \[[@&#8203;radarhere](https://github.com/radarhere)] - Image will never be None [#&#8203;9512](https://github.com/python-pillow/Pillow/issues/9512) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise EOFError when seeking too far in PSD [#&#8203;9388](https://github.com/python-pillow/Pillow/issues/9388) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise error if ImageGrab subprocess gives non-zero returncode [#&#8203;9321](https://github.com/python-pillow/Pillow/issues/9321) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow for different palette entry sizes when correcting BMP pixel data offset [#&#8203;9472](https://github.com/python-pillow/Pillow/issues/9472) \[[@&#8203;radarhere](https://github.com/radarhere)] - Ignore unspecified extra samples for TIFF separate planar configuration [#&#8203;9514](https://github.com/python-pillow/Pillow/issues/9514) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add PERF to lint and fix findings [#&#8203;9510](https://github.com/python-pillow/Pillow/issues/9510) \[[@&#8203;hugovk](https://github.com/hugovk)] - Switch iOS back to macos-15-intel [#&#8203;9509](https://github.com/python-pillow/Pillow/issues/9509) \[[@&#8203;radarhere](https://github.com/radarhere)] - Catch struct.error [#&#8203;9505](https://github.com/python-pillow/Pillow/issues/9505) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check PyCapsule\_GetPointer and PyBytes\_FromStringAndSize return values [#&#8203;9508](https://github.com/python-pillow/Pillow/issues/9508) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix missing null dereference checks [#&#8203;9489](https://github.com/python-pillow/Pillow/issues/9489) \[[@&#8203;wiredfool](https://github.com/wiredfool)] - CI: Retry failed downloads [#&#8203;9506](https://github.com/python-pillow/Pillow/issues/9506) \[[@&#8203;hugovk](https://github.com/hugovk)] - Use PyModule\_AddObjectRef [#&#8203;9503](https://github.com/python-pillow/Pillow/issues/9503) \[[@&#8203;radarhere](https://github.com/radarhere)] - Release reference to encoder on error [#&#8203;9500](https://github.com/python-pillow/Pillow/issues/9500) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fixed AVIF and WEBP dealloc [#&#8203;9501](https://github.com/python-pillow/Pillow/issues/9501) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check PyType\_Ready return values [#&#8203;9502](https://github.com/python-pillow/Pillow/issues/9502) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check if PyObject\_CallMethod result is NULL [#&#8203;9494](https://github.com/python-pillow/Pillow/issues/9494) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not use palette from grayscale or bilevel colorspace when reading JPEG2000 images [#&#8203;9468](https://github.com/python-pillow/Pillow/issues/9468) \[[@&#8203;radarhere](https://github.com/radarhere)] - If TGA v2 extension area specifies no alpha, fill alpha channel [#&#8203;9478](https://github.com/python-pillow/Pillow/issues/9478) \[[@&#8203;radarhere](https://github.com/radarhere)] - Set image pixels individually on 32-bit Windows [#&#8203;9492](https://github.com/python-pillow/Pillow/issues/9492) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add error messages before returning NULL when encoding [#&#8203;9493](https://github.com/python-pillow/Pillow/issues/9493) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix `_getxy` refcount leaks [#&#8203;9487](https://github.com/python-pillow/Pillow/issues/9487) \[[@&#8203;hugovk](https://github.com/hugovk)] - Fix invalid test font [#&#8203;9483](https://github.com/python-pillow/Pillow/issues/9483) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add Exif tag "FrameRate" [#&#8203;9470](https://github.com/python-pillow/Pillow/issues/9470) \[[@&#8203;zhiyuanouyang](https://github.com/zhiyuanouyang)] - Support reading JPEG2000 images with CMYK palettes [#&#8203;9456](https://github.com/python-pillow/Pillow/issues/9456) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplify `setimage()` by always passing extents [#&#8203;9395](https://github.com/python-pillow/Pillow/issues/9395) \[[@&#8203;radarhere](https://github.com/radarhere)] - If bitmap buffer is empty, do not render anything [#&#8203;8324](https://github.com/python-pillow/Pillow/issues/8324) \[[@&#8203;radarhere](https://github.com/radarhere)] - Change to ValueError when encoding an empty image [#&#8203;9394](https://github.com/python-pillow/Pillow/issues/9394) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add FontFile.to\_imagefont() [#&#8203;9419](https://github.com/python-pillow/Pillow/issues/9419) \[[@&#8203;fjhenigman](https://github.com/fjhenigman)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;9450](https://github.com/python-pillow/Pillow/issues/9450) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Use walrus operator [#&#8203;9448](https://github.com/python-pillow/Pillow/issues/9448) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only close file handle in ImagePalette.save() if it was opened internally [#&#8203;9444](https://github.com/python-pillow/Pillow/issues/9444) \[[@&#8203;bysiber](https://github.com/bysiber)] - Fix `self.decode` typo [#&#8203;9445](https://github.com/python-pillow/Pillow/issues/9445) \[[@&#8203;bysiber](https://github.com/bysiber)] - Fix BMP RLE delta escape reading from wrong file position [#&#8203;9443](https://github.com/python-pillow/Pillow/issues/9443) \[[@&#8203;bysiber](https://github.com/bysiber)] - Correct error check when encoding AVIF images [#&#8203;9442](https://github.com/python-pillow/Pillow/issues/9442) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix unexpected error when saving zero dimension images [#&#8203;9391](https://github.com/python-pillow/Pillow/issues/9391) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use uppercase format ID for PALM [#&#8203;9435](https://github.com/python-pillow/Pillow/issues/9435) \[[@&#8203;radarhere](https://github.com/radarhere)] ### [`v12.1.1`](https://github.com/python-pillow/Pillow/releases/tag/12.1.1) [Compare Source](https://github.com/python-pillow/Pillow/compare/12.1.0...12.1.1) <https://pillow.readthedocs.io/en/stable/releasenotes/12.1.1.html> #### Dependencies - Patch libavif for svt-av1 4.0 compatibility [#&#8203;9413](https://github.com/python-pillow/Pillow/issues/9413) \[[@&#8203;hugovk](https://github.com/hugovk)] #### Other changes - Fix OOB Write with invalid tile extents [#&#8203;9427](https://github.com/python-pillow/Pillow/issues/9427) \[[@&#8203;radarhere](https://github.com/radarhere)] ### [`v12.1.0`](https://github.com/python-pillow/Pillow/releases/tag/12.1.0) [Compare Source](https://github.com/python-pillow/Pillow/compare/12.0.0...12.1.0) <https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html> #### Deprecations - Deprecate getdata(), in favour of new get\_flattened\_data() [#&#8203;9292](https://github.com/python-pillow/Pillow/issues/9292) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Documentation - Specify APNG duration type when opening [#&#8203;9368](https://github.com/python-pillow/Pillow/issues/9368) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added release notes for [#&#8203;9350](https://github.com/python-pillow/Pillow/issues/9350) [#&#8203;9366](https://github.com/python-pillow/Pillow/issues/9366) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update ImageMorph documentation [#&#8203;9349](https://github.com/python-pillow/Pillow/issues/9349) \[[@&#8203;radarhere](https://github.com/radarhere)] - Docs: update major bump cadence [#&#8203;9334](https://github.com/python-pillow/Pillow/issues/9334) \[[@&#8203;hugovk](https://github.com/hugovk)] - Add release notes for [#&#8203;9070](https://github.com/python-pillow/Pillow/issues/9070) [#&#8203;9320](https://github.com/python-pillow/Pillow/issues/9320) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated Ubuntu version [#&#8203;9306](https://github.com/python-pillow/Pillow/issues/9306) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update macOS tested Pillow versions [#&#8203;9265](https://github.com/python-pillow/Pillow/issues/9265) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Dependencies - Update harfbuzz to 12.3.0 [#&#8203;9355](https://github.com/python-pillow/Pillow/issues/9355) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update xz to 5.8.2 [#&#8203;9343](https://github.com/python-pillow/Pillow/issues/9343) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated libjpeg-turbo to 3.1.3 [#&#8203;9333](https://github.com/python-pillow/Pillow/issues/9333) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated zlib-ng to 2.3.2 [#&#8203;9324](https://github.com/python-pillow/Pillow/issues/9324) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated libpng to 1.6.53 [#&#8203;9325](https://github.com/python-pillow/Pillow/issues/9325) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update actions/checkout action to v6 [#&#8203;9323](https://github.com/python-pillow/Pillow/issues/9323) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency mypy to v1.19.0 [#&#8203;9322](https://github.com/python-pillow/Pillow/issues/9322) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated libpng to 1.6.51 [#&#8203;9305](https://github.com/python-pillow/Pillow/issues/9305) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated brotli to 1.2.0 [#&#8203;9284](https://github.com/python-pillow/Pillow/issues/9284) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update libimagequant to 4.4.1 [#&#8203;9301](https://github.com/python-pillow/Pillow/issues/9301) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update zlib-ng to 2.3.1, except on manylinux2014 aarch64 [#&#8203;9312](https://github.com/python-pillow/Pillow/issues/9312) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated harfbuzz to 12.2.0 [#&#8203;9289](https://github.com/python-pillow/Pillow/issues/9289) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update github-actions [#&#8203;9277](https://github.com/python-pillow/Pillow/issues/9277) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] #### Testing - Replace pre-commit with prek [#&#8203;9360](https://github.com/python-pillow/Pillow/issues/9360) \[[@&#8203;hugovk](https://github.com/hugovk)] - Test PyQt6 on Python 3.14 on Windows [#&#8203;9353](https://github.com/python-pillow/Pillow/issues/9353) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test 32-bit Windows on Windows Server 2022 [#&#8203;9345](https://github.com/python-pillow/Pillow/issues/9345) \[[@&#8203;radarhere](https://github.com/radarhere)] - Correct variable type [#&#8203;9335](https://github.com/python-pillow/Pillow/issues/9335) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix `ResourceWarning`s in `selftest.py` [#&#8203;9332](https://github.com/python-pillow/Pillow/issues/9332) \[[@&#8203;hugovk](https://github.com/hugovk)] - Fix testing good P mode BMP images [#&#8203;9319](https://github.com/python-pillow/Pillow/issues/9319) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test Python 3.15 pre-release [#&#8203;9331](https://github.com/python-pillow/Pillow/issues/9331) \[[@&#8203;hugovk](https://github.com/hugovk)] - Test ImageFont.ImageFont, in case freetype2 is not supported [#&#8203;9287](https://github.com/python-pillow/Pillow/issues/9287) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add Fedora 43 [#&#8203;9290](https://github.com/python-pillow/Pillow/issues/9290) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove Fedora 41 [#&#8203;9260](https://github.com/python-pillow/Pillow/issues/9260) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Type hints - Add ImageFile context manager [#&#8203;9367](https://github.com/python-pillow/Pillow/issues/9367) \[[@&#8203;radarhere](https://github.com/radarhere)] - Assert fp is not None [#&#8203;8617](https://github.com/python-pillow/Pillow/issues/8617) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added return type to ImageFile \_close\_fp() [#&#8203;9356](https://github.com/python-pillow/Pillow/issues/9356) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use different variables for Image and ImageFile instances [#&#8203;9316](https://github.com/python-pillow/Pillow/issues/9316) \[[@&#8203;radarhere](https://github.com/radarhere)] - Correct variable type [#&#8203;9335](https://github.com/python-pillow/Pillow/issues/9335) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve type hints [#&#8203;9317](https://github.com/python-pillow/Pillow/issues/9317) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use different variables for Image and ImageFile instances [#&#8203;9268](https://github.com/python-pillow/Pillow/issues/9268) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added type hints [#&#8203;9269](https://github.com/python-pillow/Pillow/issues/9269) \[[@&#8203;radarhere](https://github.com/radarhere)] - Correct **getitem** return type [#&#8203;9264](https://github.com/python-pillow/Pillow/issues/9264) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Other changes - Simplify band splitting [#&#8203;9291](https://github.com/python-pillow/Pillow/issues/9291) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support saving APNG float durations [#&#8203;9365](https://github.com/python-pillow/Pillow/issues/9365) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow 1 mode images in MorphOp [#&#8203;9348](https://github.com/python-pillow/Pillow/issues/9348) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use minimum supported Python version for Lint [#&#8203;9364](https://github.com/python-pillow/Pillow/issues/9364) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow for duplicate font variation styles [#&#8203;9362](https://github.com/python-pillow/Pillow/issues/9362) \[[@&#8203;radarhere](https://github.com/radarhere)] - Call parent verify method [#&#8203;9357](https://github.com/python-pillow/Pillow/issues/9357) \[[@&#8203;radarhere](https://github.com/radarhere)] - Return LUT from LutBuilder build\_default\_lut() [#&#8203;9350](https://github.com/python-pillow/Pillow/issues/9350) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplify WebP code [#&#8203;9329](https://github.com/python-pillow/Pillow/issues/9329) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use unsigned long for DWORD [#&#8203;9352](https://github.com/python-pillow/Pillow/issues/9352) \[[@&#8203;radarhere](https://github.com/radarhere)] - Cast to UINT32 before shifting bits [#&#8203;9347](https://github.com/python-pillow/Pillow/issues/9347) \[[@&#8203;radarhere](https://github.com/radarhere)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;9318](https://github.com/python-pillow/Pillow/issues/9318) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Allow window ID to be passed to ImageGrab.grab() on macOS [#&#8203;9070](https://github.com/python-pillow/Pillow/issues/9070) \[[@&#8203;yankeguo](https://github.com/yankeguo)] - Apply encoder options when saving multiple PNG frames [#&#8203;9300](https://github.com/python-pillow/Pillow/issues/9300) \[[@&#8203;radarhere](https://github.com/radarhere)] - Read all non-zero transparency from mode 1 PNG images as 255 [#&#8203;9282](https://github.com/python-pillow/Pillow/issues/9282) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support writing IFD, SIGNED\_RATIONAL and InkNames TIFF tags [#&#8203;9276](https://github.com/python-pillow/Pillow/issues/9276) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove unused modes [#&#8203;9275](https://github.com/python-pillow/Pillow/issues/9275) \[[@&#8203;radarhere](https://github.com/radarhere)] - Correct allocating new color to RGBA palette [#&#8203;9313](https://github.com/python-pillow/Pillow/issues/9313) \[[@&#8203;radarhere](https://github.com/radarhere)] - Close image on ImageFont exception [#&#8203;9304](https://github.com/python-pillow/Pillow/issues/9304) \[[@&#8203;radarhere](https://github.com/radarhere)] - Reapply "Use macos-latest for iOS arm64 simulator" [#&#8203;9259](https://github.com/python-pillow/Pillow/issues/9259) \[[@&#8203;radarhere](https://github.com/radarhere)] - Escape period in pre-commit-config [#&#8203;9036](https://github.com/python-pillow/Pillow/issues/9036) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add Apache-2.0 notice to IcoImagePlugin [#&#8203;8947](https://github.com/python-pillow/Pillow/issues/8947) \[[@&#8203;stefan6419846](https://github.com/stefan6419846)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;9288](https://github.com/python-pillow/Pillow/issues/9288) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Simplify code now that I;16\* modes are the only IMAGING\_TYPE\_SPECIAL [#&#8203;9263](https://github.com/python-pillow/Pillow/issues/9263) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove BytesIO from DdsImagePlugin [#&#8203;9273](https://github.com/python-pillow/Pillow/issues/9273) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix ZeroDivisionError in DdsImagePlugin [#&#8203;9272](https://github.com/python-pillow/Pillow/issues/9272) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix warnings [#&#8203;9257](https://github.com/python-pillow/Pillow/issues/9257) \[[@&#8203;radarhere](https://github.com/radarhere)] ### [`v12.0.0`](https://github.com/python-pillow/Pillow/releases/tag/12.0.0) [Compare Source](https://github.com/python-pillow/Pillow/compare/11.3.0...12.0.0) <https://pillow.readthedocs.io/en/stable/releasenotes/12.0.0.html> #### Removals - Remove support for FreeType <= 2.9.0 [#&#8203;9159](https://github.com/python-pillow/Pillow/issues/9159) \[[@&#8203;radarhere](https://github.com/radarhere)] - Drop support for Python 3.9 [#&#8203;9119](https://github.com/python-pillow/Pillow/issues/9119) \[[@&#8203;hugovk](https://github.com/hugovk)] - Remove deprecations for Pillow 12.0.0 [#&#8203;9053](https://github.com/python-pillow/Pillow/issues/9053) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Deprecations - Deprecate Image.\_show [#&#8203;9186](https://github.com/python-pillow/Pillow/issues/9186) \[[@&#8203;radarhere](https://github.com/radarhere)] - Deprecate ImageCmsProfile product\_name and product\_info [#&#8203;8995](https://github.com/python-pillow/Pillow/issues/8995) \[[@&#8203;lukegb](https://github.com/lukegb)] #### Documentation - ImagingHistogramInstance can use two bands [#&#8203;9251](https://github.com/python-pillow/Pillow/issues/9251) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update 12.0.0 release notes [#&#8203;9247](https://github.com/python-pillow/Pillow/issues/9247) \[[@&#8203;hugovk](https://github.com/hugovk)] - Added ImageDraw alpha channel examples [#&#8203;9201](https://github.com/python-pillow/Pillow/issues/9201) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update Python version [#&#8203;9230](https://github.com/python-pillow/Pillow/issues/9230) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated macOS tested Pillow versions [#&#8203;9209](https://github.com/python-pillow/Pillow/issues/9209) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add GitHub profile link to release notes [#&#8203;9197](https://github.com/python-pillow/Pillow/issues/9197) \[[@&#8203;radarhere](https://github.com/radarhere)] - Split versionadded info [#&#8203;9190](https://github.com/python-pillow/Pillow/issues/9190) \[[@&#8203;radarhere](https://github.com/radarhere)] - Document ImageFile.MAXBLOCK [#&#8203;9163](https://github.com/python-pillow/Pillow/issues/9163) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated macOS version in CI targets [#&#8203;9157](https://github.com/python-pillow/Pillow/issues/9157) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix typos [#&#8203;9135](https://github.com/python-pillow/Pillow/issues/9135) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added "Colors" to concepts [#&#8203;9067](https://github.com/python-pillow/Pillow/issues/9067) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update macOS tested Pillow versions [#&#8203;9068](https://github.com/python-pillow/Pillow/issues/9068) \[[@&#8203;radarhere](https://github.com/radarhere)] - Thanks, folks! [#&#8203;9056](https://github.com/python-pillow/Pillow/issues/9056) \[[@&#8203;aclark4life](https://github.com/aclark4life)] - Setup nit: "fork" should be lowercased [#&#8203;9055](https://github.com/python-pillow/Pillow/issues/9055) \[[@&#8203;aclark4life](https://github.com/aclark4life)] #### Dependencies - Update dependency cibuildwheel to v3.2.1 [#&#8203;9246](https://github.com/python-pillow/Pillow/issues/9246) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;9233](https://github.com/python-pillow/Pillow/issues/9233) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Update harfbuzz to 12.1.0 [#&#8203;9218](https://github.com/python-pillow/Pillow/issues/9218) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update libtiff to 4.7.1 [#&#8203;9222](https://github.com/python-pillow/Pillow/issues/9222) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update FreeType to 2.14.1 on macOS and Linux wheels [#&#8203;9217](https://github.com/python-pillow/Pillow/issues/9217) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency cibuildwheel to v3.2.0 [#&#8203;9219](https://github.com/python-pillow/Pillow/issues/9219) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update Ghostscript to 10.6.0 [#&#8203;9202](https://github.com/python-pillow/Pillow/issues/9202) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update openjpeg to 2.5.4 [#&#8203;9215](https://github.com/python-pillow/Pillow/issues/9215) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update harfbuzz to 11.5.0 [#&#8203;9203](https://github.com/python-pillow/Pillow/issues/9203) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency mypy to v1.18.2 [#&#8203;9213](https://github.com/python-pillow/Pillow/issues/9213) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency mypy to v1.18.1 [#&#8203;9207](https://github.com/python-pillow/Pillow/issues/9207) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update github-actions [#&#8203;9194](https://github.com/python-pillow/Pillow/issues/9194) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated harfbuzz to 11.4.5 [#&#8203;9150](https://github.com/python-pillow/Pillow/issues/9150) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update zlib-ng to 2.2.5 [#&#8203;9140](https://github.com/python-pillow/Pillow/issues/9140) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update raqm to 0.10.3 [#&#8203;9137](https://github.com/python-pillow/Pillow/issues/9137) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update libjpeg-turbo to 3.1.2 [#&#8203;9188](https://github.com/python-pillow/Pillow/issues/9188) \[[@&#8203;radarhere](https://github.com/radarhere)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;9180](https://github.com/python-pillow/Pillow/issues/9180) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Update dependency cibuildwheel to v3.1.4 [#&#8203;9164](https://github.com/python-pillow/Pillow/issues/9164) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update actions/checkout action to v5 [#&#8203;9156](https://github.com/python-pillow/Pillow/issues/9156) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update actions/download-artifact action to v5 [#&#8203;9141](https://github.com/python-pillow/Pillow/issues/9141) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated harfbuzz to 11.3.3 [#&#8203;9103](https://github.com/python-pillow/Pillow/issues/9103) \[[@&#8203;radarhere](https://github.com/radarhere)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;9131](https://github.com/python-pillow/Pillow/issues/9131) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Updated libimagequant to 4.4.0 [#&#8203;9074](https://github.com/python-pillow/Pillow/issues/9074) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency mypy to v1.17.1 [#&#8203;9130](https://github.com/python-pillow/Pillow/issues/9130) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency cibuildwheel to v3.1.3 [#&#8203;9129](https://github.com/python-pillow/Pillow/issues/9129) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency cibuildwheel to v3.1.2 [#&#8203;9118](https://github.com/python-pillow/Pillow/issues/9118) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated libpng to 1.6.50 [#&#8203;9058](https://github.com/python-pillow/Pillow/issues/9058) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update cygwin/cygwin-install-action action to v6 [#&#8203;9108](https://github.com/python-pillow/Pillow/issues/9108) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update dependency mypy to v1.17.0 [#&#8203;9092](https://github.com/python-pillow/Pillow/issues/9092) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated libwebp to 1.6.0 [#&#8203;9082](https://github.com/python-pillow/Pillow/issues/9082) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency cibuildwheel to v3.0.1 [#&#8203;9075](https://github.com/python-pillow/Pillow/issues/9075) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;9073](https://github.com/python-pillow/Pillow/issues/9073) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] #### Testing - Check return types [#&#8203;9045](https://github.com/python-pillow/Pillow/issues/9045) \[[@&#8203;radarhere](https://github.com/radarhere)] - Upgrade from macos-13 [#&#8203;9212](https://github.com/python-pillow/Pillow/issues/9212) \[[@&#8203;radarhere](https://github.com/radarhere)] - Wheels CI: Check number of expected dists [#&#8203;9239](https://github.com/python-pillow/Pillow/issues/9239) \[[@&#8203;hugovk](https://github.com/hugovk)] - Assert image type [#&#8203;8845](https://github.com/python-pillow/Pillow/issues/8845) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test GD transparency [#&#8203;9196](https://github.com/python-pillow/Pillow/issues/9196) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test mode when saving PPM images [#&#8203;9195](https://github.com/python-pillow/Pillow/issues/9195) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test unsupported BMP bitfields layout [#&#8203;9193](https://github.com/python-pillow/Pillow/issues/9193) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update Ghostscript to 10.6.0 [#&#8203;9202](https://github.com/python-pillow/Pillow/issues/9202) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use monkeypatch [#&#8203;9192](https://github.com/python-pillow/Pillow/issues/9192) \[[@&#8203;radarhere](https://github.com/radarhere)] - Always check XMLPacket value [#&#8203;9113](https://github.com/python-pillow/Pillow/issues/9113) \[[@&#8203;radarhere](https://github.com/radarhere)] - Rename variable to not shadow import [#&#8203;9124](https://github.com/python-pillow/Pillow/issues/9124) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed unused code [#&#8203;9182](https://github.com/python-pillow/Pillow/issues/9182) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add has\_feature\_version helper [#&#8203;9172](https://github.com/python-pillow/Pillow/issues/9172) \[[@&#8203;radarhere](https://github.com/radarhere)] - Replace print with assert [#&#8203;9171](https://github.com/python-pillow/Pillow/issues/9171) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add Debian 13 Trixie [#&#8203;9147](https://github.com/python-pillow/Pillow/issues/9147) \[[@&#8203;hugovk](https://github.com/hugovk)] - Do not import from Tests directory in checks [#&#8203;9143](https://github.com/python-pillow/Pillow/issues/9143) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve features test coverage [#&#8203;9077](https://github.com/python-pillow/Pillow/issues/9077) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove WebP feature handling [#&#8203;9096](https://github.com/python-pillow/Pillow/issues/9096) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update for pyroma 5.0 [#&#8203;9093](https://github.com/python-pillow/Pillow/issues/9093) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve WmfImagePlugin test coverage [#&#8203;9090](https://github.com/python-pillow/Pillow/issues/9090) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve DdsImagePlugin test coverage [#&#8203;9091](https://github.com/python-pillow/Pillow/issues/9091) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve ImageMath test coverage [#&#8203;9087](https://github.com/python-pillow/Pillow/issues/9087) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix unclosed file warning [#&#8203;9065](https://github.com/python-pillow/Pillow/issues/9065) \[[@&#8203;radarhere](https://github.com/radarhere)] - Pyroma now supports PEP 639 [#&#8203;9064](https://github.com/python-pillow/Pillow/issues/9064) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Type hints - Install arro3 dependencies when type checking [#&#8203;9254](https://github.com/python-pillow/Pillow/issues/9254) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check return types [#&#8203;9045](https://github.com/python-pillow/Pillow/issues/9045) \[[@&#8203;radarhere](https://github.com/radarhere)] - Assert image type [#&#8203;8845](https://github.com/python-pillow/Pillow/issues/8845) \[[@&#8203;radarhere](https://github.com/radarhere)] - Move imports into TYPE\_CHECKING [#&#8203;9123](https://github.com/python-pillow/Pillow/issues/9123) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove support for NumPy 1.20 when type checking [#&#8203;9125](https://github.com/python-pillow/Pillow/issues/9125) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Other changes - Use macos-14 for iOS arm64 simulator [#&#8203;9258](https://github.com/python-pillow/Pillow/issues/9258) \[[@&#8203;hugovk](https://github.com/hugovk)] - Use enums for Modes and RawModes in C [#&#8203;9256](https://github.com/python-pillow/Pillow/issues/9256) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add ImageText [#&#8203;9098](https://github.com/python-pillow/Pillow/issues/9098) \[[@&#8203;radarhere](https://github.com/radarhere)] - Shift bits before making value negative [#&#8203;9255](https://github.com/python-pillow/Pillow/issues/9255) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support saving variable length rational TIFF tags by default [#&#8203;9241](https://github.com/python-pillow/Pillow/issues/9241) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added four private SGI TIFF tags [#&#8203;9245](https://github.com/python-pillow/Pillow/issues/9245) \[[@&#8203;radarhere](https://github.com/radarhere)] - Band names for arrow exported images [#&#8203;9099](https://github.com/python-pillow/Pillow/issues/9099) \[[@&#8203;wiredfool](https://github.com/wiredfool)] - Use macos-latest for iOS arm64 simulator [#&#8203;9250](https://github.com/python-pillow/Pillow/issues/9250) \[[@&#8203;radarhere](https://github.com/radarhere)] - If pasting an image onto itself at a lower position, copy from bottom [#&#8203;8882](https://github.com/python-pillow/Pillow/issues/8882) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed unused access for I;32L and I;32B [#&#8203;9238](https://github.com/python-pillow/Pillow/issues/9238) \[[@&#8203;radarhere](https://github.com/radarhere)] - Corrected scientific-python-nightly-wheels pattern [#&#8203;9252](https://github.com/python-pillow/Pillow/issues/9252) \[[@&#8203;radarhere](https://github.com/radarhere)] - Run sdist when scheduled, but do not upload to scientific-python-nightly-wheels index [#&#8203;9248](https://github.com/python-pillow/Pillow/issues/9248) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed shebang lines and executable flags [#&#8203;9179](https://github.com/python-pillow/Pillow/issues/9179) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove Pillow version from PDF comment [#&#8203;9176](https://github.com/python-pillow/Pillow/issues/9176) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support saving variable length rational TIFF tags [#&#8203;9111](https://github.com/python-pillow/Pillow/issues/9111) \[[@&#8203;radarhere](https://github.com/radarhere)] - Build Python 3.14 on macOS 10.15 [#&#8203;9234](https://github.com/python-pillow/Pillow/issues/9234) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test largest CUR cursor [#&#8203;9191](https://github.com/python-pillow/Pillow/issues/9191) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not unnecessarily update FLI \_\_offset [#&#8203;9184](https://github.com/python-pillow/Pillow/issues/9184) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fill alpha channel when quantizing RGB images [#&#8203;9133](https://github.com/python-pillow/Pillow/issues/9133) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow RGBA palettes to work with ImageOps.expand() [#&#8203;9138](https://github.com/python-pillow/Pillow/issues/9138) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fixed loading rotated PCD images [#&#8203;9177](https://github.com/python-pillow/Pillow/issues/9177) \[[@&#8203;radarhere](https://github.com/radarhere)] - Cast before shifting bits [#&#8203;9236](https://github.com/python-pillow/Pillow/issues/9236) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use \_ensure\_mutable() [#&#8203;9200](https://github.com/python-pillow/Pillow/issues/9200) \[[@&#8203;radarhere](https://github.com/radarhere)] - Seek past BeginBinary data when parsing EPS metadata [#&#8203;9211](https://github.com/python-pillow/Pillow/issues/9211) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not allow negative offset with memory mapping [#&#8203;9235](https://github.com/python-pillow/Pillow/issues/9235) \[[@&#8203;radarhere](https://github.com/radarhere)] - Clear C image when MPO frame image size changes [#&#8203;9208](https://github.com/python-pillow/Pillow/issues/9208) \[[@&#8203;radarhere](https://github.com/radarhere)] - When converting RGBA to PA, use RGB to P quantization [#&#8203;9153](https://github.com/python-pillow/Pillow/issues/9153) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove use of sudo from libavif and raqm install scripts [#&#8203;9231](https://github.com/python-pillow/Pillow/issues/9231) \[[@&#8203;radarhere](https://github.com/radarhere)] - Load image palette into Python after converting to PA [#&#8203;9152](https://github.com/python-pillow/Pillow/issues/9152) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check all reserved bytes in FLI header [#&#8203;9183](https://github.com/python-pillow/Pillow/issues/9183) \[[@&#8203;radarhere](https://github.com/radarhere)] - Limit length of read operation in ImageFont.\_load\_pilfont\_data() [#&#8203;9181](https://github.com/python-pillow/Pillow/issues/9181) \[[@&#8203;radarhere](https://github.com/radarhere)] - Python 3.9 wheels are no longer needed [#&#8203;9214](https://github.com/python-pillow/Pillow/issues/9214) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove unused Image \_expand() [#&#8203;9227](https://github.com/python-pillow/Pillow/issues/9227) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated FreeType to 2.14.1 on Windows [#&#8203;9206](https://github.com/python-pillow/Pillow/issues/9206) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only deprecate fromarray mode for changing data types [#&#8203;9063](https://github.com/python-pillow/Pillow/issues/9063) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix reading RGB and CMYK IPTC images [#&#8203;9088](https://github.com/python-pillow/Pillow/issues/9088) \[[@&#8203;radarhere](https://github.com/radarhere)] - Install zstd for libtiff on Linux wheels [#&#8203;9097](https://github.com/python-pillow/Pillow/issues/9097) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve WalImageFile test coverage [#&#8203;9189](https://github.com/python-pillow/Pillow/issues/9189) \[[@&#8203;radarhere](https://github.com/radarhere)] - ImageMorph operations must have length 1 [#&#8203;9102](https://github.com/python-pillow/Pillow/issues/9102) \[[@&#8203;radarhere](https://github.com/radarhere)] - Set correct size for rotated PCD images after opening [#&#8203;9086](https://github.com/python-pillow/Pillow/issues/9086) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplify check for GBR width and height [#&#8203;9089](https://github.com/python-pillow/Pillow/issues/9089) \[[@&#8203;radarhere](https://github.com/radarhere)] - Make in parallel when building libjpeg-turbo and openjpeg for macOS and Linux wheels [#&#8203;9144](https://github.com/python-pillow/Pillow/issues/9144) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix ZeroDivisionError in ImageStat [#&#8203;9105](https://github.com/python-pillow/Pillow/issues/9105) \[[@&#8203;radarhere](https://github.com/radarhere)] - When deleting EXIF IFD tag, delete IFD data [#&#8203;9083](https://github.com/python-pillow/Pillow/issues/9083) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow alpha\_composite to use LA images [#&#8203;9066](https://github.com/python-pillow/Pillow/issues/9066) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve \_accept length check [#&#8203;9170](https://github.com/python-pillow/Pillow/issues/9170) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not set core to DeferredError [#&#8203;9166](https://github.com/python-pillow/Pillow/issues/9166) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use macos-14 for iOS arm64 simulator [#&#8203;9161](https://github.com/python-pillow/Pillow/issues/9161) \[[@&#8203;radarhere](https://github.com/radarhere)] - Make in parallel when building brotli and libavif for macOS and Linux wheels [#&#8203;9142](https://github.com/python-pillow/Pillow/issues/9142) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use Python 3.14 for gcc problem matching [#&#8203;9134](https://github.com/python-pillow/Pillow/issues/9134) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add libavif support for iOS [#&#8203;9117](https://github.com/python-pillow/Pillow/issues/9117) \[[@&#8203;freakboy3742](https://github.com/freakboy3742)] - Restore pyroma test for iOS [#&#8203;9116](https://github.com/python-pillow/Pillow/issues/9116) \[[@&#8203;freakboy3742](https://github.com/freakboy3742)] - Use correct bands for two band histograms [#&#8203;9054](https://github.com/python-pillow/Pillow/issues/9054) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add support for Python 3.14 [#&#8203;9120](https://github.com/python-pillow/Pillow/issues/9120) \[[@&#8203;hugovk](https://github.com/hugovk)] - Drop support for PyPy3.10 [#&#8203;9112](https://github.com/python-pillow/Pillow/issues/9112) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add parallel compile from pybind11 [#&#8203;8990](https://github.com/python-pillow/Pillow/issues/8990) \[[@&#8203;wiredfool](https://github.com/wiredfool)] - Remove unused \_save\_cjpeg [#&#8203;9084](https://github.com/python-pillow/Pillow/issues/9084) \[[@&#8203;radarhere](https://github.com/radarhere)] - Ensure dynamic libjpeg libraries are not linked [#&#8203;9081](https://github.com/python-pillow/Pillow/issues/9081) \[[@&#8203;freakboy3742](https://github.com/freakboy3742)] - Remove reference to libtiff 3.x [#&#8203;9072](https://github.com/python-pillow/Pillow/issues/9072) \[[@&#8203;radarhere](https://github.com/radarhere)] - Restored manylinux2014 wheels [#&#8203;9059](https://github.com/python-pillow/Pillow/issues/9059) \[[@&#8203;radarhere](https://github.com/radarhere)] ### [`v11.3.0`](https://github.com/python-pillow/Pillow/releases/tag/11.3.0) [Compare Source](https://github.com/python-pillow/Pillow/compare/11.2.1...11.3.0) <https://pillow.readthedocs.io/en/stable/releasenotes/11.3.0.html> #### Deprecations - Deprecate fromarray mode argument [#&#8203;9018](https://github.com/python-pillow/Pillow/issues/9018) \[[@&#8203;radarhere](https://github.com/radarhere)] - Deprecate saving I mode images as PNG [#&#8203;9023](https://github.com/python-pillow/Pillow/issues/9023) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Documentation - Added release notes for [#&#8203;9041](https://github.com/python-pillow/Pillow/issues/9041) [#&#8203;9042](https://github.com/python-pillow/Pillow/issues/9042) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add release notes for [#&#8203;8912](https://github.com/python-pillow/Pillow/issues/8912) and [#&#8203;8969](https://github.com/python-pillow/Pillow/issues/8969) [#&#8203;9019](https://github.com/python-pillow/Pillow/issues/9019) \[[@&#8203;radarhere](https://github.com/radarhere)] - ImageFont does not handle multiline text [#&#8203;9000](https://github.com/python-pillow/Pillow/issues/9000) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated Ubuntu CI targets [#&#8203;8988](https://github.com/python-pillow/Pillow/issues/8988) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update MinGW package names [#&#8203;8987](https://github.com/python-pillow/Pillow/issues/8987) \[[@&#8203;H4M5TER](https://github.com/H4M5TER)] - Updated docstring [#&#8203;8943](https://github.com/python-pillow/Pillow/issues/8943) \[[@&#8203;radarhere](https://github.com/radarhere)] - Mention that tobytes() with the raw encoder uses Pack.c [#&#8203;8878](https://github.com/python-pillow/Pillow/issues/8878) \[[@&#8203;radarhere](https://github.com/radarhere)] - Refactor docs `Makefile` [#&#8203;8933](https://github.com/python-pillow/Pillow/issues/8933) \[[@&#8203;hugovk](https://github.com/hugovk)] - Add template for quarterly release issue [#&#8203;8932](https://github.com/python-pillow/Pillow/issues/8932) \[[@&#8203;aclark4life](https://github.com/aclark4life)] - Add list of third party plugins [#&#8203;8910](https://github.com/python-pillow/Pillow/issues/8910) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update redirected URL [#&#8203;8919](https://github.com/python-pillow/Pillow/issues/8919) \[[@&#8203;radarhere](https://github.com/radarhere)] - Docs: use sentence case for headers [#&#8203;8914](https://github.com/python-pillow/Pillow/issues/8914) \[[@&#8203;hugovk](https://github.com/hugovk)] - Docs: remove unused Makefile targets [#&#8203;8917](https://github.com/python-pillow/Pillow/issues/8917) \[[@&#8203;hugovk](https://github.com/hugovk)] - Remove indentation from lists [#&#8203;8915](https://github.com/python-pillow/Pillow/issues/8915) \[[@&#8203;radarhere](https://github.com/radarhere)] - Python 3.13 is tested on Arch [#&#8203;8894](https://github.com/python-pillow/Pillow/issues/8894) \[[@&#8203;radarhere](https://github.com/radarhere)] - Move XV Thumbnails to read only section [#&#8203;8893](https://github.com/python-pillow/Pillow/issues/8893) \[[@&#8203;aclark4life](https://github.com/aclark4life)] - Updated macOS tested Pillow versions [#&#8203;8890](https://github.com/python-pillow/Pillow/issues/8890) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Dependencies - Add AVIF to wheels using only aomenc and dav1d AVIF codecs for reduced size [#&#8203;8858](https://github.com/python-pillow/Pillow/issues/8858) \[[@&#8203;fdintino](https://github.com/fdintino)] - Use same AVIF URL when fetching dependency [#&#8203;8871](https://github.com/python-pillow/Pillow/issues/8871) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency mypy to v1.16.1 [#&#8203;9026](https://github.com/python-pillow/Pillow/issues/9026) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Update libpng to 1.6.49 [#&#8203;9014](https://github.com/python-pillow/Pillow/issues/9014) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency cibuildwheel to v3 [#&#8203;9010](https://github.com/python-pillow/Pillow/issues/9010) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated libjpeg-turbo to 3.1.1 [#&#8203;9009](https://github.com/python-pillow/Pillow/issues/9009) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency mypy to v1.16.0 [#&#8203;8991](https://github.com/python-pillow/Pillow/issues/8991) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated libpng to 1.6.48 [#&#8203;8940](https://github.com/python-pillow/Pillow/issues/8940) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated Ghostscript to 10.5.1 [#&#8203;8939](https://github.com/python-pillow/Pillow/issues/8939) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated harfbuzz to 11.2.1 [#&#8203;8937](https://github.com/python-pillow/Pillow/issues/8937) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated libavif to 1.3.0 [#&#8203;8949](https://github.com/python-pillow/Pillow/issues/8949) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency cibuildwheel to v2.23.3 [#&#8203;8931](https://github.com/python-pillow/Pillow/issues/8931) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated harfbuzz to 11.1.0 [#&#8203;8904](https://github.com/python-pillow/Pillow/issues/8904) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Testing - Add `match` parameter to `pytest.warns()` [#&#8203;9038](https://github.com/python-pillow/Pillow/issues/9038) \[[@&#8203;hugovk](https://github.com/hugovk)] - Increase pytest verbosity [#&#8203;9040](https://github.com/python-pillow/Pillow/issues/9040) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve SgiImagePlugin test coverage [#&#8203;8896](https://github.com/python-pillow/Pillow/issues/8896) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update ruff pre-commit ID [#&#8203;8994](https://github.com/python-pillow/Pillow/issues/8994) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only check DHT marker for libjpeg-turbo [#&#8203;9025](https://github.com/python-pillow/Pillow/issues/9025) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve BLP tests [#&#8203;9020](https://github.com/python-pillow/Pillow/issues/9020) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix warning [#&#8203;9016](https://github.com/python-pillow/Pillow/issues/9016) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test Python 3.14t on macOS and Linux [#&#8203;9011](https://github.com/python-pillow/Pillow/issues/9011) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only accept missing tkinter when building wheels on Windows [#&#8203;8981](https://github.com/python-pillow/Pillow/issues/8981) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix test [#&#8203;8996](https://github.com/python-pillow/Pillow/issues/8996) \[[@&#8203;radarhere](https://github.com/radarhere)] - Stop testing deprecated Windows Server 2019 runner image [#&#8203;8989](https://github.com/python-pillow/Pillow/issues/8989) \[[@&#8203;radarhere](https://github.com/radarhere)] - Run slow tests on valgrind, but without timeout [#&#8203;8975](https://github.com/python-pillow/Pillow/issues/8975) \[[@&#8203;radarhere](https://github.com/radarhere)] - Close file pointer earlier [#&#8203;8895](https://github.com/python-pillow/Pillow/issues/8895) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added Fedora 42 [#&#8203;8899](https://github.com/python-pillow/Pillow/issues/8899) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed Fedora 40 [#&#8203;8887](https://github.com/python-pillow/Pillow/issues/8887) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Type hints - Assert palette is not None [#&#8203;8877](https://github.com/python-pillow/Pillow/issues/8877) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not import type checking [#&#8203;8854](https://github.com/python-pillow/Pillow/issues/8854) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve type hints [#&#8203;8883](https://github.com/python-pillow/Pillow/issues/8883) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency mypy to v1.16.0 [#&#8203;8991](https://github.com/python-pillow/Pillow/issues/8991) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] #### Other changes - Updated check script paths [#&#8203;9052](https://github.com/python-pillow/Pillow/issues/9052) \[[@&#8203;radarhere](https://github.com/radarhere)] - Raise FileNotFoundError when opening an empty path [#&#8203;9048](https://github.com/python-pillow/Pillow/issues/9048) \[[@&#8203;radarhere](https://github.com/radarhere)] - Handle IPTC TIFF tags with incorrect type [#&#8203;8925](https://github.com/python-pillow/Pillow/issues/8925) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not update palette for L mode GIF frame [#&#8203;8924](https://github.com/python-pillow/Pillow/issues/8924) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use save parameters as encoderinfo defaults [#&#8203;9001](https://github.com/python-pillow/Pillow/issues/9001) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add support for iOS [#&#8203;9030](https://github.com/python-pillow/Pillow/issues/9030) \[[@&#8203;freakboy3742](https://github.com/freakboy3742)] - Fix qtables and quality scaling [#&#8203;8879](https://github.com/python-pillow/Pillow/issues/8879) \[[@&#8203;Kyliroco](https://github.com/Kyliroco)] - Read 16-bit McIdas images into I;16B mode to allow for memory mapping [#&#8203;9046](https://github.com/python-pillow/Pillow/issues/9046) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support ttb multiline text [#&#8203;8730](https://github.com/python-pillow/Pillow/issues/8730) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use unpacking [#&#8203;9044](https://github.com/python-pillow/Pillow/issues/9044) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix saving MPO with more than one appended image [#&#8203;8979](https://github.com/python-pillow/Pillow/issues/8979) \[[@&#8203;radarhere](https://github.com/radarhere)] - Restore original encoderinfo after saving [#&#8203;8942](https://github.com/python-pillow/Pillow/issues/8942) \[[@&#8203;radarhere](https://github.com/radarhere)] - Return PixelAccess from first load of ICO and IPTC images [#&#8203;8922](https://github.com/python-pillow/Pillow/issues/8922) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve justifying text [#&#8203;8905](https://github.com/python-pillow/Pillow/issues/8905) \[[@&#8203;radarhere](https://github.com/radarhere)] - Set color table fourth channel to zero for 1 and L mode when saving BMP [#&#8203;8889](https://github.com/python-pillow/Pillow/issues/8889) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve reading XPM images [#&#8203;8874](https://github.com/python-pillow/Pillow/issues/8874) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix buffer overflow when saving compressed DDS images [#&#8203;9041](https://github.com/python-pillow/Pillow/issues/9041) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use PEP 489 multi-phase initialization [#&#8203;8983](https://github.com/python-pillow/Pillow/issues/8983) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support saving I;16L TIFF images [#&#8203;9015](https://github.com/python-pillow/Pillow/issues/9015) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not call sys.executable in ImageShow in PyInstaller application [#&#8203;9028](https://github.com/python-pillow/Pillow/issues/9028) \[[@&#8203;radarhere](https://github.com/radarhere)] - Search for libtiff library file first on Windows and macOS [#&#8203;9034](https://github.com/python-pillow/Pillow/issues/9034) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fix libtiff cleanup [#&#8203;9002](https://github.com/python-pillow/Pillow/issues/9002) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use percent formatting for \_dbg calls [#&#8203;9035](https://github.com/python-pillow/Pillow/issues/9035) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed ImageCmsProfile.\_set method [#&#8203;9032](https://github.com/python-pillow/Pillow/issues/9032) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added Python 3.14 macOS x86-64 wheels [#&#8203;9031](https://github.com/python-pillow/Pillow/issues/9031) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support writing QOI images [#&#8203;9007](https://github.com/python-pillow/Pillow/issues/9007) \[[@&#8203;thisismypassport](https://github.com/thisismypassport)] - Simplify C error handling [#&#8203;9021](https://github.com/python-pillow/Pillow/issues/9021) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add Python 3.14 beta wheels [#&#8203;9012](https://github.com/python-pillow/Pillow/issues/9012) \[[@&#8203;hugovk](https://github.com/hugovk)] - Remove padding between interleaved PCX palette data [#&#8203;9005](https://github.com/python-pillow/Pillow/issues/9005) \[[@&#8203;radarhere](https://github.com/radarhere)] - Start QOI decoding with a zero-initialized array of previously seen pixels [#&#8203;9008](https://github.com/python-pillow/Pillow/issues/9008) \[[@&#8203;radarhere](https://github.com/radarhere)] - Correct drawing I;16 horizontal lines [#&#8203;8985](https://github.com/python-pillow/Pillow/issues/8985) \[[@&#8203;radarhere](https://github.com/radarhere)] - Reduce number of bytes read for PCX header [#&#8203;9004](https://github.com/python-pillow/Pillow/issues/9004) \[[@&#8203;radarhere](https://github.com/radarhere)] - Handle XMP data from an UNDEFINED TIFF tag [#&#8203;8997](https://github.com/python-pillow/Pillow/issues/8997) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not decode bytes in PPM error message [#&#8203;8958](https://github.com/python-pillow/Pillow/issues/8958) \[[@&#8203;radarhere](https://github.com/radarhere)] - Parse XMP tag bytes without decoding to string [#&#8203;8960](https://github.com/python-pillow/Pillow/issues/8960) \[[@&#8203;radarhere](https://github.com/radarhere)] - Clear TIFF core image if memory mapping was used for last load [#&#8203;8962](https://github.com/python-pillow/Pillow/issues/8962) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use mask in C when drawing wide polygon lines [#&#8203;8984](https://github.com/python-pillow/Pillow/issues/8984) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplify code [#&#8203;8863](https://github.com/python-pillow/Pillow/issues/8863) \[[@&#8203;radarhere](https://github.com/radarhere)] - Call startswith once with a tuple [#&#8203;8998](https://github.com/python-pillow/Pillow/issues/8998) \[[@&#8203;radarhere](https://github.com/radarhere)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;8993](https://github.com/python-pillow/Pillow/issues/8993) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Use ImageFile.MAXBLOCK in tobytes() [#&#8203;8906](https://github.com/python-pillow/Pillow/issues/8906) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed unreachable code [#&#8203;8918](https://github.com/python-pillow/Pillow/issues/8918) \[[@&#8203;radarhere](https://github.com/radarhere)] - Valgrind Memory Leak Checking [#&#8203;8954](https://github.com/python-pillow/Pillow/issues/8954) \[[@&#8203;wiredfool](https://github.com/wiredfool)] - Add parallel test target, using pytest-xdist [#&#8203;8972](https://github.com/python-pillow/Pillow/issues/8972) \[[@&#8203;wiredfool](https://github.com/wiredfool)] - Add support for flat uint8 arrow arrays for multi channel images [#&#8203;8908](https://github.com/python-pillow/Pillow/issues/8908) \[[@&#8203;wiredfool](https://github.com/wiredfool)] - Removed CMAKE\_POLICY\_VERSION\_MINIMUM=3.5 for libavif [#&#8203;8973](https://github.com/python-pillow/Pillow/issues/8973) \[[@&#8203;radarhere](https://github.com/radarhere)] - Reduced number of bytes read in WMF header [#&#8203;8964](https://github.com/python-pillow/Pillow/issues/8964) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not build against libavif < 1 [#&#8203;8969](https://github.com/python-pillow/Pillow/issues/8969) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved support for Python 3.14 [#&#8203;8948](https://github.com/python-pillow/Pillow/issues/8948) \[[@&#8203;radarhere](https://github.com/radarhere)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;8944](https://github.com/python-pillow/Pillow/issues/8944) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Allow loading ImageFile state from Pillow < 11.2.1 [#&#8203;8938](https://github.com/python-pillow/Pillow/issues/8938) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove outdated comment [#&#8203;8929](https://github.com/python-pillow/Pillow/issues/8929) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add support for Grim in Wayland sessions ImageGrab [#&#8203;8912](https://github.com/python-pillow/Pillow/issues/8912) \[[@&#8203;AdianKozlica](https://github.com/AdianKozlica)] - Add `make [-C docs] htmllive` to rebuild and reload HTML files [#&#8203;8913](https://github.com/python-pillow/Pillow/issues/8913) \[[@&#8203;hugovk](https://github.com/hugovk)] - Build Windows arm64 wheels on arm64 runner [#&#8203;8898](https://github.com/python-pillow/Pillow/issues/8898) \[[@&#8203;radarhere](https://github.com/radarhere)] ### [`v11.2.1`](https://github.com/python-pillow/Pillow/releases/tag/11.2.1) [Compare Source](https://github.com/python-pillow/Pillow/compare/11.1.0...11.2.1) <https://pillow.readthedocs.io/en/stable/releasenotes/11.2.1.html> #### Deprecations - Moved get\_child\_images() to ImageFile [#&#8203;8689](https://github.com/python-pillow/Pillow/issues/8689) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Documentation - Add 11.2.1 release notes [#&#8203;8885](https://github.com/python-pillow/Pillow/issues/8885) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added avif to config settings [#&#8203;8875](https://github.com/python-pillow/Pillow/issues/8875) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added release notes for [#&#8203;8330](https://github.com/python-pillow/Pillow/issues/8330) [#&#8203;8853](https://github.com/python-pillow/Pillow/issues/8853) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added release notes for [#&#8203;8781](https://github.com/python-pillow/Pillow/issues/8781) and [#&#8203;8837](https://github.com/python-pillow/Pillow/issues/8837) [#&#8203;8843](https://github.com/python-pillow/Pillow/issues/8843) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added media\_white\_point to ImageCms documentation [#&#8203;8829](https://github.com/python-pillow/Pillow/issues/8829) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed FIXME [#&#8203;8825](https://github.com/python-pillow/Pillow/issues/8825) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated comment [#&#8203;8822](https://github.com/python-pillow/Pillow/issues/8822) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added release notes for [#&#8203;8807](https://github.com/python-pillow/Pillow/issues/8807) [#&#8203;8824](https://github.com/python-pillow/Pillow/issues/8824) \[[@&#8203;radarhere](https://github.com/radarhere)] - DXT3 images are read in RGBA mode [#&#8203;8817](https://github.com/python-pillow/Pillow/issues/8817) \[[@&#8203;radarhere](https://github.com/radarhere)] - JPEG comments are from the COM marker [#&#8203;8788](https://github.com/python-pillow/Pillow/issues/8788) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update Sphinx to 8.2 to remove nitpick ignore [#&#8203;8763](https://github.com/python-pillow/Pillow/issues/8763) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated AffineTransform docstring to mention it uses the inverse matrix [#&#8203;8735](https://github.com/python-pillow/Pillow/issues/8735) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added MozJPEG documentation [#&#8203;8699](https://github.com/python-pillow/Pillow/issues/8699) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added Sphinx configuration key [#&#8203;8691](https://github.com/python-pillow/Pillow/issues/8691) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated macOS tested Pillow versions [#&#8203;8654](https://github.com/python-pillow/Pillow/issues/8654) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Dependencies - Updated xz to 5.8.1 [#&#8203;8868](https://github.com/python-pillow/Pillow/issues/8868) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated harfbuzz to 11.0.1 [#&#8203;8870](https://github.com/python-pillow/Pillow/issues/8870) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update scientific-python/upload-nightly-action action to v0.6.2 [#&#8203;8865](https://github.com/python-pillow/Pillow/issues/8865) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated xz to 5.8.0 in macOS and Linux wheels, but not on manylinux2014 [#&#8203;8836](https://github.com/python-pillow/Pillow/issues/8836) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency cibuildwheel to v2.23.2 [#&#8203;8832](https://github.com/python-pillow/Pillow/issues/8832) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated harfbuzz to 11.0.0 [#&#8203;8830](https://github.com/python-pillow/Pillow/issues/8830) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency cibuildwheel to v2.23.1 [#&#8203;8818](https://github.com/python-pillow/Pillow/issues/8818) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated Ghostscript to 10.5.0 [#&#8203;8814](https://github.com/python-pillow/Pillow/issues/8814) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated libtiff to 4.7.0 [#&#8203;8812](https://github.com/python-pillow/Pillow/issues/8812) \[[@&#8203;radarhere](https://github.com/radarhere)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;8795](https://github.com/python-pillow/Pillow/issues/8795) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Updated harfbuzz to 10.4.0 [#&#8203;8770](https://github.com/python-pillow/Pillow/issues/8770) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency mypy to v1.15.0 [#&#8203;8791](https://github.com/python-pillow/Pillow/issues/8791) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated libpng to 1.6.47 [#&#8203;8764](https://github.com/python-pillow/Pillow/issues/8764) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated lcms2 to 2.17 [#&#8203;8742](https://github.com/python-pillow/Pillow/issues/8742) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update dependency cibuildwheel to v2.23.0 [#&#8203;8785](https://github.com/python-pillow/Pillow/issues/8785) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - Updated zlib-ng to 2.2.4 [#&#8203;8745](https://github.com/python-pillow/Pillow/issues/8745) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated libimagequant to 4.3.4 on Windows [#&#8203;8744](https://github.com/python-pillow/Pillow/issues/8744) \[[@&#8203;radarhere](https://github.com/radarhere)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;8729](https://github.com/python-pillow/Pillow/issues/8729) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Updated harfbuzz to 10.2.0 [#&#8203;8688](https://github.com/python-pillow/Pillow/issues/8688) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated xz to 5.6.4 [#&#8203;8711](https://github.com/python-pillow/Pillow/issues/8711) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated libpng to 1.6.46 [#&#8203;8712](https://github.com/python-pillow/Pillow/issues/8712) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated libimagequant to 4.3.4 [#&#8203;8710](https://github.com/python-pillow/Pillow/issues/8710) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated libpng to 1.6.45 [#&#8203;8670](https://github.com/python-pillow/Pillow/issues/8670) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update cygwin/cygwin-install-action action to v5 [#&#8203;8675](https://github.com/python-pillow/Pillow/issues/8675) \[@&#8203;[renovate\[bot\]](https://github.com/apps/renovate)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;8665](https://github.com/python-pillow/Pillow/issues/8665) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Updated freetype to 2.13.3 in macOS and Linux wheels [#&#8203;8653](https://github.com/python-pillow/Pillow/issues/8653) \[[@&#8203;radarhere](https://github.com/radarhere)] - Upgrade zlib-ng to 2.2.3 [#&#8203;8656](https://github.com/python-pillow/Pillow/issues/8656) \[[@&#8203;hugovk](https://github.com/hugovk)] #### Testing - Fixed unclosed file warning [#&#8203;8847](https://github.com/python-pillow/Pillow/issues/8847) \[[@&#8203;radarhere](https://github.com/radarhere)] - Assert image type [#&#8203;8619](https://github.com/python-pillow/Pillow/issues/8619) \[[@&#8203;radarhere](https://github.com/radarhere)] - Parametrize tests [#&#8203;8838](https://github.com/python-pillow/Pillow/issues/8838) \[[@&#8203;radarhere](https://github.com/radarhere)] - Change back to actions/setup-python [#&#8203;8833](https://github.com/python-pillow/Pillow/issues/8833) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplified test code [#&#8203;8823](https://github.com/python-pillow/Pillow/issues/8823) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved FliImagePlugin test coverage [#&#8203;8806](https://github.com/python-pillow/Pillow/issues/8806) \[[@&#8203;radarhere](https://github.com/radarhere)] - Install libtiff-dev on Ubuntu GitHub Actions [#&#8203;8816](https://github.com/python-pillow/Pillow/issues/8816) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test using \_seek to skip frames [#&#8203;8804](https://github.com/python-pillow/Pillow/issues/8804) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved PcxImagePlugin test coverage [#&#8203;8797](https://github.com/python-pillow/Pillow/issues/8797) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use match argument [#&#8203;8801](https://github.com/python-pillow/Pillow/issues/8801) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved BdfFontFile test coverage [#&#8203;8783](https://github.com/python-pillow/Pillow/issues/8783) \[[@&#8203;radarhere](https://github.com/radarhere)] - Revert "Do not install libimagequant" [#&#8203;8778](https://github.com/python-pillow/Pillow/issues/8778) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved FtexImagePlugin test coverage [#&#8203;8766](https://github.com/python-pillow/Pillow/issues/8766) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved FontFile test coverage [#&#8203;8771](https://github.com/python-pillow/Pillow/issues/8771) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved MpoImagePlugin test coverage [#&#8203;8765](https://github.com/python-pillow/Pillow/issues/8765) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved SunImagePlugin coverage [#&#8203;8762](https://github.com/python-pillow/Pillow/issues/8762) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve TarIO test coverage [#&#8203;8759](https://github.com/python-pillow/Pillow/issues/8759) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve type checking in tests [#&#8203;8618](https://github.com/python-pillow/Pillow/issues/8618) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add PyPy3.11 to CI [#&#8203;8758](https://github.com/python-pillow/Pillow/issues/8758) \[[@&#8203;hugovk](https://github.com/hugovk)] - Don't call `make clean` or `pip` in tox [#&#8203;8754](https://github.com/python-pillow/Pillow/issues/8754) \[[@&#8203;hugovk](https://github.com/hugovk)] - Don't shadow builtin open [#&#8203;8756](https://github.com/python-pillow/Pillow/issues/8756) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed unused test code [#&#8203;8752](https://github.com/python-pillow/Pillow/issues/8752) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use monkeypatch [#&#8203;8747](https://github.com/python-pillow/Pillow/issues/8747) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not install libimagequant on MinGW [#&#8203;8724](https://github.com/python-pillow/Pillow/issues/8724) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use getpixel() instead of load() [#&#8203;8727](https://github.com/python-pillow/Pillow/issues/8727) \[[@&#8203;radarhere](https://github.com/radarhere)] - Revert "Ignore brew dependencies for libraqm on macOS 13" [#&#8203;8725](https://github.com/python-pillow/Pillow/issues/8725) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fixed exceptions when closing AppendingTiffWriter [#&#8203;8723](https://github.com/python-pillow/Pillow/issues/8723) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fixed unclosed file warnings [#&#8203;8705](https://github.com/python-pillow/Pillow/issues/8705) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use monkeypatch [#&#8203;8707](https://github.com/python-pillow/Pillow/issues/8707) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use Ubuntu 22.04 for 24.04 ppc64le and s390x [#&#8203;8713](https://github.com/python-pillow/Pillow/issues/8713) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated Ubuntu arm to 24.04 with arm64 runner [#&#8203;8700](https://github.com/python-pillow/Pillow/issues/8700) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test oldest Python on 32-bit Windows 2019 and remove AppVeyor [#&#8203;8525](https://github.com/python-pillow/Pillow/issues/8525) \[[@&#8203;hugovk](https://github.com/hugovk)] - Corrected argument types [#&#8203;8681](https://github.com/python-pillow/Pillow/issues/8681) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test Python 3.14 pre-release [#&#8203;8690](https://github.com/python-pillow/Pillow/issues/8690) \[[@&#8203;radarhere](https://github.com/radarhere)] - Skip test\_embeddable if compiler cannot be initialized [#&#8203;8686](https://github.com/python-pillow/Pillow/issues/8686) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved test coverage [#&#8203;8679](https://github.com/python-pillow/Pillow/issues/8679) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed xfail for test\_embeddable on Python 3.13 [#&#8203;8683](https://github.com/python-pillow/Pillow/issues/8683) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use python-numpy and python-olefile instead of virtual python3 packages [#&#8203;8682](https://github.com/python-pillow/Pillow/issues/8682) \[[@&#8203;hugovk](https://github.com/hugovk)] - Use python-pip instead of python3-pip in MinGW [#&#8203;8678](https://github.com/python-pillow/Pillow/issues/8678) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use ImageFile.\_Tile [#&#8203;8666](https://github.com/python-pillow/Pillow/issues/8666) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved SPIDER test coverage [#&#8203;8668](https://github.com/python-pillow/Pillow/issues/8668) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed unused image open [#&#8203;8649](https://github.com/python-pillow/Pillow/issues/8649) \[[@&#8203;radarhere](https://github.com/radarhere)] - PngImageFile text is a property [#&#8203;8648](https://github.com/python-pillow/Pillow/issues/8648) \[[@&#8203;radarhere](https://github.com/radarhere)] - Trigger wheel builds from changes in pyproject.toml [#&#8203;8674](https://github.com/python-pillow/Pillow/issues/8674) \[[@&#8203;radarhere](https://github.com/radarhere)] #### Type hints - Added fromarrow type hints [#&#8203;8867](https://github.com/python-pillow/Pillow/issues/8867) \[[@&#8203;radarhere](https://github.com/radarhere)] - Assert image type [#&#8203;8619](https://github.com/python-pillow/Pillow/issues/8619) \[[@&#8203;radarhere](https://github.com/radarhere)] - Check that \_fp type is not DeferredError before use [#&#8203;8640](https://github.com/python-pillow/Pillow/issues/8640) \[[@&#8203;radarhere](https://github.com/radarhere)] - Corrected type check [#&#8203;8760](https://github.com/python-pillow/Pillow/issues/8760) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improve type checking in tests [#&#8203;8618](https://github.com/python-pillow/Pillow/issues/8618) \[[@&#8203;radarhere](https://github.com/radarhere)] - Corrected argument types [#&#8203;8681](https://github.com/python-pillow/Pillow/issues/8681) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use ImageFile.\_Tile [#&#8203;8666](https://github.com/python-pillow/Pillow/issues/8666) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added return types [#&#8203;8639](https://github.com/python-pillow/Pillow/issues/8639) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add overloads for exif\_transpose [#&#8203;8657](https://github.com/python-pillow/Pillow/issues/8657) \[[@&#8203;cdce8p](https://github.com/cdce8p)] #### Other changes - Do not include libavif in wheels [#&#8203;8876](https://github.com/python-pillow/Pillow/issues/8876) \[[@&#8203;radarhere](https://github.com/radarhere)] - Remove GPL v2 from FreeType license [#&#8203;8884](https://github.com/python-pillow/Pillow/issues/8884) \[[@&#8203;radarhere](https://github.com/radarhere)] - \[pre-commit.ci] pre-commit autoupdate [#&#8203;8873](https://github.com/python-pillow/Pillow/issues/8873) \[@&#8203;[pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci)] - Replace deprecated classifier with licence expression (PEP 639) [#&#8203;8850](https://github.com/python-pillow/Pillow/issues/8850) \[[@&#8203;hugovk](https://github.com/hugovk)] - Fixed conversion of AVIF image rotation property to EXIF orientation [#&#8203;8866](https://github.com/python-pillow/Pillow/issues/8866) \[[@&#8203;fdintino](https://github.com/fdintino)] - Removed condition that is always true [#&#8203;8862](https://github.com/python-pillow/Pillow/issues/8862) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use multibuild build\_github [#&#8203;8861](https://github.com/python-pillow/Pillow/issues/8861) \[[@&#8203;radarhere](https://github.com/radarhere)] - Include filename in ImageFile state [#&#8203;8859](https://github.com/python-pillow/Pillow/issues/8859) \[[@&#8203;radarhere](https://github.com/radarhere)] - Add KDE Wayland support for ImageGrab [#&#8203;8842](https://github.com/python-pillow/Pillow/issues/8842) \[[@&#8203;AdianKozlica](https://github.com/AdianKozlica)] - Only change readonly if saved filename matches opened filename [#&#8203;8852](https://github.com/python-pillow/Pillow/issues/8852) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow HWND to be passed to ImageGrab.grab() on Windows [#&#8203;8516](https://github.com/python-pillow/Pillow/issues/8516) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow cmake<4 when building libavif and libtiff [#&#8203;8851](https://github.com/python-pillow/Pillow/issues/8851) \[[@&#8203;radarhere](https://github.com/radarhere)] - Image -> Arrow support [#&#8203;8330](https://github.com/python-pillow/Pillow/issues/8330) \[[@&#8203;wiredfool](https://github.com/wiredfool)] - Add AVIF plugin (decoder + encoder using libavif) [#&#8203;5201](https://github.com/python-pillow/Pillow/issues/5201) \[[@&#8203;fdintino](https://github.com/fdintino)] - Updated xz to 5.8.0 on manylinux2014 by removing po4a dependency [#&#8203;8848](https://github.com/python-pillow/Pillow/issues/8848) \[[@&#8203;radarhere](https://github.com/radarhere)] - Revert to zlib on macOS < 10.15 [#&#8203;8772](https://github.com/python-pillow/Pillow/issues/8772) \[[@&#8203;radarhere](https://github.com/radarhere)] - Close TarIO file handle on error [#&#8203;8846](https://github.com/python-pillow/Pillow/issues/8846) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not import TYPE\_CHECKING [#&#8203;8844](https://github.com/python-pillow/Pillow/issues/8844) \[[@&#8203;radarhere](https://github.com/radarhere)] - Enable memory mapping on PyPy [#&#8203;8840](https://github.com/python-pillow/Pillow/issues/8840) \[[@&#8203;radarhere](https://github.com/radarhere)] - Corrected Palm P mode save [#&#8203;8685](https://github.com/python-pillow/Pillow/issues/8685) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved connecting discontiguous corners [#&#8203;8659](https://github.com/python-pillow/Pillow/issues/8659) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only read until the offset of the next tile [#&#8203;8609](https://github.com/python-pillow/Pillow/issues/8609) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added USE\_RAW\_ALPHA for BMP images [#&#8203;8602](https://github.com/python-pillow/Pillow/issues/8602) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fixed orientation when opening YCbCr TIFF images [#&#8203;8556](https://github.com/python-pillow/Pillow/issues/8556) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow loading of EMF images at a given DPI [#&#8203;8536](https://github.com/python-pillow/Pillow/issues/8536) \[[@&#8203;radarhere](https://github.com/radarhere)] - Skip failing records when rendering WMF images [#&#8203;8506](https://github.com/python-pillow/Pillow/issues/8506) \[[@&#8203;radarhere](https://github.com/radarhere)] - If append\_images is populated, default save\_all to True [#&#8203;8781](https://github.com/python-pillow/Pillow/issues/8781) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added GimpPaletteFile frombytes() to allow for unlimited parsing [#&#8203;8826](https://github.com/python-pillow/Pillow/issues/8826) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not load image during save if file extension is unknown [#&#8203;8835](https://github.com/python-pillow/Pillow/issues/8835) \[[@&#8203;radarhere](https://github.com/radarhere)] - Do not convert BC1 LUT to UINT32 [#&#8203;8837](https://github.com/python-pillow/Pillow/issues/8837) \[[@&#8203;radarhere](https://github.com/radarhere)] - Start from zero index when reading GimpPaletteFile [#&#8203;8805](https://github.com/python-pillow/Pillow/issues/8805) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support saving DDS images with pixel formats [#&#8203;8807](https://github.com/python-pillow/Pillow/issues/8807) \[[@&#8203;radarhere](https://github.com/radarhere)] - If every TIFF tile covers the image, only use the last offset [#&#8203;8820](https://github.com/python-pillow/Pillow/issues/8820) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use docker/setup-qemu-action [#&#8203;8819](https://github.com/python-pillow/Pillow/issues/8819) \[[@&#8203;radarhere](https://github.com/radarhere)] - Replace deprecated Renovate schedule with cron syntax [#&#8203;8810](https://github.com/python-pillow/Pillow/issues/8810) \[[@&#8203;hugovk](https://github.com/hugovk)] - Allow coords to be sequence of lists [#&#8203;8800](https://github.com/python-pillow/Pillow/issues/8800) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use ABCMeta in classes with abstractmethod [#&#8203;8803](https://github.com/python-pillow/Pillow/issues/8803) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support reading grayscale JPEG2000 images with 4 channels [#&#8203;8786](https://github.com/python-pillow/Pillow/issues/8786) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow encoderconfig and encoderinfo to be set for appended TIFF images [#&#8203;8780](https://github.com/python-pillow/Pillow/issues/8780) \[[@&#8203;radarhere](https://github.com/radarhere)] - Call `startswith`/`endswith` once with a tuple, and `range` without `start=0` [#&#8203;8799](https://github.com/python-pillow/Pillow/issues/8799) \[[@&#8203;hugovk](https://github.com/hugovk)] - Corrected exif\_transpose error when XMP is tuple [#&#8203;8792](https://github.com/python-pillow/Pillow/issues/8792) \[[@&#8203;radarhere](https://github.com/radarhere)] - Fixed loading GD images [#&#8203;8793](https://github.com/python-pillow/Pillow/issues/8793) \[[@&#8203;radarhere](https://github.com/radarhere)] - Image.core.outline will no longer raise an AttributeError [#&#8203;8794](https://github.com/python-pillow/Pillow/issues/8794) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed ImageTk.\_show [#&#8203;8782](https://github.com/python-pillow/Pillow/issues/8782) \[[@&#8203;radarhere](https://github.com/radarhere)] - \_seek\_check already raises an EOFError [#&#8203;8773](https://github.com/python-pillow/Pillow/issues/8773) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only set mode when necessary in FtexImagePlugin [#&#8203;8767](https://github.com/python-pillow/Pillow/issues/8767) \[[@&#8203;radarhere](https://github.com/radarhere)] - Build PyPy3.11 wheel for macOS 10.15 x86\_64 [#&#8203;8789](https://github.com/python-pillow/Pillow/issues/8789) \[[@&#8203;hugovk](https://github.com/hugovk)] - Replace slice and comparison with `startswith`/`endswith` [#&#8203;8761](https://github.com/python-pillow/Pillow/issues/8761) \[[@&#8203;hugovk](https://github.com/hugovk)] - Use member names to initialize PyTypeObjects [#&#8203;8741](https://github.com/python-pillow/Pillow/issues/8741) \[[@&#8203;radarhere](https://github.com/radarhere)] - Pass CFLAGS to build\_simple directly [#&#8203;8738](https://github.com/python-pillow/Pillow/issues/8738) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only crop GIF frames when saving with disposal method 2 if transparency is present [#&#8203;8748](https://github.com/python-pillow/Pillow/issues/8748) \[[@&#8203;radarhere](https://github.com/radarhere)] - Update `pythoncapi_compat.h` to fix building with PyPy3.11 [#&#8203;8757](https://github.com/python-pillow/Pillow/issues/8757) \[[@&#8203;mgorny](https://github.com/mgorny)] - Rewrite the install\_name of the ZLIB-NG library on macOS [#&#8203;8673](https://github.com/python-pillow/Pillow/issues/8673) \[[@&#8203;freakboy3742](https://github.com/freakboy3742)] - Remove debug `Image._wedge` [#&#8203;8755](https://github.com/python-pillow/Pillow/issues/8755) \[[@&#8203;hugovk](https://github.com/hugovk)] - Remove unused `bdf_slant` and `bdf_spacing` variables [#&#8203;8753](https://github.com/python-pillow/Pillow/issues/8753) \[[@&#8203;hugovk](https://github.com/hugovk)] - Use boolean format argument for irreversible [#&#8203;8739](https://github.com/python-pillow/Pillow/issues/8739) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplify Python code by receiving tuple from C [#&#8203;8740](https://github.com/python-pillow/Pillow/issues/8740) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use member names to initialize modules [#&#8203;8734](https://github.com/python-pillow/Pillow/issues/8734) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplify Python code by passing tuples to C [#&#8203;8733](https://github.com/python-pillow/Pillow/issues/8733) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed redundant argument parsing [#&#8203;8732](https://github.com/python-pillow/Pillow/issues/8732) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added "justify" align for multiline text [#&#8203;8721](https://github.com/python-pillow/Pillow/issues/8721) \[[@&#8203;radarhere](https://github.com/radarhere)] - Seek relative to current position [#&#8203;8709](https://github.com/python-pillow/Pillow/issues/8709) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only use outside border of stroke in text() [#&#8203;8701](https://github.com/python-pillow/Pillow/issues/8701) \[[@&#8203;radarhere](https://github.com/radarhere)] - Support saving PNG cICP chunk [#&#8203;8704](https://github.com/python-pillow/Pillow/issues/8704) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use Py\_RETURN\_NONE macro when possible [#&#8203;8717](https://github.com/python-pillow/Pillow/issues/8717) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added ImageFile close() [#&#8203;8702](https://github.com/python-pillow/Pillow/issues/8702) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use arm64 Linux runners for wheels [#&#8203;8698](https://github.com/python-pillow/Pillow/issues/8698) \[[@&#8203;radarhere](https://github.com/radarhere)] - Test Windows amd64 wheels with NumPy [#&#8203;8696](https://github.com/python-pillow/Pillow/issues/8696) \[[@&#8203;radarhere](https://github.com/radarhere)] - Added logging to TiffImagePlugin fixIFD() [#&#8203;8568](https://github.com/python-pillow/Pillow/issues/8568) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed miniconda CPPFLAGS [#&#8203;8695](https://github.com/python-pillow/Pillow/issues/8695) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved comment [#&#8203;8694](https://github.com/python-pillow/Pillow/issues/8694) \[[@&#8203;radarhere](https://github.com/radarhere)] - Only F mode starts with F [#&#8203;8684](https://github.com/python-pillow/Pillow/issues/8684) \[[@&#8203;radarhere](https://github.com/radarhere)] - Allow saving multiple frames as BigTIFF [#&#8203;8663](https://github.com/python-pillow/Pillow/issues/8663) \[[@&#8203;radarhere](https://github.com/radarhere)] - Simplified converting to char \* [#&#8203;8662](https://github.com/python-pillow/Pillow/issues/8662) \[[@&#8203;radarhere](https://github.com/radarhere)] - Use namedtuple \_replace [#&#8203;8652](https://github.com/python-pillow/Pillow/issues/8652) \[[@&#8203;radarhere](https://github.com/radarhere)] - Updated TIFF decode error message string [#&#8203;8660](https://github.com/python-pillow/Pillow/issues/8660) \[[@&#8203;HarmvandenBrand](https://github.com/HarmvandenBrand)] - Added compile-time mozjpeg feature flag [#&#8203;8645](https://github.com/python-pillow/Pillow/issues/8645) \[[@&#8203;radarhere](https://github.com/radarhere)] - Improved Docker coverage reporting [#&#8203;8664](https://github.com/python-pillow/Pillow/issues/8664) \[[@&#8203;radarhere](https://github.com/radarhere)] - Removed giflib as webp dependency [#&#8203;8661](https://github.com/python-pillow/Pillow/issues/8661) \[[@&#8203;radarhere](https://github.com/radarhere)] - Corrected installing ImageMagick on cifuzz [#&#8203;8658](https://github.com/python-pillow/Pillow/issues/8658) \[[@&#8203;radarhere](https://github.com/radarhere)] ### [`v11.1.0`](https://github.com/python-pillow/Pillow/blob/HEAD/CHANGES.rst#1110-and-newer) [Compare Source](https://github.com/python-pillow/Pillow/compare/11.0.0...11.1.0) See GitHub Releases: - <https://github.com/python-pillow/Pillow/releases> </details> --- ### Configuration 📅 **Schedule**: (in timezone America/New_York) - Branch creation - "before 6am on monday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMzIuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI0OS41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJtYWpvci11cGRhdGUiXX0=-->
chore(deps): update dependency pillow to v12
All checks were successful
CI / test (pull_request) Successful in 2m59s
fb6b563591
renovate-bot force-pushed renovate/pillow-12.x from fb6b563591
All checks were successful
CI / test (pull_request) Successful in 2m59s
to bee3815ede
All checks were successful
CI / test (pull_request) Successful in 3m7s
2026-07-01 12:14:54 +00:00
Compare
Merge remote-tracking branch 'origin/main' into upd-tmp
Some checks failed
CI / test (pull_request) Failing after 4m38s
7086b795a9
Contributor

Superseded by #126 — the Pillow 12 bump is folded into a single CI-green consolidated dependency refresh so the whole stack moves together. #126 is verified green on the Forgejo runner (779 bulk + 4 Postgres tests), so Pillow 12 is confirmed fine on current main. Closing as superseded; the bump is preserved in #126.

Superseded by #126 — the Pillow 12 bump is folded into a single CI-green consolidated dependency refresh so the whole stack moves together. #126 is verified green on the Forgejo runner (779 bulk + 4 Postgres tests), so Pillow 12 is confirmed fine on current `main`. Closing as superseded; the bump is preserved in #126.
claude-bot closed this pull request 2026-07-24 20:34:47 +00:00
Some checks failed
CI / test (pull_request) Failing after 4m38s
Required
Details

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/WeatherBot!36
No description provided.