Releases: python-pillow/Pillow
11.0.0
https://pillow.readthedocs.io/en/stable/releasenotes/11.0.0.html
Removals
- Drop support for EOL PyPy3.9 #8335 [@hugovk]
- Remove all WITH_* flags from _imaging.c and other flags #8211 [@homm]
- Remove unused _util.is_directory #8259 [@hugovk]
- Drop support for Python 3.8 #8183 [@hugovk]
- Remove PSFile, PyAccess and USE_CFFI_ACCESS #8182 [@hugovk]
Deprecations
- Deprecate ICNS (width, height, scale) sizes in favour of load(scale) #8352 [@radarhere]
- Deprecate isImageType #8364 [@radarhere]
- Deprecate support for FreeType 2.9.0 #8356 [@hugovk]
- Remove WebP support without anim, mux/demux, and with buggy alpha #8213 [@homm]
- Deprecate JpegImageFile huffman_ac and huffman_dc #8274 [@radarhere]
- Deprecate ImageMath lambda_eval and unsafe_eval options argument #8242 [@radarhere]
Changes
- Do not create core image in TIFF seek() #8392 [@radarhere]
- Removed custom build_openjpeg #8365 [@radarhere]
- Support writing LONG8 offsets in AppendingTiffWriter #8417 [@radarhere]
- Use ImageFile.MAXBLOCK when saving TIFF images #8461 [@radarhere]
- Always raise warnings for deprecated feature checks #8459 [@radarhere]
- Do not close provided file handles with libtiff when saving #8458 [@radarhere]
- Revert "Skip QEMU-emulated wheels on workflow dispatch event" #8455 [@radarhere]
- Support ImageFilter.BuiltinFilter for I;16* images #8438 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #8448 [@pre-commit-ci]
- Use ImagingCore.ptr instead of ImagingCore.id #8341 [@homm]
- Simplified code #8445 [@radarhere]
- Removed unused code #8447 [@radarhere]
- Updated EPS mode when opening images without transparency #8281 [@Yay295]
- Use transparency when combining P frames from APNGs #8443 [@radarhere]
- Generate and upload attestations to PyPI #8441 [@hugovk]
- Do not convert images unnecessarily in ImageEnhance #8431 [@radarhere]
- Raise an error if path is compacted during mapping #8416 [@radarhere]
- Support all resampling filters when resizing I;16* images #8422 [@radarhere]
- Free memory on early return #8413 [@radarhere]
- Cast int before potentially exceeding INT_MAX #8402 [@radarhere]
- Prevent division by zero #8408 [@radarhere]
- Check image value before use #8400 [@radarhere]
- Use ruff check #8423 [@radarhere]
- Change harfbuzz versions in wheels #8421 [@radarhere]
- Use Capsule for WebP saving #8386 [@homm]
- Fixed writing multiple StripOffsets to TIFF #8317 [@Yay295]
- Updated macOS deployment target for PyPy on Intel to 10.15 #8414 [@radarhere]
- Fix dereference before checking for NULL in ImagingTransformAffine #8398 [@PavlNekrasov]
- Use transposed size after opening for TIFF images #8390 [@radarhere]
- Improve ImageFont error messages #8338 [@yngvem]
- Mention MAX_TEXT_CHUNK limit in PNG error message #8391 [@radarhere]
- Cast Dib handle to int #8385 [@radarhere]
- Updated macOS deployment target for Python >= 3.12 on Intel to 10.13 #8379 [@radarhere]
- Removed unused ImagePath variable #8377 [@radarhere]
- Change macos-14 to macos-latest #8376 [@radarhere]
- Accept float stroke widths #8369 [@radarhere]
- Remove comments #8370 [@radarhere]
- Removed libffi-dev #8368 [@radarhere]
- Improved handling of RGBA palettes when saving GIF images #8366 [@radarhere]
- Support converting more modes to LAB by converting to RGBA first #8358 [@radarhere]
- Optimize getbbox() and getextrema() routines #8194 [@homm]
- Removed unused TiffImagePlugin IFD_LEGACY_API #8355 [@radarhere]
- Handle duplicate EXIF header #8350 [@zakajd]
- Use (void) for empty function parameters #8002 [@Yay295]
- Return early from BoxBlur if either width or height is zero #8347 [@radarhere]
- Check text is either string or bytes #8308 [@radarhere]
- Added writing XMP bytes to JPEG #8286 [@radarhere]
- Require font parameter in FreeTypeFont and truetype() #8261 [@radarhere]
- Support JPEG2000 RGBA palettes #8256 [@radarhere]
- Expand C image to match GIF frame image size #8237 [@radarhere]
- Allow saving I;16 images as PPM #8231 [@radarhere]
- When IFD is missing, connect get_ifd() dictionary to Exif #8230 [@radarhere]
- Skip truncated ICO mask if LOAD_TRUNCATED_IMAGES is enabled #8180 [@radarhere]
- Treat unknown JPEG2000 colorspace as unspecified #8343 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #8342 [@pre-commit-ci]
- Updated error message when saving WebP with invalid width or height #8322 [@radarhere]
- Remove warning if NumPy failed to raise an error during conversion #8326 [@radarhere]
- Move repeated code to private helper function #8310 [@Yay295]
- Get IPTC info from tag_v2 #8315 [@radarhere]
- Log value from tag_v2 instead of tag #8306 [@radarhere]
- If left and right sides meet in ImageDraw.rounded_rectangle(), do not draw rectangle to fill gap #8304 [@radarhere]
- Add missing TIFF CMYK;16B reader #8298 [@homm]
- Fix undefined variable #8293 [@radarhere]
- Enforce CSV names style for
pytest.mark.parametrize
#8295 [@akx] - Fixed sign comparison warning #8294 [@radarhere]
- Move auxiliary mypy requirements to a requirements file #8289 [@akx]
- Removed unused variable #8288 [@radarhere]
- Improve ImageDraw2 shape methods #8265 [@radarhere]
- Lock around usages of imaging memory arenas #8238 [@lysnikolaou]
- Removed unused argument #8257 [@radarhere]
- Do not run scheduled wheel jobs on forks #8254 [@Yay295]
- Use local variable instead of casting every line #8248 [@Yay295]
- Change AlignAfterOpenBracket in .clang-format to BlockIndent #8067 [@Yay295]
- Move uploading nightly wheels to different job #8244 [@lysnikolaou]
- Skip QEMU-emulated wheels on workflow dispatch event #8243 [@lysnikolaou]
- Upload wheels to scientific-python-nightly-wheels index #8236 [@lysnikolaou]
- Temporarily disable cifuzz #8239 [@radarhere]
- Simplified code #8235 [@radarhere]
- Move away from APIs that use borrowed references under the free-threaded build #8216 [@hugovk]
- Build free-threaded wheels #8219 [@radarhere]
- Group aarch64 wheel jobs #8206 [@radarhere]
- Allow size argument to resize() to be a NumPy array #8201 [@radarhere]
- Add support for Python 3.13 #8181 [@hugovk]
- Removed Debian 11 #8185 [@radarhere]
Dependencies
- Update dependency cibuildwheel to v2.21.3 #8453 [@renovate]
- Update dependency cibuildwheel to v2.21.2 #8436 [@renovate]
- Updated xz to 5.6.3 #8434 [@radarhere]
- Update scientific-python/upload-nightly-action action to v0.6.1 #8430 [@renovate]
- Update scientific-python/upload-nightly-action action to v0.6.0 #8425 [@renovate]
- Updated harfbuzz to 10.0.1 in remaining wheels #8424 [@radarhere]
- Improved copying imagequant libraries #8420 [@radarhere]
- Updated fribidi to 1.0.16 #8419 [@radarhere]
- Updated harfbuzz to 10.0.1 #8415 [@radarhere]
- Updated harfbuzz to 10.0.0 #8411 [@radarhere]
- Shared imagequant libraries may be located within usr/lib64 #8407 [@radarhere]
- winbuild: Build freetype.vcxproj to fix passing in custom parameters #8403 [@nulano]
- Updated raqm to 0.10.2 #8404 [@radarhere]
- Updated Ghostscript to 10.4.0 #8395 [@radarhere]
- Update dependency cibuildwheel to v2.21.1 #8388 [@renovate]
- Updated libjpeg-turbo to 3.0.4 #8384 [@radarhere]
- Update dependency cibuildwheel to v2.21.0 #8378 [@renovate]
- Updated xz to 5.6.2 #7916 [@radarhere]
- Updated libpng to 1.6.44 #8375 [@radarhere]
- Updated harfbuzz to 9.0.0 in wheels, except for manylinux2014 #8361 [@radarhere]
- Update deadsnakes/action action to v3.2.0 #8360 [@renovate]
- Updated harfbuzz to 9.0.0 #8344 [@radarhere]
- Updated libimagequant to 4.3.3 #8284 [@radarhere]
- Updated freetype to 2.13.3 #8302 [@radarhere]
- Update dependency mypy to v1.11.2 #8334 [@renovate]
- [pre-commit.ci] pre-commit autoupdate #8287 [@pre-commit-ci]
- Update dependency cibuildwheel to v2.20.0 #8282 [@renovate]
- Update dependency mypy to v1.11.1 #8280 [@renovate]
- Update dependency mypy to v1.11.0 #8252 [@renovate]
- Update dependency cibuildwheel to v2.19.2 #8192 [@renovate]
- [pre-commit.ci] pre-commit autoupdate #8188 [@pre-commit-ci]
Documentation
- Update Python 3.13 release date #8463 [@hugovk]
- Update licence to MIT-CMU #8460 [@hugovk]
- Use CVE and CWE roles from Sphinx 8.1 #8457 [@hugovk]
- Updated test environment documentation #8427 [@radarhere]
- Updated macOS tested Pillow versions #8429 [@radarhere]
- Updated link to OSS Fuzz issues #8399 [@radarhere]
- Added release notes for #8379 #8381 [@radarhere]
- Windows wheels are now grouped with the others #8371 [@radarhere]
- Added release notes for #8199, #8213 and #8286 #8367 [@radarhere]
- Restore exiv2.org links #8260 [@hugovk]
- Add tutorial images #8246 [@aclark4life]
- Updated macOS tested Pillow versions #8202 [@radarhere]
- Updated CVE URL #8186 [@radarhere]
Testing
- Fixed unclosed file warning in test_imageshow.py #8446 [@radarhere]
- Test Python 3.13 on AppVeyor #8442 [@hugovk]
- Test cifuzz when wheel dependencies change #8435 [@radarhere]
- Restore cifuzz #8428 [@radarhere]
- Use common test scripts for more tests #8396 [@Yay295]
- Lint: Run PT016 #8382 [@radarhere]
- Test NumPy with musllinux wheels #8374 [@radarhere]
- Install NumPy from PyPI when testing wheels #8373 [@lysnikolaou]
- Install NumPy from PyPI for free threaded job #8372 [@radarhere]
- Canonical type comparison #8349 [@AryazE]
- Updated oss-fuzz to Python 3.10 #8297 [@radarhere]
- Corrected GitHub Actions Windows Ghostscript path #8332 [@radarhere]
- Catch defusedxml warnings #8325 [@radarhere]
- Uninstall gradle and maven on macOS 13 #8318 [@radarhere]
- Lint: run more flake8-pytest-style #8309 [@hugovk]
- Parametrize some color_lut tests for DRYness #8290 [@akx]
- Test 3.13 free-threaded build on CI #8200 [@hugovk]
- Test NumPy on Python 3.13 #8189 [@hugovk]
Type hints
- Added type hints to remaining ImageMath methods #8464 [@radarhere]
- Conditionally define ImageCms type hint to avoid requiring core #8...
10.4.0
https://pillow.readthedocs.io/en/stable/releasenotes/10.4.0.html
Deprecations
- Deprecate non-image ImageCms modes #8031 [@radarhere]
- Deprecate ImageDraw.getdraw hints parameter #8124 [@radarhere]
- Deprecate BGR;15, BGR;16 and BGR;24 modes #7978 [@radarhere]
- Deprecate support for libtiff < 4 #7998 [@radarhere]
Changes
- Raise FileNotFoundError if show_file() path does not exist #8178 [@radarhere]
- Improved reading 16-bit TGA images with colour #7965 [@Yay295]
- Fixed processing multiple JPEG EXIF markers #8127 [@radarhere]
- Do not preserve EXIFIFD tag by default when saving TIFF images #8110 [@radarhere]
- Added ImageFont.load_default_imagefont() #8086 [@radarhere]
- Added Image.WARN_POSSIBLE_FORMATS #8063 [@radarhere]
- Do not presume "xmp" info simply because "XML:com.adobe.xmp" info exists #8173 [@radarhere]
- Remove zero-byte end padding when parsing any XMP data #8171 [@radarhere]
- Do not detect Ultra HDR images as MPO #8056 [@radarhere]
- Raise SyntaxError specific to JP2 #8146 [@Yay295]
- Do not use first frame duration for other frames when saving APNG images #8104 [@radarhere]
- Consider I;16 pixel size when using a 1 mode mask #8112 [@radarhere]
- When saving multiple PNG frames, convert to mode rather than raw mode #8087 [@radarhere]
- Added byte support to FreeTypeFont #8141 [@radarhere]
- Allow float center for rotate operations #8114 [@radarhere]
- Do not read layers immediately when opening PSD images #8039 [@radarhere]
- Restore original thread state #8065 [@radarhere]
- Read IM and TIFF images as RGB, rather than RGBX #7997 [@radarhere]
- Only preserve TIFF IPTC_NAA_CHUNK tag if type is BYTE or UNDEFINED #7948 [@radarhere]
- Prevent extra EPS header validations #8144 [@Yay295]
- Clarify ImageDraw2 error message when size is missing #8165 [@radarhere]
- Support unpacking more rawmodes to RGBA palettes #7966 [@radarhere]
- Removed support for Qt 5 #8159 [@radarhere]
- Improve
ImageFont.freetype
support for XDG directories on Linux #8135 [@mamg22] - Improved consistency of XMP handling #8069 [@radarhere]
- Use pkg-config to help find libwebp and raqm #8142 [@radarhere]
- Renamed C transform2 to transform #8113 [@radarhere]
- Updated nasm to 2.16.03 #7990 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #8100 [@pre-commit-ci]
- Updated ImageCms.createProfile colorTemp default and docstring #8096 [@radarhere]
- Added ImageDraw circle() #8085 [@void4]
- Don't reuse variable name #8082 [@Yay295]
- Use functools.cached_property in GifImagePlugin #8037 [@radarhere]
- Add mypy target to Makefile #8077 [@Yay295]
- Added Python 3.13 beta wheels #8071 [@radarhere]
- Parse _version contents instead of using exec() #8050 [@radarhere]
- Lint fixes #8068 [@radarhere]
- Fix type errors #8064 [@radarhere]
- Added MPEG accept function #7999 [@radarhere]
- Added more modes to Image.MODES #7984 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #8044 [@pre-commit-ci]
- Do not use percent format in strings #8045 [@radarhere]
- Changed string formatting to f-strings #8043 [@mrKazzila]
- Removed direct invocation of setup.py #8027 [@radarhere]
- Update ExifTags.py #8020 [@CTimmerman]
- Fix ImagingAccess for I;16N on big-endian #7921 [@Yay295]
- Combined conditions #8011 [@radarhere]
- Simplified RGB to I;16, I;16L and I;16B conversion #8008 [@radarhere]
- Extract band count check #8006 [@Yay295]
- Remove unused variable #8005 [@Yay295]
- Remove semicolon after function definition #8004 [@Yay295]
- Support reading P mode TIFF images with padding #7996 [@radarhere]
- Corrected ImageShow UnixViewer command #7987 [@radarhere]
- Removed CentOS Stream 8 #7977 [@radarhere]
- Removed CentOS 7 #7976 [@radarhere]
- dist directory is no longer created #7974 [@radarhere]
- Add support for reading BITMAPV2INFOHEADER and BITMAPV3INFOHEADER #7956 [@Cirras]
- Update
make release-test
: no more eggs #7957 [@hugovk] - Make ModeDescriptor a NamedTuple #7951 [@Yay295]
- Support reading CMYK JPEG2000 images #7947 [@radarhere]
- Remove unused CMS properties and fix documentation #7931 [@Yay295]
- [pre-commit.ci] pre-commit autoupdate #7932 [@pre-commit-ci]
Dependencies
- Update dependency mypy to v1.10.1 #8177 [@renovate]
- Update dependency cibuildwheel to v2.19.1 #8143 [@renovate]
- Update dependency cibuildwheel to v2.19.0 #8131 [@renovate]
- Updated libjpeg-turbo to 3.0.3 #8048 [@radarhere]
- Updated fribidi to 1.0.15 #8014 [@radarhere]
- Updated libwebp to 1.4.0 #7973 [@radarhere]
- Updated libxcb and xcb-proto to 1.17.0 #7982 [@radarhere]
- Updated libimagequant to 4.3.1 #8025 [@radarhere]
- Updated harfbuzz to 8.5.0 #8059 [@radarhere]
- Updated Ghostscript to 10.3.1 #8078 [@radarhere]
- chore(deps): update dependency cibuildwheel to v2.18.1 #8070 [@renovate]
- chore(deps): update dependency cibuildwheel to v2.18.0 #8054 [@renovate]
- Update dependency mypy to v1.10.0 #8013 [@renovate]
Documentation
- Converted example images to WebP #7963 [@radarhere]
- Use latest Ubuntu on Read The Docs #8136 [@radarhere]
- Use Sphinx long options in
Makefile
#8109 [@hugovk] - Removed documentation of unused argument #8079 [@radarhere]
- Updated CI targets table #8028 [@radarhere]
- Automatically add dates to release notes #8001 [@hugovk]
- Remove sphinx-removed-in, now Sphinx 7.3 adds versionremoved #7988 [@hugovk]
- Removed nitpick_ignore by updating Sphinx to 7.3 #7985 [@radarhere]
- Updated installation links #7981 [@radarhere]
- Corrected packer comments #7964 [@Yay295]
- Release checklist: inline the 'Source and Binary Distributions' step #7959 [@hugovk]
- Removed outdated comment #7955 [@radarhere]
- Document that QoiImagePlugin uses Python for decoding #7937 [@radarhere]
- Updated macOS tested Pillow versions #7934 [@radarhere]
- Fix ImageMath documentation parameter names #7933 [@jbjd]
Testing
- Use more specific error #8168 [@radarhere]
- Ignore brew dependencies for libraqm on macOS 13 #8140 [@radarhere]
- Corrected AppVeyor Ghostscript path #8138 [@radarhere]
- Accept 't' suffix for libtiff version #8129 [@radarhere]
- Accept 't' suffix for libtiff version #8126 [@radarhere]
- Add ClangFormat to pre-commit #8015 [@hugovk]
- Removed helper.py modes #8053 [@radarhere]
- Updated codecov/codecov-action to v4 #8041 [@radarhere]
- Added Ubuntu 24.04 #8023 [@radarhere]
- Corrected big-endian check #8022 [@radarhere]
- Use LAB hopper file if conversion is not supported #7979 [@radarhere]
- Removed Fedora 38 and added Fedora 40 #8012 [@radarhere]
- Update tests to allow for zlib-ng #8009 [@radarhere]
- GitHub Actions: use
macos-13
ormacos-14
instead ofmacos-latest
#8010 [@hugovk] - Corrected check for libtiff feature #8000 [@radarhere]
- Corrected check for libtiff feature #7975 [@radarhere]
- Fix test error message grammar #7967 [@Yay295]
- Replace ImageMath.eval with ImageMath.lambda_eval in selftest.py #7960 [@radarhere]
- Rename test_roundtrip() to test_mode() #7950 [@Yay295]
- Updated pattern for skipping builds based on file changes #7938 [@radarhere]
- Corrected ImageCms test #7930 [@radarhere]
Type hints
- Simplified casts #8169 [@radarhere]
- Added type hints #8167 [@radarhere]
- Added type hints for PixelAccess related methods and others #8032 [@nulano]
- Added type hints to additional tests #8163 [@radarhere]
- Updated type hints #8153 [@radarhere]
- Added type hints to ImageFilter #8156 [@radarhere]
- Added type hints to ImageDraw shape methods #8151 [@radarhere]
- Added type hints to Image #8150 [@radarhere]
- Added type hints #8134 [@radarhere]
- Added type hints to additional tests #8118 [@radarhere]
- Added type hints #8132 [@radarhere]
- Added type hints to GifImagePlugin #8128 [@radarhere]
- Added type hints #8125 [@radarhere]
- Added type hints #8117 [@radarhere]
- Added type hints #8108 [@radarhere]
- Added type hints to ImageColor #8115 [@radarhere]
- Add various type annotations #8046 [@srittau]
- Added type hints #8107 [@radarhere]
- Added type hints #8105 [@radarhere]
- Added type hints #8066 [@radarhere]
- Added type hints #8099 [@radarhere]
- Corrected type hint #8098 [@radarhere]
- Updated type hints for tests #8095 [@radarhere]
- Added type hints to additional tests #8093 [@radarhere]
- Added type hints to additional tests #8091 [@radarhere]
- Added type hints to additional tests #8090 [@radarhere]
- Added type hints #8061 [@radarhere]
- Added type hints #8055 [@radarhere]
- Added type hints #8051 [@radarhere]
- Added type hints #8042 [@radarhere]
- Added type hints #8030 [@radarhere]
- Removed type hint ignores #7989 [@radarhere]
- fromarray: add type hints #7936 [@adamjstewart]
- Use functools.cached_property in ImageStat #7952 [@nulano]
- Add type hints for
Image.open
,Image.init
, andImage.Image.save
#7944 [@nulano]
10.3.0
https://pillow.readthedocs.io/en/stable/releasenotes/10.3.0.html
Deprecations
- Deprecate eval(), replacing it with lambda_eval() and unsafe_eval() #7927 [@hugovk]
- Deprecate ImageCms constants and versions() function #7702 [@nulano]
Changes
- CVE-2024-28219: Use strncpy to avoid buffer overflow #7928 [@hugovk]
- Use
functools.lru_cache
forhopper()
#7912 [@hugovk] - Raise ValueError if seeking to greater than offset-sized integer in TIFF #7883 [@radarhere]
- Improve speed of loading QOI images #7925 [@radarhere]
- Added RGB to I;16N conversion #7920 [@radarhere]
- Add --report argument to main.py to omit supported formats #7818 [@nulano]
- Added RGB to I;16, I;16L and I;16B conversion #7918 [@radarhere]
- Fix editable installation with custom build backend and configuration options #7658 [@nulano]
- Fix putdata() for I;16N on big-endian #7209 [@Yay295]
- Determine MPO size from markers, not EXIF data #7884 [@radarhere]
- Improved conversion from RGB to RGBa, LA and La #7888 [@radarhere]
- Support FITS images with GZIP_1 compression #7894 [@radarhere]
- Use I;16 mode for 9-bit JPEG 2000 images #7900 [@scaramallion]
- Raise ValueError if kmeans is negative #7891 [@radarhere]
- Remove TIFF tag OSUBFILETYPE when saving using libtiff #7893 [@radarhere]
- Raise ValueError for negative values when loading P1-P3 PPM images #7882 [@radarhere]
- Added reading of JPEG2000 palettes #7870 [@radarhere]
- Added alpha_quality argument when saving WebP images #7872 [@radarhere]
- Fixed joined corners for ImageDraw rounded_rectangle() non-integer dimensions #7881 [@radarhere]
- Removed Python and NumPy pinning on Cygwin #7880 [@radarhere]
- Update UnidentifiedImageError and version imports #7644 [@radarhere]
- Stop reading EPS image at EOF marker #7753 [@radarhere]
- PSD layer co-ordinates may be negative #7706 [@radarhere]
- Use subprocess with CREATE_NO_WINDOW flag in ImageShow WindowsViewer #7791 [@radarhere]
- When saving GIF frame that restores to background color, do not fill identical pixels #7788 [@radarhere]
- Fixed reading PNG iCCP compression method #7823 [@radarhere]
- Allow writing IFDRational to UNDEFINED tag #7840 [@radarhere]
- Fix logged tag name when loading Exif data #7842 [@radarhere]
- Use maximum frame size in IHDR chunk when saving APNG images #7821 [@radarhere]
- Prevent opening P TGA images without a palette #7797 [@radarhere]
- Use palette when loading ICO images #7798 [@radarhere]
- Use consistent arguments for load_read and load_seek #7713 [@radarhere]
- Turn off nullability warnings for macOS SDK #7827 [@radarhere]
- Fix shift-sign issue in Convert.c #7838 [@r-barnes]
- winbuild: Refactor dependency versions into constants #7843 [@hugovk]
- Build macOS arm64 wheels natively #7852 [@radarhere]
- Fixed typo #7855 [@radarhere]
- Open 16-bit grayscale PNGs as I;16 #7849 [@radarhere]
- Handle truncated chunks at the end of PNG images #7709 [@lajiyuan]
- Match mask size to pasted image size in GifImagePlugin #7779 [@radarhere]
- Changed SupportsGetMesh protocol to be public #7841 [@radarhere]
- Release GIL while calling
WebPAnimDecoderGetNext
#7782 [@evanmiller] - Fixed reading FLI/FLC images with a prefix chunk #7804 [@twolife]
- Updated package name for Tidelift #7810 [@radarhere]
- Removed unused code #7744 [@radarhere]
- Lint fix #7783 [@radarhere]
- Update wl-paste handling and return None for some errors in grabclipboard() on Linux #7745 [@nik012003]
- Fixed libXau error in wheels for macOS 10.10 #7764 [@radarhere]
- Changed name of first _Tile parameter #7772 [@radarhere]
- Remove execute bit from
setup.py
#7760 [@hugovk] - Changed ImageMath.ops to be static #7721 [@radarhere]
- Fix APNG info after seeking backwards more than twice #7701 [@esoma]
- Removed PPM loop to read header tokens #7698 [@radarhere]
- Added PerspectiveTransform #7699 [@radarhere]
- Add support for reading and writing grayscale PFM images #7696 [@nulano]
- Add LCMS2 flags to ImageCms #7676 [@nulano]
- Rename x64 to AMD64 in winbuild #7693 [@nulano]
- Build QEMU-emulated Linux aarch64 wheels on GitHub Actions instead of Travis CI #7690 [@hugovk]
- Simplify FreeTypeFont.getmask2() #7645 [@nulano]
- Updated Linux and macOS wheels matrix variable name #7691 [@radarhere]
- Skip PyPy3.8 Windows wheel #7682 [@radarhere]
Documentation
- Add type hints to release notes #7923 [@hugovk]
- Corrected exiv2.org links #7856 [@radarhere]
- Removed references to the "current version" #7905 [@radarhere]
- Added release notes for #7872, #7882 and #7891 #7904 [@radarhere]
- Clean up authors and contributors #7895 [@aclark4life]
- Update release notes #7885 [@hugovk]
- Backfill release notes with security fix details #7877 [@aclark4life]
- Describe difference between font size and bbox #7806 [@radarhere]
- Decoders and encoders subclass PyDecoder and PyEncoder #7801 [@radarhere]
- Update CI targets on GitHub Actions #7862 [@hugovk]
- Update "What about PIL?" section #7861 [@aclark4life]
- Update installation docs #7858 [@hugovk]
- Move installation.rst to installation/*.rst #7832 [@aclark4life]
- Removed references to Twitter #7836 [@radarhere]
- Consistently place versionremoved under heading #7829 [@radarhere]
- Remove outdated installation warnings #7814 [@hugovk]
- PyPI project page URL is now lowercase #7703 [@nulano]
- Use "non-zero" consistently #7695 [@radarhere]
- Improve ImageTransform documentation #7684 [@nulano]
- If ImageGrab.grab() bbox is omitted, screenshot is taken at 2x on Retina screens #7688 [@radarhere]
- Updated macOS tested Pillow versions #7689 [@radarhere]
- Update Windows 11 tested versions #7685 [@nulano]
- ImageGrab.grab() bbox on macOS is not 2x on retina screens #7678 [@radarhere]
- Package name is now lowercase in wheel filenames #7681 [@radarhere]
Type hints
- Add type hints for ImageCms #7913 [@nulano]
- Add type hints to
Image.py
#7924 [@hugovk] - Add type hints to release notes #7923 [@hugovk]
- Added
py.typed
andTyping :: Typed
to support type checking #7822 [@radarhere] - Added remaining type hints to Tests/test_image_*.py #7793 [@radarhere]
- Added type hints for ImageShow #7712 [@radarhere]
- Added type hints to additional tests #7754 [@radarhere]
- Added type hints to additional tests #7755 [@radarhere]
- Added type hints to additional tests #7769 [@radarhere]
- Added type hints to additional tests #7784 [@radarhere]
- Added type hints to additional tests #7794 [@radarhere]
- Added type hints to additional tests #7807 [@radarhere]
- Added type hints to additional tests #7816 [@radarhere]
- Added type hints to additional tests #7846 [@radarhere]
- Added type hints to FitsImagePlugin #7714 [@radarhere]
- Added type hints to GdImageFile #7727 [@radarhere]
- Added type hints to ImageMath #7707 [@radarhere]
- Added type hints to ImageMorph #7708 [@radarhere]
- Added type hints to ImageOps #7786 [@radarhere]
- Added type hints to ImtImagePlugin #7720 [@radarhere]
- Added type hints to MpegImagePlugin #7728 [@radarhere]
- Added type hints to MspImagePlugin #7719 [@radarhere]
- Added type hints to OSS Fuzz scripts #7731 [@radarhere]
- Added type hints to PpmImagePlugin #7726 [@radarhere]
- Added type hints to seven plugins #7716 [@radarhere]
- Added type hints to SgiImagePlugin #7724 [@radarhere]
- Added type hints to Tests/check_*.py #7732 [@radarhere]
- Added type hints to Tests/conftest.py #7740 [@radarhere]
- Added type hints to Tests/helper.py #7733 [@radarhere]
- Added type hints to Tests/test_font_*.py #7743 [@radarhere]
- Added type hints to TgaImagePlugin #7725 [@radarhere]
- Autotype tests #7756 [@hugovk]
- Decoders and encoders subclass PyDecoder and PyEncoder #7801 [@radarhere]
- Removed mypy excludes #7808 [@radarhere]
- Removed mypy excludes, except for olefile-related files #7790 [@radarhere]
- Replace
io.BytesIO
in type hints #7750 [@hugovk] - Type hints: Add PYI (flake8-pyi) to Ruff and fix errors #7897 [@hugovk]
- Use IO[bytes] in type hints #7795 [@radarhere]
Dependencies
-
[pre-commit.ci] pre-commit autoupdate and fix deprecations #7780 [@pre-commit-ci]
-
Update release-drafter/release-drafter action to v6 #7774 [@renovate]
-
Updated Ghostscript to 10.3.0 #7887 [@radarhere]
-
Updated giflib on macOS to 5.2.2 #7815 [@radarhere]
-
Updated harfbuzz to 8.3.1 #7886 [@radarhere]
-
Updated harfbuzz to 8.4.0 #7917 [@radarhere]
-
Updated libimagequant to 4.3.0 #7749 [@radarhere]
-
Updated libjpeg-turbo to 3.0.2 #7752 [@radarhere]
-
Updated libpng to 1.6.43 #7768 [@radarhere]
-
Updated libxcb to 1.16.1 #7853 [@radarhere]
-
Updated openjpeg to 2.5.2 #7837 [@radarhere]
-
Updated xorgproto to 2024.1 #7907 [@radarhere]
-
Updated zlib to 1.3.1 #7746 [@radarhere]
-
Testing
-
Use setup_module() to open images so they aren't opened if skipped #7911 [@Yay295]
-
Revert "Pin Python 3.13 on Windows to a3" #7878 [@radarhere]
-
Restored testing of non-TrueType default font #7748 [@radarhere]
-
Do not use packaged MinGW pip #7844 [@radarhere]
-
Require coverage.py 7.4.2+ for
COVERAGE_CORE: sysmon
#7825 [@hugovk] -
Set
COVERAGE_CORE: sysmon
for faster tests on 3.12+ #7820 [@hugovk]
10.2.0
https://pillow.readthedocs.io/en/stable/releasenotes/10.2.0.html
Deprecations
- Deprecate IptcImagePlugin helpers #7664 [@nulano]
- Translate encoder error codes to strings; deprecate
ImageFile.raise_oserror()
#7609 [@bgilbert]
Changes
- Add
keep_rgb
option when saving JPEG to prevent conversion of RGB colorspace #7553 [@bgilbert] - Trim negative glyph offsets in ImageFont.getmask() #7672 [@nulano]
- Removed unnecessary "pragma: no cover" #7668 [@radarhere]
- Trim glyph size in ImageFont.getmask() #7669 [@radarhere]
- Fix loading IPTC images and update test #7667 [@nulano]
- Allow uncompressed TIFF images to be saved in chunks #7650 [@radarhere]
- Concatenate multiple JPEG EXIF markers #7496 [@radarhere]
- Changed IPTC tile tuple to match other plugins #7661 [@radarhere]
- Do not assign new fp attribute when exiting context manager #7566 [@radarhere]
- Support arbitrary masks for uncompressed RGB DDS images #7589 [@radarhere]
- Support setting ROWSPERSTRIP tag #7654 [@radarhere]
- Apply ImageFont.MAX_STRING_LENGTH to ImageFont.getmask() #7662 [@radarhere]
- Optimise
ImageColor
usingfunctools.lru_cache
#7657 [@hugovk] - Restricted environment keys for ImageMath.eval() #7655 [@radarhere]
- Optimise
ImageMode.getmode
usingfunctools.lru_cache
#7641 [@hugovk] - Added trusted PyPI publishing #7616 [@radarhere]
- Compile FriBiDi for Windows ARM64 #7629 [@nulano]
- Fix incorrect color blending for overlapping glyphs #7497 [@ZachNagengast]
- Add .git-blame-ignore-revs file #7528 [@akx]
- Attempt memory mapping when tile args is a string #7565 [@radarhere]
- Fill identical pixels with transparency in subsequent frames when saving GIF #7568 [@radarhere]
- Removed unnecessary string length check #7560 [@radarhere]
- Determine mask mode in Python instead of C #7548 [@radarhere]
- Corrected duration when combining multiple GIF frames into single frame #7521 [@radarhere]
- Handle disposing GIF background from outside palette #7515 [@radarhere]
- Seek past the data when skipping a PSD layer #7483 [@radarhere]
- ImageMath: Inline
isinstance
check #7623 [@hugovk] - Update actions/upload-artifact action to v4 #7619 [@radarhere]
- Import plugins relative to the module #7576 [@deliangyang]
- Updated readthedocs to latest version of Python #7611 [@radarhere]
- Support reading BC4U and DX10 BC1 images #6486 [@REDxEYE]
- Optimize ImageStat.Stat.extrema #7593 [@florath]
- Handle pathlib.Path in FreeTypeFont #7578 [@radarhere]
- Use list comprehensions to create transformed lists #7597 [@hugovk]
- Added support for reading DX10 BC4 DDS images #7603 [@sambvfx]
- Optimized ImageStat.Stat.count #7599 [@florath]
- Moved error from truetype() to FreeTypeFont #7587 [@radarhere]
- Correct PDF palette size when saving #7555 [@radarhere]
- Fixed closing file pointer with olefile 0.47 #7594 [@radarhere]
- ruff: Minor optimizations of list comprehensions, x in set, etc. #7524 [@cclauss]
- Build Windows wheels using cibuildwheel #7580 [@nulano]
- Raise ValueError when TrueType font size is zero or less #7584 [@akx]
- Install cibuildwheel from requirements file #7581 [@hugovk]
- List optional dependencies in pyproject (apart from docs and tests) #7563 [@radarhere]
- Use cibuildwheel #7552 [@radarhere]
- "optimize" default when saving GIF images #7570 [@radarhere]
- If absent, do not try to close fp when closing image #7557 [@RaphaelVRossi]
- Windows arm64 dependency cross-compilation fixes #7559 [@nulano]
- Allow configuring JPEG restart marker interval on save #7488 [@bgilbert]
- Decrement reference count for PyObject #7549 [@radarhere]
- Release automation: create sdist on CI #7544 [@hugovk]
- Fix for Python 3.13: explicitly include
unistd.h
#7535 [@hugovk] - Remove old commented-out code #7527 [@akx]
- Implement
streamtype=1
option for tables-only JPEG encoding #7491 [@bgilbert] - DOC: Add missing sections to FREETYPE2.txt #7507 [@stefan6419846]
- If save_all PNG only has one frame, do not create animated image #7522 [@radarhere]
- Fixed frombytes() for images with a zero dimension #7493 [@radarhere]
- Update Travis CI to Python 3.12 and Ubuntu 22.04 Jammy Jellyfish #7501 [@hugovk]
- Simplified code #7499 [@radarhere]
- Switched from direct setup.py invocation to "pip install ." #7498 [@radarhere]
- Add mode to ImageOps._lut() error message #7490 [@Yay295]
- Move config from
setup.cfg
topyproject.toml
#7484 [@hugovk] - Use "gray" more consistently #7481 [@radarhere]
- Added messages to errors #7480 [@radarhere]
Dependencies
- [pre-commit.ci] pre-commit autoupdate #7675 [@pre-commit-ci]
- Update github-actions #7607 [@renovate]
- [pre-commit.ci] pre-commit autoupdate #7602 [@pre-commit-ci]
- Updated lcms2 to 2.16 #7598 [@radarhere]
- Updated harfbuzz to 8.3.0 #7475 [@radarhere]
- Updated xz to 5.4.5 #7513 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #7525 [@pre-commit-ci]
- Updated libjpeg-turbo to 3.0.1 #7472 [@radarhere]
Documentation
- Fix image URL in "Reading from URL" example #7674 [@nulano]
- Release notes: add
ImageColor
andImageMode
optimisations, and type hints #7665 [@hugovk] - Added release notes for #7589 and #7654 #7670 [@radarhere]
- Updated copyright year #7663 [@radarhere]
- Updated RELEASING now that Trusted PyPI publishing is in use #7652 [@radarhere]
- Add 'Type hints' as a release note category #7653 [@hugovk]
- Document JPEG 2000 support for writing YCbCr and reading subsampled color #7636 [@bgilbert]
- Clarify default anchor alignment #7600 [@nulano]
- Added release notes #7608 [@radarhere]
- Added release notes for #7599 and #7593 #7605 [@radarhere]
- Document JPEG
streamtype
option #7601 [@bgilbert] - Update Windows wheels info #7590 [@radarhere]
- Docs: Activate tabs based on browser's operating system #7579 [@hugovk]
- Updated wheels README after cibuildwheel integration #7572 [@radarhere]
- Use --config-settings in external libraries list in installation.rst #7564 [@nulano]
- Docs: tcl/tk is no longer a build dependency #7562 [@radarhere]
- Add Windows 11 tested Pillow versions #7558 [@nulano]
- Docs: link exceptions to Python docs #7512 [@hugovk]
- Add CVE-2023-44271 to release notes #7520 [@hugovk]
- Mention defusedxml and olefile in installation instructions #7509 [@radarhere]
- Docs: Add
pypi
Sphinx role #7505 [@hugovk] - Improved olefile documentation and testing #7503 [@radarhere]
- Add Python 3.12 support to Pillow 10.1.0 release notes #7466 [@hugovk]
- Updated macOS tested Pillow versions #7470 [@radarhere]
- Fix typos in ImageOps.rst and tutorial.rst #7469 [@nulano]
- Update release checklist: macOS/Linux artifact is called 'wheels' #7467 [@hugovk]
Testing
- Coverage: add more exclusions #7666 [@hugovk]
- Add gcc problem matcher to test.yml #7585 [@nulano]
- Restored testing of ImageFont class #7647 [@radarhere]
- Check types with mypy #7622 [@hugovk]
- Update pre-commit to fix Sphinx Lint #7615 [@hugovk]
- Fix up most noqas #7526 [@akx]
- Tests: Replace
assert False
withpytest.fail()
#7546 [@hugovk] - Test Fedora 39 #7542 [@hugovk]
- Black and Ruff infer
target-version
fromrequires-python
inpyproject.toml
#7530 [@hugovk] - Move linting to ruff #6966 [@akx]
- Removed Fedora 37 #7516 [@radarhere]
- Updated AppVeyor to Python 3.12 #7508 [@radarhere]
- Improved olefile documentation and testing #7503 [@radarhere]
- Skip non-wheel CI runs for tags #7468 [@hugovk]
Type hints
- Added type hints to ImageTransform #7671 [@radarhere]
- Add type hints to _util #7642 [@nulano]
- Add type hints to _binary #7659 [@nulano]
- Add type hints to ContainerIO #7656 [@nulano]
- Removed
__future__
import from fuzz_font.py and fuzz_pillow.py #7649 [@radarhere] - Added type hints to FontFile and subclasses #7643 [@radarhere]
- Added type hints to selftest.py, docs/conf.py and docs/example/anchors.py #7640 [@radarhere]
- Added TarIO type hints #7638 [@radarhere]
- Moved
__future__
import to beginning of file #7637 [@radarhere] - Added type hints to ImageSequence #7635 [@radarhere]
- Add type hints for ImageMode #7633 [@hugovk]
- Add
from __future__ import annotations
using Ruff/isort #7631 [@hugovk] - Check types with mypy #7622 [@hugovk]
- Added type hints for format and format_description #7624 [@radarhere]
- Added type hints to ImageChops #7617 [@radarhere]
10.1.0
https://pillow.readthedocs.io/en/stable/releasenotes/10.1.0.html
Changes
- Added TrueType default font to allow for different sizes #7354 [@radarhere]
- Fixed invalid argument warning #7442 [@radarhere]
- Fixed "may be used uninitialized" warning #7444 [@radarhere]
- Added ImageOps cover method #7412 [@radarhere]
- Catch struct.error from truncated EXIF when reading JPEG DPI #7458 [@radarhere]
- Consider default image when selecting mode for PNG save_all #7437 [@radarhere]
- Use new() instead of Image()._new() #7460 [@radarhere]
- Fix libbrotli build for Windows wheels #7453 [@nulano]
- Allow custom builds to be triggered in Travis CI #7449 [@radarhere]
- Support BGR;15, BGR;16 and BGR;24 access, unpacking and putdata #7303 [@radarhere]
- Added CMYK to RGB unpacker #7310 [@radarhere]
- Improved flexibility of XMP parsing #7274 [@radarhere]
- Support reading 8-bit YCbCr TIFF images #7415 [@radarhere]
- Allow saving I;16B images as PNG #7302 [@radarhere]
- Corrected drawing I;16 points and writing I;16 text #7257 [@radarhere]
- Set blue channel to 128 for BC5S #7413 [@radarhere]
- Increase flexibility when reading IPTC fields #7319 [@radarhere]
- Set C palette to be empty by default #7289 [@radarhere]
- Moved getmask2 MAX_IMAGE_PIXELS check to Python #7247 [@radarhere]
- Added gs_binary to control Ghostscript use on all platforms #7392 [@radarhere]
- Updated multibuild to include Python 3.12.0 #7440 [@radarhere]
- Don't run normal tests on changes to wheel-building files #7436 [@hugovk]
- Move code from pillow-wheels #7418 [@radarhere]
- Removed unused code #7434 [@radarhere]
- Read bounding box information from the trailer of EPS files if specified #7382 [@nopperl]
- Added reading 8-bit color DDS images #7426 [@radarhere]
- Added has_transparency_data #7420 [@radarhere]
- Revert #7311: "Read WebP duration after opening" #7406 [@radarhere]
- Fixed bug when reading BC5S DDS images #7401 [@radarhere]
Dependencies
- Updated libimagequant to 4.2.2 #7463 [@radarhere]
- Updated libtiff to 4.6.0 #7452 [@radarhere]
- Updated brotli to 1.1.0 #7451 [@radarhere]
- Updated harfbuzz to 8.2.1 #7409 [@radarhere]
- Updated PyPy to 7.3.13 #7439 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #7438 [@pre-commit-ci]
Documentation
- Describe how to populate mode and size when writing a plugin #7465 [@radarhere]
- Updated redirected links #7448 [@radarhere]
- Add warning to docs: Pillow > 9.5.0 no longer includes 32-bit wheels #7447 [@aclark4life]
- Added release notes for #7336, #7355, #7358 and #7392 #7446 [@radarhere]
- Corrected macOS version name #7431 [@radarhere]
- Updated macOS tested Pillow versions #7430 [@radarhere]
- Improved init(), preinit() and register_mime() documentation #7399 [@radarhere]
- Updated macOS tested Pillow versions #7400 [@radarhere]
Testing
- Test Python 3.12 final in GitHub Actions #7441 [@radarhere]
- Add checks to pre-commit #7421 [@hugovk]
- AppVeyor: don't download huge pillow-depends.zip #7407 [@hugovk]
- NumPy now supports Python 3.12 #7403 [@radarhere]
10.0.1
https://pillow.readthedocs.io/en/stable/releasenotes/10.0.1.html
Changes
- Updated libwebp to 1.3.2 #7395 [@radarhere]
- Updated zlib to 1.3 #7344 [@radarhere]
10.0.0
https://pillow.readthedocs.io/en/stable/releasenotes/10.0.0.html
Removals
- Remove deprecated ImageFont.getsize and related functions for Pillow 10.0.0 #7080 [@radarhere]
- Remove deprecations for Pillow 10.0.0 #7059 [@hugovk]
- Drop support for soon-EOL Python 3.7 #7058 [@hugovk]
Deprecations
- Do not use CFFI access by default on PyPy #7236 [@radarhere]
Changes
- Fixed deallocating mask images #7246 [@radarhere]
- Added ImageFont.MAX_STRING_LENGTH #7244 [@radarhere]
- Fix Windows build with pyproject.toml #7230 [@nulano]
- Do not close provided file handles with libtiff #7199 [@radarhere]
- Convert to HSV if mode is HSV in getcolor() #7226 [@radarhere]
- Added alpha_only argument to getbbox() #7123 [@radarhere]
- Prioritise speed in repr_png #7242 [@radarhere]
- Limit size even if one dimension is zero in decompression bomb check #7235 [@radarhere]
- Restored 32-bit support #7234 [@radarhere]
- Removed deleted file from codecov.yml and increased coverage threshold #7232 [@radarhere]
- Removed support for 32-bit #7228 [@radarhere]
- Use --config-settings instead of deprecated --global-option #7171 [@radarhere]
- Better C integer definitions #6645 [@Yay295]
- Fixed finding dependencies on Cygwin #7175 [@radarhere]
- Improved checks in font_render #7218 [@radarhere]
- Change
grabclipboard()
to use PNG compression on macOS #7219 [@abey79] - Added PyPy 3.10 and removed PyPy 3.8 #7216 [@radarhere]
- Added in_place argument to ImageOps.exif_transpose() #7092 [@radarhere]
- Corrected error code #7177 [@radarhere]
- Use "not in" #7174 [@radarhere]
- Only call text_layout once in getmask2 #7206 [@radarhere]
- Fixed calling putpalette() on L and LA images before load() #7187 [@radarhere]
- Removed unused INT64 definition #7180 [@radarhere]
- Updated xz to 5.4.3 #7136 [@radarhere]
- Fixed saving TIFF multiframe images with LONG8 tag types #7078 [@radarhere]
- Do not set size unnecessarily if image fails to open #7056 [@radarhere]
- Removed unused code #7210 [@radarhere]
- Removed unused variables #7205 [@radarhere]
- Fixed signedness comparison warning #7203 [@radarhere]
- Fixed combining single duration across duplicate APNG frames #7146 [@radarhere]
- Remove temporary file when error is raised #7148 [@radarhere]
- Do not use temporary file when grabbing clipboard on Linux #7200 [@radarhere]
- If the clipboard fails to open on Windows, wait and try again #7141 [@radarhere]
- Fixed saving multiple 1 mode frames to GIF #7181 [@radarhere]
- Replaced absolute PIL import with relative import #7173 [@radarhere]
- Removed files and types override #7194 [@radarhere]
- Removed duplicate config #7193 [@radarhere]
- Replaced deprecated Py_FileSystemDefaultEncoding for Python >= 3.12 #7192 [@radarhere]
- Improved wl-paste mimetype handling in ImageGrab #7094 [@rrcgat]
- Updated redirected URLs #7178 [@radarhere]
- Added repr_jpeg() for IPython display_jpeg #7135 [@n3011]
- Use "/sbin/ldconfig" if ldconfig is not found #7068 [@radarhere]
- Prefer screenshots using XCB over gnome-screenshot #7143 [@nulano]
- Fixed joined corners for ImageDraw rounded_rectangle() odd dimensions #7151 [@radarhere]
- Support reading signed 8-bit TIFF images #7111 [@radarhere]
- Added width argument to ImageDraw regular_polygon #7132 [@radarhere]
- Support I mode for ImageFilter.BuiltinFilter #7108 [@radarhere]
- Raise error from stderr of Linux ImageGrab.grabclipboard() command #7112 [@radarhere]
- Updated libimagequant to 4.2.0 #7128 [@radarhere]
- Added unpacker from I;16B to I;16 #7125 [@radarhere]
- Use stdlib for setuptools on MinGW #7131 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #7129 [@pre-commit-ci]
- Support float font sizes #7107 [@radarhere]
- Use later value for duplicate xref entries in PdfParser #7102 [@radarhere]
- Load before getting size in getstate #7105 [@bigcat88]
- Added Fedora 38 #7109 [@radarhere]
- Removed duplicate code #7106 [@radarhere]
- Remove use of deprecated OpenJPEG "bpp" member #7090 [@radarhere]
- Select Python version in Cygwin #7091 [@radarhere]
- Updated nasm to 2.16.01 #7089 [@radarhere]
- Update vendored Raqm to 0.10.1 #7087 [@nulano]
- 10.0.0.dev0 version bump #7057 [@radarhere]
- Fixed type handling for include and lib directories #7069 [@adisbladis]
- Do not install PyQt6-Qt6 6.5.0 #7081 [@radarhere]
- Removed FIXME comment #7072 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #7063 [@pre-commit-ci]
Dependencies
- Updated libtiff to 4.5.1 #7233 [@radarhere]
- Updated libwebp to 1.3.1 #7238 [@radarhere]
- Updated freetype to 2.13.1 #7231 [@radarhere]
- Updated fribidi to 1.0.13 #7166 [@radarhere]
- Updated harfbuzz to 7.3.0 #7152 [@radarhere]
- Updated harfbuzz to 7.2.0 #7118 [@radarhere]
- Update cygwin/cygwin-install-action action to v4 #7099 [@renovate]
- Updated raqm to 0.10.1 #7088 [@radarhere]
Documentation
- Added release notes for #7123 #7243 [@radarhere]
Image.open()
seeks to the start of file objects #7097 [@radarhere]- Added release notes for #7235 #7239 [@radarhere]
- Update Image.show docs to list all viewers used on Linux #7229 [@RoziePlaysPython]
- Document how to install on MinGW when setuptools >= 60 #7224 [@radarhere]
- Clarify that the changelog should not be updated in PRs #7220 [@radarhere]
- Moved QOI from Write-Only to Read-Only #7212 [@radarhere]
- Improved documention of "corners" argument for rounded_rectangle #7211 [@radarhere]
- Removed rectangle example from co-ordinate system documentation #7169 [@radarhere]
- Document order of kernel weights #7204 [@radarhere]
- Build only PDF in addition to default html #7164 [@hugovk]
- ImageGrab grabclipboard() is supported on Linux #7160 [@radarhere]
- Clarify that line() and polygon() include xy pixels #7142 [@radarhere]
- Updated redirected URL #7157 [@radarhere]
- Updated ImagePath tolist() default #7138 [@radarhere]
- Added release notes for #7132 #7134 [@radarhere]
- Build all readthedocs formats #7116 [@radarhere]
- Updated macOS tested Pillow versions #7103 [@radarhere]
- Fix typo #7101 [@hugovk]
- Release refinement #7074 [@hugovk]
- Improve ImageEnhance factor documentation #7065 [@radarhere]
Testing
- bench_cffi_access print formatting #7227 [@Yay295]
- Add Debian 12 Bookworm #7208 [@hugovk]
- Fix Python 3.12 failures #7188 [@radarhere]
- Test lists and tuples #6949 [@Yay295]
- Test both lists and tuples as qtables arguments #6900 [@Yay295]
- More ImagePath tests #6904 [@Yay295]
- Removed Ubuntu 18.04 docker image #7115 [@radarhere]
- Removed Fedora 36 #7098 [@radarhere]
- Fix codecov after they deleted the Python package from PyPI #7085 [@hugovk]
- Install libxcb-cursor0 #7083 [@radarhere]
- Add release check to make sure no TODOs remain in release notes #7075 [@hugovk]
9.5.0
https://pillow.readthedocs.io/en/stable/releasenotes/9.5.0.html
Deprecations
- Refactor EpsImagePlugin and deprecate PSFile #6879 [@Yay295]
- Handling for deprecations to be removed in Pillow 11 #6905 [@hugovk]
Changes
- Do not discard error message if _imagingft fails to import #7047 [@nulano]
- Added ImageSourceData to TAGS_V2 #7053 [@radarhere]
- Clear PPM half token after use #7052 [@radarhere]
- Do not render text if image has zero width or height #7021 [@radarhere]
- Removed unnecessary silencing of stderr #7046 [@radarhere]
- Fixed compilation warnings #7050 [@radarhere]
- Handle failure from PyDict_New or PyList_New #6999 [@radarhere]
- Removed absolute path to ldconfig #7044 [@radarhere]
- Windows: compile xz with CMake #6947 [@nulano]
- Support custom comments and PLT markers when saving JPEG2000 images #6903 [@joshware]
- Load before getting size in array_interface #7034 [@radarhere]
- Support creating BGR;15, BGR;16 and BGR;24 images, but drop support for BGR;32 #7010 [@radarhere]
- Consider transparency when applying APNG blend mask #7018 [@radarhere]
- Round duration when saving animated WebP images #6996 [@radarhere]
- Added reading of JPEG2000 comments #6909 [@radarhere]
- Decrement reference count #7003 [@radarhere]
- Allow libtiff_support_custom_tags to be missing #7020 [@radarhere]
- Updated xz to 5.4.2 #7026 [@radarhere]
- Improved I;16N support #6834 [@radarhere]
- Added QOI reading #6852 [@radarhere]
- Added saving RGBA images as PDFs #6925 [@radarhere]
- Do not raise an error if os.environ does not contain PATH #6935 [@radarhere]
- Close OleFileIO instance when closing or exiting FPX or MIC #7005 [@radarhere]
- Added int to IFDRational for Python >= 3.11 #6998 [@radarhere]
- Move potential error earlier #7002 [@radarhere]
- Remove redundant default values #6914 [@radarhere]
- Added memoryview support to Dib.frombytes() #6988 [@radarhere]
- Close file pointer copy in the libtiff encoder if still open #6986 [@fcarron]
- Removed unused profile_fromstring method #6987 [@radarhere]
- Release buffer #6976 [@radarhere]
- Raise an error if ImageDraw co-ordinates are incorrectly ordered #6978 [@radarhere]
- Added "corners" argument to ImageDraw rounded_rectangle() #6954 [@radarhere]
- Clarify some local variable names #6971 [@akx]
- Added memoryview support to frombytes() #6974 [@radarhere]
- Allow comments in FITS images #6973 [@radarhere]
- Relax roundtrip check #6970 [@radarhere]
- Support saving PDF with different X and Y resolutions #6961 [@jvanderneutstulen]
- Relax roundtrip check #6967 [@radarhere]
- Fixed writing int as UNDEFINED tag #6950 [@radarhere]
- Update HPND wording in LICENSE file #6936 [@mtelka]
- Relaxed child images check to allow for libjpeg #6853 [@radarhere]
- Raise an error if EXIF data is too long when saving JPEG #6939 [@radarhere]
- Fixed typo #6940 [@radarhere]
- Sort dependencies #6922 [@radarhere]
- Handle more than one directory returned by pkg-config #6896 [@sebastic]
- Relax ImageQt roundtrip check #6915 [@radarhere]
- Prevent register_open from adding duplicates to ID #6917 [@radarhere]
- Do not retry past formats when loading all formats for the first time #6902 [@radarhere]
- Do not retry specified formats if they failed when opening #6893 [@radarhere]
- Do not unintentionally load TIFF format at first #6892 [@radarhere]
- Stop reading when EPS line becomes too long #6897 [@radarhere]
- Allow writing IFDRational to BYTE tag #6890 [@radarhere]
- Raise ValueError for BoxBlur filter with negative radius #6874 [@hugovk]
- Only read when necessary in EpsImagePlugin #6880 [@radarhere]
- Simplify isinstance, key in dict, enumerate #6869 [@hugovk]
- Support arbitrary number of loaded modules on Windows #6761 [@javidcf]
Dependencies
- Install Ghostscript using Chocolatey #7036 [@radarhere]
- Update actions/stale action to v8 #7035 [@renovate]
- Updated libimagequant to 4.1.1 #7000 [@radarhere]
- Updated harfbuzz to 7.1.0 #6983 [@radarhere]
- Updated lcms2 to 2.15 #6981 [@radarhere]
- Updated harfbuzz to 7.0.1 #6959 [@radarhere]
- Updated harfbuzz to 7.0.0 #6946 [@radarhere]
- Updated freetype to 2.13 #6931 [@radarhere]
- Updated libjpeg-turbo to 2.1.5.1 #6929 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #6928 [@pre-commit-ci]
- Updated libjpeg-turbo to 2.1.5 #6923 [@radarhere]
- pre-commit autoupdate #6920 [@radarhere]
- Updated libimagequant to 4.1.0 #6906 [@radarhere]
- Updated libimagequant to 4.0.5 #6901 [@radarhere]
- Updated libwebp to 1.3.0 #6889 [@radarhere]
- Updated raqm to 0.10.0 #6884 [@radarhere]
- Updated xz to 5.4.1 #6883 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #6855 [@pre-commit-ci]
Documentation
- Removed unused sections in release notes #7054 [@radarhere]
- Add missing word #7051 [@Yay295]
- Document handling of modes when converting to or from NumPy #7049 [@radarhere]
- Document how to create universal2 wheels #6912 [@radarhere]
- Docs: Replace dependency sphinx-issues with builtin sphinx.ext.extlinks #7016 [@hugovk]
- Minor improvement made to c_extension_debugging.rst #7017 [@Lucas-C]
- Restored deleted docstring #7027 [@radarhere]
- Removed incorrect docstring #7025 [@Auto-5]
- Fix order of arguments in docstring #7024 [@Auto-5]
- Restore link anchor #6993 [@nulano]
- Removed missing anchor from link #6992 [@radarhere]
- Added release notes for #6961 and #6954 #6990 [@radarhere]
- Replace Python code-blocks with double colons #6958 [@radarhere]
- Highlight code example #6969 [@radarhere]
- Corrected documented WebP quality range #6952 [@jzern]
- image-file-formats.rst: document WebP 'xmp' option #6951 [@jzern]
- Add description for getexif() and Exif #6930 [@greatvovan]
- Specify correct description for mode L #6907 [@Pehat]
- Alex Clark -> Jeffrey A. Clark (Alex) #6895 [@aclark4life]
- Updated macOS tested Pillow versions #6885 [@radarhere]
- Verify the Mastodon docs link #6881 [@hugovk]
- List Raqm build options in installation documentation #6876 [@nulano]
- Refer to Resampling enum #6868 [@radarhere]
- LOAD_TRUNCATED_IMAGES may allow PNG images to open #6856 [@radarhere]
- Announce releases on Mastodon #6861 [@radarhere]
Testing
- Added Amazon Linux 2023 docker image #7029 [@radarhere]
- Remove EOL Debian 10 Buster from CI #7014 [@hugovk]
- Moved tests that require libtiff #6919 [@radarhere]
- Moved conversion test to test_imagecms #6866 [@radarhere]
- Run CIFuzz tests when GitHub Actions file changes #6994 [@radarhere]
- Build docs in own workflow #6991 [@hugovk]
- Log expected & actual color in image access tests #6899 [@Yay295]
- Fix up some pytest style issues #6968 [@akx]
- Enable gcov support for codecov/codecov-action #6944 [@hugovk]
- Test Python 3.12-dev #6943 [@hugovk]
- Replace SVN with Git for installing extra test images #6918 [@hugovk]
- Parametrize test_file_tar::test_sanity() #6898 [@Yay295]
- Only install python-pyqt6 package on 64-bit #6886 [@radarhere]
- Tests: Convert internal check() functions to use parametrize #6870 [@hugovk]
- Clean up tests (simplified) #6865 [@Yay295]
- NotImplementedError will not be raised by grapclipboard if xclip is available on Linux #6859 [@radarhere]
- array tobytes() always exists in Python >= 3.2 #6854 [@radarhere]
9.4.0
https://pillow.readthedocs.io/en/stable/releasenotes/9.4.0.html
Changes
- Updated copyright year #6845 [@radarhere]
- Fixed null pointer dereference crash with malformed font #6846 [@radarhere]
- Return from ImagingFill early if image has a zero dimension #6842 [@radarhere]
- Reversed deprecations for Image constants, except for duplicate Resampling attributes #6830 [@radarhere]
- Improve exception traceback readability #6836 [@hugovk]
- Fix version mismatch #6841 [@smb123w64gb]
- Do not attempt to read IFD1 if absent #6840 [@radarhere]
- Fixed writing int as ASCII tag #6800 [@radarhere]
- If available, use wl-paste or xclip for grabclipboard() on Linux #6783 [@radarhere]
- Added signed option when saving JPEG2000 images #6709 [@radarhere]
- Patch OpenJPEG to include ARM64 fix #6718 [@radarhere]
- Added support for I;16 modes in putdata() #6825 [@radarhere]
- Added conversion from RGBa to RGB #6708 [@radarhere]
- Added DDS support for uncompressed L and LA images #6820 [@radarhere]
- Added LightSource tag values to ExifTags #6749 [@radarhere]
- Updated libtiff shared library name #6826 [@radarhere]
- Fixed PyAccess after changing ICO size #6821 [@radarhere]
- Do not use EXIF from info when saving PNG images #6819 [@radarhere]
- Fixed saving EXIF data to MPO #6817 [@radarhere]
- Added Exif hide_offsets() #6762 [@radarhere]
- Only compare to previous frame when checking for duplicate GIF frames while saving #6787 [@radarhere]
- Always initialize all plugins in registered_extensions() #6811 [@radarhere]
- Initialize unsigned char variables #6818 [@radarhere]
- Updated deprecated NumPy alias #6814 [@radarhere]
- Ignore non-opaque WebP background when saving as GIF #6792 [@radarhere]
- Only set tile in ImageFile setstate #6793 [@radarhere]
- Fixed BytesWarnings #6816 [@radarhere]
- When reading BLP, do not trust JPEG decoder to determine image is CMYK #6767 [@radarhere]
- Updated xz to 5.4.0 #6802 [@radarhere]
- Added IFD enum to ExifTags #6748 [@radarhere]
- Fixed bug combining GIF frame durations #6779 [@radarhere]
- Remove unnecessary Pipfile #6790 [@hugovk]
- Support saving JPEG comments #6774 [@smason]
- Add support for PyPy3.9, drop PyPy3.7 #6782 [@hugovk]
- [pre-commit.ci] pre-commit autoupdate #6780 [@pre-commit-ci]
- Use compile_python_fuzzer #6775 [@radarhere]
- Remove specific number of jobs from comment #6772 [@radarhere]
- Fix WebP dealloc method definitions #6763 [@Yay295]
- Added getxmp() to WebPImagePlugin #6758 [@radarhere]
- Use stdlib for setuptools on Cygwin #6760 [@radarhere]
- Added "exact" option when saving WebP #6747 [@ashafaei]
- Use fractional coordinates when drawing text #6722 [@radarhere]
- Fixed writing int as BYTE tag #6740 [@radarhere]
- Remove Tidelift alignment action and badge #6739 [@aclark4life]
- Updated xz to 5.2.8 #6738 [@radarhere]
- Added MP Format Version when saving MPO #6735 [@radarhere]
- Remove ImagingAccessInit line() method #6736 [@Yay295]
- Update to Python 3.11 in GitHub Actions #6726 [@radarhere]
- Added Interop to ExifTags #6724 [@radarhere]
- CVE-2007-4559 patch when building on Windows #6704 [@nulano]
- [pre-commit.ci] pre-commit autoupdate #6721 [@pre-commit-ci]
- Fix compiler warning: accessing 64 bytes in a region of size 48 #6714 [@wiredfool]
- Use verbose flag for pip install #6713 [@wiredfool]
- Replaced IOError with OSError #6715 [@radarhere]
- Disable __CxxFrameHandler4 when compiling HarfBuzz #6702 [@nulano]
Dependencies
- Updated libtiff to 4.5.0 #6822 [@radarhere]
- Update actions/stale action to v7 #6813 [@renovate]
- Updated harfbuzz to 6.0.0 #6810 [@radarhere]
- Update egor-tensin/cleanup-path action to v3 #6806 [@renovate]
- Update cygwin/cygwin-install-action action to v3 #6776 [@renovate]
- Updated xz to 5.2.9 #6770 [@radarhere]
- Updated libpng to 1.6.39 #6752 [@radarhere]
- Updated lcms2 to 2.14 #6711 [@radarhere]
Documentation
- Updated size parameter descriptions #6851 [@radarhere]
- Added release notes for #6842 and #6846 #6850 [@radarhere]
- Document the meaning of "premultiplied alpha" #6838 [@radarhere]
- Document "transparency" info key #6831 [@radarhere]
- Clarify apply_transparency() docstring #6798 [@radarhere]
- Improved mode range documentation #6795 [@radarhere]
- Added releases notes for #6774 #6784 [@radarhere]
- Use Sphinx Inline Tabs to organise installation per OS #6764 [@hugovk]
- Document how to install Pillow from a directory #6756 [@radarhere]
- Add oss-fuzz badge #6717 [@wiredfool]
- Updated macOS tested Pillow versions #6734 [@radarhere]
Testing
- Removed Python 3.7 on Cygwin #6815 [@radarhere]
- Run Bandit on CI via pre-commit #6805 [@hugovk]
- Add allowlist_externals=make to fix tox 4 #6801 [@hugovk]
- Added Fedora 37 #6742 [@radarhere]
- Revert "Install NumPy with OpenBLAS" #6727 [@radarhere]
- Updated AppVeyor to Python 3.11 #6723 [@radarhere]
- Added file to list of partially supported BMPs #6719 [@radarhere]
- XCB will not be used by default on Linux if gnome-screenshot is present #6712 [@radarhere]
- Removed Fedora 35 #6705 [@radarhere]
- Add xfail mark to TestEmbeddable #6703 [@nulano]
9.3.0
https://pillow.readthedocs.io/en/stable/releasenotes/9.3.0.html
Changes
- Initialize libtiff buffer when saving #6699 [@radarhere]
- Limit SAMPLESPERPIXEL to avoid runtime DOS #6700 [@wiredfool]
- Inline fname2char to fix memory leak #6329 [@nulano]
- Fix memory leaks related to text features #6330 [@nulano]
- Use double quotes for version check on old CPython on Windows #6695 [@hugovk]
- GHA: replace deprecated set-output command with GITHUB_OUTPUT file #6697 [@nulano]
- Remove backup implementation of Round for Windows platforms #6693 [@cgohlke]
- Upload fribidi.dll to GitHub Actions #6532 [@nulano]
- Fixed set_variation_by_name offset #6445 [@radarhere]
- Windows build improvements #6562 [@nulano]
- Fix malloc in _imagingft.c:font_setvaraxes #6690 [@cgohlke]
- Only use ASCII characters in C source file #6691 [@cgohlke]
- Release Python GIL when converting images using matrix operations #6418 [@hmaarrfk]
- Added ExifTags enums #6630 [@radarhere]
- Do not modify previous frame when calculating delta in PNG #6683 [@radarhere]
- Added support for reading BMP images with RLE4 compression #6674 [@npjg]
- Decode JPEG compressed BLP1 data in original mode #6678 [@radarhere]
- pylint warnings #6659 [@marksmayo]
- Added GPS TIFF tag info #6661 [@radarhere]
- Added conversion between RGB/RGBA/RGBX and LAB #6647 [@radarhere]
- Do not attempt normalization if mode is already normal #6644 [@radarhere]
- Fixed seeking to an L frame in a GIF #6576 [@radarhere]
- Consider all frames when selecting mode for PNG save_all #6610 [@radarhere]
- Don't reassign crc on ChunkStream close #6627 [@radarhere]
- Raise a warning if NumPy failed to raise an error during conversion #6594 [@radarhere]
- Only read a maximum of 100 bytes at a time in IMT header #6623 [@radarhere]
- Show all frames in ImageShow #6611 [@radarhere]
- Allow FLI palette chunk to not be first #6626 [@radarhere]
- If first GIF frame has transparency for RGB_ALWAYS loading strategy, use RGBA mode #6592 [@radarhere]
- Round box position to integer when pasting embedded color #6517 [@radarhere]
- Removed EXIF prefix when saving WebP #6582 [@radarhere]
- Pad IM palette to 768 bytes when saving #6579 [@radarhere]
- Added DDS BC6H reading #6449 [@ShadelessFox]
- Added support for opening WhiteIsZero 16-bit integer TIFF images #6642 [@JayWiz]
- Raise an error when allocating translucent color to RGB palette #6654 [@jsbueno]
- Moved mode check outside of loops #6650 [@radarhere]
- Added reading of TIFF child images #6569 [@radarhere]
- Improved ImageOps palette handling #6596 [@PososikTeam]
- Defer parsing of palette into colors #6567 [@radarhere]
- Apply transparency to P images in ImageTk.PhotoImage #6559 [@radarhere]
- Use rounding in ImageOps contain() and pad() #6522 [@bibinhashley]
- Fixed GIF remapping to palette with duplicate entries #6548 [@radarhere]
- Allow remap_palette() to return an image with less than 256 palette entries #6543 [@radarhere]
- Corrected BMP and TGA palette size when saving #6500 [@radarhere]
- Move some static config to setup.cfg #6570 [@hugovk]
- Do not call load() before draft() in Image.thumbnail #6539 [@radarhere]
- Use constants in TiffImagePlugin #6552 [@radarhere]
- Copy palette when converting from P to PA #6497 [@radarhere]
- Allow RGB and RGBA values for PA image putpixel #6504 [@radarhere]
- Removed support for tkinter in PyPy before Python 3.6 #6551 [@nulano]
- Do not use CCITTFaxDecode filter if libtiff is not available #6518 [@radarhere]
- Fallback to not using mmap if buffer is not large enough #6510 [@radarhere]
- Fixed writing bytes as ASCII tag #6493 [@radarhere]
- Open 1 bit EPS in mode 1 #6499 [@radarhere]
- Removed support for tkinter before Python 1.5.2 #6549 [@radarhere]
- Fixed typo #6542 [@radarhere]
- NumPy now supports Python 3.11 #6538 [@radarhere]
- Build lcms2 VC2022 #6529 [@radarhere]
- Added direct conversion from PA to P #6509 [@radarhere]
- Allow default ImageDraw font to be set #6484 [@radarhere]
- Save 1 mode PDF using CCITTFaxDecode filter #6470 [@radarhere]
- Added support for RGBA PSD images #6481 [@radarhere]
- Parse orientation from XMP tag contents #6463 [@bigcat88]
- Added support for reading ATI1/ATI2 (BC4/BC5) DDS images #6457 [@REDxEYE]
- Do not clear GIF tile when checking number of frames #6455 [@radarhere]
- Support saving multiple MPO frames #6444 [@radarhere]
- Moved tile encoding into separate function #6456 [@radarhere]
- Do not double quote Pillow version for setuptools >= 60 #6450 [@radarhere]
- 3.11: Add Trove classifier and to tox.ini and update setup.py version check #6441 [@hugovk]
- Added ABGR BMP mask mode #6436 [@radarhere]
- Fixed PSDraw rectangle #6429 [@radarhere]
- Raise ValueError if PNG sRGB chunk is truncated #6431 [@radarhere]
- Handle missing Python executable in ImageShow on macOS #6416 [@bryant1410]
Dependencies
- Updated harfbuzz to 5.3.1 #6669 [@radarhere]
- Updated zlib to 1.2.13 #6664 [@radarhere]
- Updated harfbuzz to 5.3.0 #6651 [@radarhere]
- Update github-actions #6616 [@renovate]
- Updated Ghostscript to 10.0.0 #6609 [@radarhere]
- Fix Renovate config #6599 [@hugovk]
- Configure Renovate #6564 [@renovate]
- Updated harfbuzz to 5.2.0 #6591 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #6560 [@pre-commit-ci]
- Updated libimagequant to 4.0.4 #6535 [@radarhere]
- Updated libimagequant to 4.0.2 #6523 [@radarhere]
- Updated libwebp to 1.2.4 #6483 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #6472 [@pre-commit-ci]
- Updated harfbuzz to 5.1.0 #6466 [@radarhere]
- Updated libimagequant to 4.0.1 #6451 [@radarhere]
- Updated libwebp to 1.2.3 #6442 [@radarhere]
Documentation
- Update release notes for 9.3.0 #6696 [@hugovk]
- Document ImageDraw attributes #6533 [@nulano]
- Added release notes for #6630 #6685 [@radarhere]
- Document when BLP1 JPEG data started being loaded incorrectly #6682 [@radarhere]
- Added release notes for #6678 #6680 [@radarhere]
- Added release notes for #6449 and #6611 #6668 [@radarhere]
- Image channel is used when converting PA with an RGBA palette #6662 [@radarhere]
- High bit depth multichannel images are not yet supported #6638 [@radarhere]
- Improved layout_engine documentation #6633 [@radarhere]
- Improved documentation of ImageDraw return values #6556 [@radarhere]
- Added headings before listing options #6632 [@radarhere]
- Improve documentation for ImageDraw.rectangle and rounded_rectangle #6625 [@d0sboots]
- Ensure dependencies are installed when building docs #6612 [@radarhere]
- Fixed broken URLs #6617 [@radarhere]
- Updated redirected URLs #6613 [@radarhere]
- Add OpenSSF Best Practices badge #6597 [@hugovk]
- Corrected dictionary name #6593 [@radarhere]
- Simplified enum references #6557 [@radarhere]
- Documented TGA save keyword arguments #6546 [@radarhere]
- Updated tested Windows environment list #6550 [@radarhere]
- DOC: fix image-file-formats.rst #6513 [@cgohlke]
- Ubuntu dependencies also apply to Jammy #6511 [@radarhere]
- Orientation data is removed by exif_transpose() #6476 [@radarhere]
- Note to Windows users that FreeType will keep the font file open #6485 [@radarhere]
- Switch to GitHub Actions artifacts for Windows wheels #6458 [@radarhere]
- Added release notes for #6457 #6465 [@radarhere]
- Docs: Replace version tables with RST csv-table and add 3.11 #6433 [@hugovk]
- Fix simple typo #6443 [@timgates42]
- Docs: Allow setting Python interpreter via command line #6440 [@hugovk]
- Updated links #6427 [@radarhere]
- Updated macOS tested Pillow versions #6425 [@radarhere]
- Document where to find other codecs #6415 [@radarhere]
Testing
- GitHub Actions: Test Python 3.11.0 final #6686 [@hugovk]
- Consistently write in binary format in PPM tests #6677 [@radarhere]
- Removed print statement from tests #6660 [@radarhere]
- Parametrized tests #6634 [@radarhere]
- Do not import PIL.Image #6635 [@radarhere]
- Add "concurrency" to GitHub Actions #6621 [@Yay295]
- Updated codecov action to v3 #6281 [@radarhere]
- Use fixtures instead of classes in test_imagefont #6534 [@nulano]
- Parametrize more tests #6531 [@Yay295]
- [pre-commit.ci] pre-commit autoupdate #6560 [@pre-commit-ci]
- Updated tested Windows environment list #6550 [@radarhere]
- Set top-level permissions for remaining GitHub Actions #6541 [@radarhere]
- Parametrized tests #6526 [@radarhere]
- Parametrize Tests/test_image_paste.py #6519 [@Yay295]
- Temporarily skip valgrind failure #6524 [@radarhere]
- Do not install test-image-results on GitHub Actions #6501 [@radarhere]
- Updated libjpeg-turbo to 2.1.4 #6498 [@radarhere]
- Increased test tolerance to allow for libtiff with libjpeg-turbo #6477 [@radarhere]
- Updated Valgrind job to Jammy #6473 [@radarhere]
- [pre-commit.ci] pre-commit autoupdate #6472 [@pre-commit-ci]
- Install libxcb-shape0 #6438 [@radarhere]
- Set permissions for GitHub actions #6413 [@neilnaveen]