Download Latest Version 12.0.0 source code.tar.gz (47.1 MB)
Email in envelope

Get an email when there's a new version of Pillow

Home / 12.0.0
Name Modified Size InfoDownloads / Week
Parent folder
12.0.0 source code.tar.gz 2025-10-15 47.1 MB
12.0.0 source code.zip 2025-10-15 47.9 MB
README.md 2025-10-15 9.4 kB
Totals: 3 Items   95.0 MB 75

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]
Source: README.md, updated 2025-10-15