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

Open
renovate-bot wants to merge 1 commit 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:eyJjcmVhdGVkSW5WZXIiOiI0My4yMzIuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIzMi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJtYWpvci11cGRhdGUiXX0=-->
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
All checks were successful
CI / test (pull_request) Successful in 3m7s
Required
Details
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/pillow-12.x:renovate/pillow-12.x
git switch renovate/pillow-12.x
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
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.