Pillow Versions Save

Python Imaging Library (Fork)

10.3.0

1 month ago

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

Changes

  • CVE-2024-28219: Use strncpy to avoid buffer overflow #7928 [@hugovk]
  • Use functools.lru_cache for hopper() #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]

Deprecations

  • Deprecate eval(), replacing it with lambda_eval() and unsafe_eval() #7927 [@hugovk]
  • Deprecate ImageCms constants and versions() function #7702 [@nulano]

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 and Typing :: 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]

  • Install mypy from requirements file #7813 [@hugovk]

  • Pin codecov/codecov-action to v3.1.5 #7776 [@hugovk]

  • Update actions/cache action to v4 #7735 [@renovate]

  • Update dependency cibuildwheel to v2.16.4 #7758 [@renovate]

  • Update dependency cibuildwheel to v2.16.5 #7767 [@renovate]

  • Update dependency cibuildwheel to v2.17.0 #7869 [@renovate]

  • Update dependency mypy to v1.8.0 #7851 [@renovate]

  • Update dependency mypy to v1.9.0 #7866 [@renovate]

  • Update github-actions to v4 #7770 [@renovate]

  • 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]

  • Skip AppVeyor builds for irrelevant files #7909 [@hugovk]

  • Revert "Pin Python 3.13 on Windows to a3" #7878 [@radarhere]

  • Restored testing of non-TrueType default font #7748 [@radarhere]

  • Parametrize test_seek_mode functions #7847 [@Yay295]

  • Do not use packaged MinGW pip #7844 [@radarhere]

  • Parametrize test_p_from_rgb_rgba() #7835 [@Yay295]

  • Require coverage.py 7.4.2+ for COVERAGE_CORE: sysmon #7825 [@hugovk]

  • Set COVERAGE_CORE: sysmon for faster tests on 3.12+ #7820 [@hugovk]

  • Build docs for Python changes #7819 [@nulano]

  • Install mypy from requirements file #7813 [@hugovk]

  • Pin Python 3.13 on Windows to a3 #7805 [@radarhere]

  • Removed platform argument from setup-cygwin action #7775 [@radarhere]

  • Pin to Python 3.9.16-1 #7762 [@radarhere]

  • Test on macOS M1 where available #7766 [@hugovk]

  • CI: Cache libimagequant on Linux builds #7741 [@hugovk]

  • Do not support using test-image-results to upload images after test failures #7739 [@radarhere]

  • Sort imports in Tests/ #7736 [@hugovk]

  • Skip non-wheel CI runs for tags: Windows #7692 [@hugovk]

10.2.0

4 months ago

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

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 using functools.lru_cache #7657 [@hugovk]
  • Restricted environment keys for ImageMath.eval() #7655 [@radarhere]
  • Optimise ImageMode.getmode using functools.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]
  • Translate encoder error codes to strings; deprecate ImageFile.raise_oserror() #7609 [@bgilbert]
  • 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 to pyproject.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]

Deprecations

  • Deprecate IptcImagePlugin helpers #7664 [@nulano]

Documentation

  • Fix image URL in "Reading from URL" example #7674 [@nulano]
  • Release notes: add ImageColor and ImageMode 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 with pytest.fail() #7546 [@hugovk]
  • Test Fedora 39 #7542 [@hugovk]
  • Black and Ruff infer target-version from requires-python in pyproject.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

6 months ago

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

7 months ago

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

10 months ago

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

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]

Deprecations

  • Do not use CFFI access by default on PyPy #7236 [@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]

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]

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

1 year ago

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

Changes

  • Refactor EpsImagePlugin and deprecate PSFile #6879 [@Yay295]
  • 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]
  • Handling for deprecations to be removed in Pillow 11 #6905 [@hugovk]
  • 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

1 year ago

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

1 year ago

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]

9.2.0

1 year ago

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

