https://pillow.readthedocs.io/en/stable/releasenotes/12.0.0.html
Removals
- Remove support for FreeType <= 2.9.0 #9159 [@radarhere]
- Drop support for Python 3.9 #9119 [@hugovk]
- Remove deprecations for Pillow 12.0.0 #9053 [@radarhere]
Deprecations
- Deprecate Image._show #9186 [@radarhere]
- Deprecate ImageCmsProfile product_name and product_info #8995 [@lukegb]
Documentation
- ImagingHistogramInstance can use two bands #9251 [@radarhere]
- Update 12.0.0 release notes #9247 [@hugovk]
- Added ImageDraw alpha channel examples #9201 [@radarhere]
- Update Python version #9230 [@radarhere]
- Updated macOS tested Pillow versions #9209 [@radarhere]
- Add GitHub profile link to release notes #9197 [@radarhere]
- Split versionadded info #9190 [@radarhere]
- Document ImageFile.MAXBLOCK #9163 [@radarhere]
- Updated macOS version in CI targets #9157 [@radarhere]
- Fix typos #9135 [@radarhere]
- Added "Colors" to concepts #9067 [@radarhere]
- Update macOS tested Pillow versions #9068 [@radarhere]
- Thanks, folks! #9056 [@aclark4life]
- Setup nit: "fork" should be lowercased #9055 [@aclark4life]
Dependencies
- Update dependency cibuildwheel to v3.2.1 #9246 [@renovate[bot]]
- [pre-commit.ci] pre-commit autoupdate #9233 [@pre-commit-ci[bot]]
- Update harfbuzz to 12.1.0 #9218 [@radarhere]
- Update libtiff to 4.7.1 #9222 [@radarhere]
- Update FreeType to 2.14.1 on macOS and Linux wheels #9217 [@radarhere]
- Update dependency cibuildwheel to v3.2.0 #9219 [@renovate[bot]]
- Update Ghostscript to 10.6.0 #9202 [@radarhere]
- Update openjpeg to 2.5.4 #9215 [@radarhere]
- Update harfbuzz to 11.5.0 #9203 [@radarhere]
- Update dependency mypy to v1.18.2 #9213 [@renovate[bot]]
- Update dependency mypy to v1.18.1 #9207 [@renovate[bot]]
- Update github-actions #9194 [@renovate[bot]]
- Updated harfbuzz to 11.4.5 #9150 [@radarhere]
- Update zlib-ng to 2.2.5 #9140 [@radarhere]
- Update raqm to 0.10.3 #9137 [@radarhere]
- Update libjpeg-turbo to 3.1.2 #9188 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #9180 [@pre-commit-ci[bot]]
- Update dependency cibuildwheel to v3.1.4 #9164 [@renovate[bot]]
- Update actions/checkout action to v5 #9156 [@renovate[bot]]
- Update actions/download-artifact action to v5 #9141 [@renovate[bot]]
- Updated harfbuzz to 11.3.3 #9103 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #9131 [@pre-commit-ci[bot]]
- Updated libimagequant to 4.4.0 #9074 [@radarhere]
- Update dependency mypy to v1.17.1 #9130 [@renovate[bot]]
- Update dependency cibuildwheel to v3.1.3 #9129 [@renovate[bot]]
- Update dependency cibuildwheel to v3.1.2 #9118 [@renovate[bot]]
- Updated libpng to 1.6.50 #9058 [@radarhere]
- Update cygwin/cygwin-install-action action to v6 #9108 [@renovate[bot]]
- Update dependency mypy to v1.17.0 #9092 [@renovate[bot]]
- Updated libwebp to 1.6.0 #9082 [@radarhere]
- Update dependency cibuildwheel to v3.0.1 #9075 [@renovate[bot]]
- [pre-commit.ci] pre-commit autoupdate #9073 [@pre-commit-ci[bot]]
Testing
- Check return types #9045 [@radarhere]
- Upgrade from macos-13 #9212 [@radarhere]
- Wheels CI: Check number of expected dists #9239 [@hugovk]
- Assert image type #8845 [@radarhere]
- Test GD transparency #9196 [@radarhere]
- Test mode when saving PPM images #9195 [@radarhere]
- Test unsupported BMP bitfields layout #9193 [@radarhere]
- Update Ghostscript to 10.6.0 #9202 [@radarhere]
- Use monkeypatch #9192 [@radarhere]
- Always check XMLPacket value #9113 [@radarhere]
- Rename variable to not shadow import #9124 [@radarhere]
- Removed unused code #9182 [@radarhere]
- Add has_feature_version helper #9172 [@radarhere]
- Replace print with assert #9171 [@radarhere]
- Add Debian 13 Trixie #9147 [@hugovk]
- Do not import from Tests directory in checks #9143 [@radarhere]
- Improve features test coverage #9077 [@radarhere]
- Remove WebP feature handling #9096 [@radarhere]
- Update for pyroma 5.0 #9093 [@radarhere]
- Improve WmfImagePlugin test coverage #9090 [@radarhere]
- Improve DdsImagePlugin test coverage #9091 [@radarhere]
- Improve ImageMath test coverage #9087 [@radarhere]
- Fix unclosed file warning #9065 [@radarhere]
- Pyroma now supports PEP 639 #9064 [@radarhere]
Type hints
- Install arro3 dependencies when type checking #9254 [@radarhere]
- Check return types #9045 [@radarhere]
- Assert image type #8845 [@radarhere]
- Move imports into TYPE_CHECKING #9123 [@radarhere]
- Remove support for NumPy 1.20 when type checking #9125 [@radarhere]
Other changes
- Use macos-14 for iOS arm64 simulator #9258 [@hugovk]
- Use enums for Modes and RawModes in C #9256 [@radarhere]
- Add ImageText #9098 [@radarhere]
- Shift bits before making value negative #9255 [@radarhere]
- Support saving variable length rational TIFF tags by default #9241 [@radarhere]
- Added four private SGI TIFF tags #9245 [@radarhere]
- Band names for arrow exported images #9099 [@wiredfool]
- Use macos-latest for iOS arm64 simulator #9250 [@radarhere]
- If pasting an image onto itself at a lower position, copy from bottom #8882 [@radarhere]
- Removed unused access for I;32L and I;32B #9238 [@radarhere]
- Corrected scientific-python-nightly-wheels pattern #9252 [@radarhere]
- Run sdist when scheduled, but do not upload to scientific-python-nightly-wheels index #9248 [@radarhere]
- Removed shebang lines and executable flags #9179 [@radarhere]
- Remove Pillow version from PDF comment #9176 [@radarhere]
- Support saving variable length rational TIFF tags #9111 [@radarhere]
- Build Python 3.14 on macOS 10.15 #9234 [@radarhere]
- Test largest CUR cursor #9191 [@radarhere]
- Do not unnecessarily update FLI __offset #9184 [@radarhere]
- Fill alpha channel when quantizing RGB images #9133 [@radarhere]
- Allow RGBA palettes to work with ImageOps.expand() #9138 [@radarhere]
- Fixed loading rotated PCD images #9177 [@radarhere]
- Cast before shifting bits #9236 [@radarhere]
- Use _ensure_mutable() #9200 [@radarhere]
- Seek past BeginBinary data when parsing EPS metadata #9211 [@radarhere]
- Do not allow negative offset with memory mapping #9235 [@radarhere]
- Clear C image when MPO frame image size changes #9208 [@radarhere]
- When converting RGBA to PA, use RGB to P quantization #9153 [@radarhere]
- Remove use of sudo from libavif and raqm install scripts #9231 [@radarhere]
- Load image palette into Python after converting to PA #9152 [@radarhere]
- Check all reserved bytes in FLI header #9183 [@radarhere]
- Limit length of read operation in ImageFont._load_pilfont_data() #9181 [@radarhere]
- Python 3.9 wheels are no longer needed #9214 [@radarhere]
- Remove unused Image _expand() #9227 [@radarhere]
- Updated FreeType to 2.14.1 on Windows #9206 [@radarhere]
- Only deprecate fromarray mode for changing data types #9063 [@radarhere]
- Fix reading RGB and CMYK IPTC images #9088 [@radarhere]
- Install zstd for libtiff on Linux wheels #9097 [@radarhere]
- Improve WalImageFile test coverage #9189 [@radarhere]
- ImageMorph operations must have length 1 #9102 [@radarhere]
- Set correct size for rotated PCD images after opening #9086 [@radarhere]
- Simplify check for GBR width and height #9089 [@radarhere]
- Make in parallel when building libjpeg-turbo and openjpeg for macOS and Linux wheels #9144 [@radarhere]
- Fix ZeroDivisionError in ImageStat #9105 [@radarhere]
- When deleting EXIF IFD tag, delete IFD data #9083 [@radarhere]
- Allow alpha_composite to use LA images #9066 [@radarhere]
- Improve _accept length check #9170 [@radarhere]
- Do not set core to DeferredError #9166 [@radarhere]
- Use macos-14 for iOS arm64 simulator #9161 [@radarhere]
- Make in parallel when building brotli and libavif for macOS and Linux wheels #9142 [@radarhere]
- Use Python 3.14 for gcc problem matching #9134 [@radarhere]
- Add libavif support for iOS #9117 [@freakboy3742]
- Restore pyroma test for iOS #9116 [@freakboy3742]
- Use correct bands for two band histograms #9054 [@radarhere]
- Add support for Python 3.14 #9120 [@hugovk]
- Drop support for PyPy3.10 #9112 [@radarhere]
- Add parallel compile from pybind11 #8990 [@wiredfool]
- Remove unused _save_cjpeg #9084 [@radarhere]
- Ensure dynamic libjpeg libraries are not linked #9081 [@freakboy3742]
- Remove reference to libtiff 3.x #9072 [@radarhere]
- Restored manylinux2014 wheels #9059 [@radarhere]