Changes

  • Fixed null check for fribidi_version_info in FriBiDi shim #6376 [@nulano]
  • Added GIF decompression bomb check #6402 [@radarhere]
  • Handle PCF fonts files with less than 256 characters #6386 [@dawidcrivelli]
  • Improved GIF optimize condition #6378 [@raygard]
  • Reverted to array_interface with the release of NumPy 1.23 #6394 [@radarhere]
  • Pad PCX palette to 768 bytes when saving #6391 [@radarhere]
  • Fixed bug with rounding pixels to palette colors #6377 [@btrekkie]
  • Use gnome-screenshot on Linux if available #6361 [@radarhere]
  • Fixed loading L mode BMP RLE8 images #6384 [@radarhere]
  • Fixed incorrect operator in ImageCms error #6370 [@LostBenjamin]
  • Limit FPX tile size to avoid extending outside image #6368 [@radarhere]
  • Added support for decoding plain PPM formats #5242 [@Piolie]
  • Added apply_transparency() #6352 [@radarhere]
  • Fixed behaviour change from endian fix #6197 [@radarhere]
  • Use python3 #6222 [@radarhere]
  • Allow remapping P images with RGBA palettes #6350 [@radarhere]
  • Revert "Skip test_realloc_overflow unless libtiff 4.0.4 or higher" #6354 [@radarhere]
  • [pre-commit.ci] pre-commit autoupdate #6353 [@pre-commit-ci]
  • Only import ImageFont in ImageDraw when necessary #6341 [@radarhere]
  • Fixed drawing translucent 1px high polygons #6278 [@radarhere]
  • Pad COLORMAP to 768 items when saving TIFF #6232 [@radarhere]
  • Fix P -> PA conversion #6337 [@RedShy]
  • Once exif data is parsed, do not reload unless it changes #6335 [@radarhere]
  • Only try to connect discontiguous corners at the end of edges #6303 [@radarhere]
  • Improve transparency handling when saving GIF images #6176 [@radarhere]
  • Do not update GIF frame position until local image is found #6219 [@radarhere]
  • Netscape GIF extension belongs after the global color table #6211 [@radarhere]
  • Only write GIF comments at the beginning of the file #6300 [@raygard]
  • Separate multiple GIF comment blocks with newlines #6294 [@raygard]
  • Always use GIF89a for comments #6292 [@raygard]
  • Ignore compression value from BMP info dictionary when saving as TIFF #6231 [@radarhere]
  • If font is file-like object, do not re-read from object to get variant #6234 [@radarhere]
  • Raise ValueError when trying to access internal fp after close #6213 [@radarhere]
  • Support more affine expression forms in im.point() #6254 [@benrg]
  • Include 'twine check' in 'make sdist' #6305 [@hugovk]
  • Ensure that furthest v is set in quantize2 #6256 [@radarhere]

Dependencies

  • Updated harfbuzz to 4.4.1 #6401 [@radarhere]
  • Updated harfbuzz to 4.4.0 #6397 [@radarhere]
  • Use SourceForge auto mirror capability #6345 [@raygard]
  • Updated libtiff to 4.4.0 #6339 [@radarhere]
  • Updated harfbuzz to 4.3.0 #6315 [@radarhere]

Deprecations

  • Deprecate ImageFont.getsize and related functions #6381 [@nulano]

Documentation

  • Install furo if it is not available #6408 [@radarhere]
  • Added release notes for #6402 #6403 [@radarhere]
  • Docs: remove redundant search page from table of contents #6399 [@hugovk]
  • Added pytest-timeout to test dependencies #6301 [@radarhere]
  • Fix Sphinx 5 warning by setting docs language #6347 [@hugovk]
  • Include #6178 in release notes #6346 [@radarhere]
  • Updated macOS tested Pillow versions #6316 [@radarhere]
  • Add Sphinx Lint to pre-commit and fix RST bug #6340 [@hugovk]
  • Added EMF and SUN to list of supported file formats #6338 [@radarhere]
  • Once a GIF comment is loaded, it is kept for subsequent frames #6325 [@radarhere]
  • Link to GitHub discussions in CONTRIBUTING #6333 [@radarhere]
  • Improved image file formats documentation #6313 [@radarhere]

Testing

  • Add Sphinx Lint to pre-commit and fix RST bug #6340 [@hugovk]
  • pre-commit autoupdate #6223 [@radarhere]
  • Upgrade non-amd64 Ubuntu jobs to Jammy #6306 [@radarhere]

9.1.1

1 year ago

This release addresses several security problems.

CVE-2022-30595: When reading a TGA file with RLE packets that cross scan lines, Pillow reads the information past the end of the first line without deducting that from the length of the remaining file data. This vulnerability was introduced in Pillow 9.1.0, and can cause a heap buffer overflow.

Opening an image with a zero or negative height has been found to bypass a decompression bomb check. This will now raise a SyntaxError instead, in turn raising a PIL.UnidentifiedImageError.