Releases: python-pillow/Pillow
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]
9.2.0
https://pillow.readthedocs.io/en/stable/releasenotes/9.2.0.html
Deprecations
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]
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
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.
9.1.0
https://pillow.readthedocs.io/en/stable/releasenotes/9.1.0.html
Changes
- Add support for multiple component transformation to JPEG2000 #5500 [@scaramallion]
- Fix loading FriBiDi on Alpine #6165 [@nulano]
- Added setting for converting GIF P frames to RGB #6150 [@radarhere]
- Allow 1 mode images to be inverted #6034 [@radarhere]
- Raise ValueError when trying to save empty JPEG #6159 [@radarhere]
- Always save TIFF with contiguous planar configuration #5973 [@radarhere]
- Connected discontiguous polygon corners #5980 [@radarhere]
- Corrected memory allocation #5958 [@radarhere]
- Ensure Tkinter hook is activated for getimage() #6032 [@radarhere]
- Fixed comparison warnings #5970 [@radarhere]
- Use screencapture arguments to crop on macOS #6152 [@radarhere]
- Do not mark L mode JPEG as 1 bit in PDF #6151 [@radarhere]
- Fixed saving L mode GIF with background as WebP #6147 [@radarhere]
- Do not expand GIF during n_frames #6148 [@radarhere]
- Added support for reading I;16R TIFF images #6132 [@radarhere]
- If an error occurs after creating a file, remove the file #6134 [@radarhere]
- decode() should return -1 when finished #6130 [@radarhere]
- Fixed calling DisplayViewer or XVViewer without a title #6136 [@radarhere]
- Retain RGBA transparency when saving multiple GIF frames #6128 [@radarhere]
- Save additional ICO frames with other bit depths if supplied #6122 [@radarhere]
- Handle EXIF data truncated to just the header #6124 [@radarhere]
- Added support for reading BMP images with RLE8 compression #6102 [@radarhere]
- Support Python distributions where _tkinter is compiled in #6006 [@lukegb]
- Added WebP default duration of zero when saving #6140 [@radarhere]
- Added support for PPM arbitrary maxval #6119 [@radarhere]
- Removed unused variable #6137 [@radarhere]
- libwebp 1.2.2 fixed endian bugs #5984 [@radarhere]
- Added BigTIFF reading #6097 [@radarhere]
- GIF seek performance improvements #6077 [@radarhere]
- Removed load_prepare nearly identical to ImageFile load_prepare #6116 [@radarhere]
- When converting, clip I;16 to be unsigned, not signed #6112 [@radarhere]
- Check if self.im is not None #6108 [@radarhere]
- Fixed loading L mode GIF with transparency #6086 [@radarhere]
- Ensure cleanup() is called for PyEncoders #6096 [@radarhere]
- Various _accept changes #6092 [@radarhere]
- Improved handling of PPM header #5121 [@Piolie]
- Reset size when seeking away from "Large Thumbnail" MPO frame #6101 [@radarhere]
- Replace requirements.txt with extras #6072 [@hugovk]
- Added PyEncoder and support BLP saving #6069 [@radarhere]
- Handle TGA images with packets that cross scan lines #6087 [@radarhere]
- Added FITS reading #6056 [@radarhere]
- Added rawmode argument to Image.getpalette() #6061 [@radarhere]
- Fixed BUFR, GRIB and HDF5 stub saving #6071 [@radarhere]
- Changed quantize default dither to FLOYDSTEINBERG #6068 [@radarhere]
- Do not automatically remove temporary ImageShow files on Unix #6045 [@radarhere]
- Correctly read JPEG compressed BLP images #4685 [@Meithal]
- Merged _MODE_CONV typ into ImageMode as typestr #6057 [@radarhere]
- Consider palette size when converting and in getpalette() #6060 [@radarhere]
- Added enums #5954 [@radarhere]
- Ensure image is opaque after converting P to PA with RGB palette #6052 [@radarhere]
- Replaced absolute PIL import with relative import #6058 [@radarhere]
- Attach RGBA palettes from putpalette() when suitable #6054 [@radarhere]
- Simplified code #6053 [@radarhere]
- Clarify code and comments #6042 [@radarhere]
- Added get_photoshop_blocks() to parse Photoshop TIFF tag #6030 [@radarhere]
- Drop excess values in BITSPERSAMPLE #6041 [@mikhail-iurkov]
- Issue warning if Raqm layout is requested, but Raqm is not available #6035 [@nulano]
- Added unpacker from RGBA;15 to RGB #6031 [@radarhere]
Dependencies
- Updated freetype to 2.12 #6169 [@radarhere]
- Updated harfbuzz to 4.2.0 #6164 [@radarhere]
- Updated zlib to 1.2.12 #6160 [@radarhere]
- Updated harfbuzz to 4.1.0 #6153 [@radarhere]
- Updated harfbuzz to 4.0.1 #6125 [@radarhere]
- Updated harfbuzz to 4.0.0 #6104 [@radarhere]
- Updated harfbuzz to 3.4.0 #6048 [@radarhere]
- Updated lcms2 to 2.13.1 #6017 [@radarhere]
- Updated harfbuzz to 3.3.2 #6029 [@radarhere]
- Updated libimagequant to 4.0.0 #6014 [@radarhere]
Documentation
- Add musllinux wheels to 9.1.0 release notes #6168 [@hugovk]
- Document "keep" for JPEG save quality option #6135 [@carandraug]
- Document support for RLE8 reading in BMP #6155 [@radarhere]
- Removed period before colon #6143 [@radarhere]
- Added merging images example #6129 [@radarhere]
- decode() should return -1 when finished #6117 [@radarhere]
- Improved codec documentation #6094 [@radarhere]
- Document alternatives to accessing individual pixels #6099 [@radarhere]
- Document that histogram() uses 256 bins per channel #6106 [@radarhere]
- Added release notes for #6069 #6095 [@radarhere]
- Improved ImageShow documentation #6078 [@radarhere]
- Corrected docstring #6081 [@radarhere]
- Corrected JPEG subsampling documentation #6067 [@radarhere]
- Use --no-binary when installing from source #6066 [@radarhere]
- macOS: 'brew install openjpeg' for JPEG2000 support #6065 [@hugovk]
- Updated comment #6063 [@radarhere]
- Updated macOS tested Pillow versions #6038 [@radarhere]
- Fix return in docs #6040 [@hugovk]
- Corrected sentence #6016 [@radarhere]
Testing
- Added pytest-timeout to AppVeyor #6157 [@radarhere]
- Do not always require ctypes in tests #6141 [@radarhere]
- Updated setup-python, checkout and upload-artifact actions to v3 #6111 [@radarhere]
- pre-commit autoupdate --freeze #6109 [@radarhere]
- Updated Python for doccheck to 3.10 #6098 [@radarhere]
- Updated libjpeg-turbo to 2.1.3 #6091 [@radarhere]
- Enable heap verification without gflags #6089 [@radarhere]
- Test that n_frames and is_animated do not change GIF #6080 [@radarhere]
- Added Gentoo to Docker jobs #6088 [@radarhere]
- Removed duplicate test #6082 [@radarhere]
- Updated checks that no warnings were raised #6076 [@radarhere]
- Updated comment #6063 [@radarhere]
- Replaced test image to avoid copyrighted color space #6062 [@radarhere]
- Only skip test if libimagequant is earlier than 4 on ppc64le #6050 [@radarhere]
- Added CentOS Stream 9 #6036 [@radarhere]
- Upgraded AppVeyor Python 3.10 image to Visual Studio 2022 #6026 [@radarhere]
9.0.1
https://pillow.readthedocs.io/en/stable/releasenotes/9.0.1.html
Changes
- In show_file, use os.remove to remove temporary images. CVE-2022-24303 #6010 [@radarhere, @hugovk]
- Restrict builtins within lambdas for ImageMath.eval. CVE-2022-22817 #6009 [radarhere]
9.0.0
https://pillow.readthedocs.io/en/stable/releasenotes/9.0.0.html
Removals
- Drop support for soon-EOL Python 3.6 #5768 [@hugovk]
- Remove support for FreeType 2.7 and older #5777 [@hugovk]
- Removed deprecated PILLOW_VERSION, Image.show command parameter, Image._showxv and ImageFile.raise_ioerror #5776 [@radarhere]
Changes
- Restrict builtins for ImageMath.eval() #5923 [@radarhere]
- Ensure JpegImagePlugin stops at the end of a truncated file #5921 [@radarhere]
- Fixed ImagePath.Path array handling #5920 [@radarhere]
- Remove consecutive duplicate tiles that only differ by their offset #5919 [@radarhere]
- Removed redundant part of condition #5915 [@radarhere]
- Explicitly enable strip chopping for large uncompressed TIFFs #5517 [@kmilos]
- Use the Windows method to get TCL functions on Cygwin #5807 [@DWesl]
- Changed error type to allow for incremental WebP parsing #5404 [@radarhere]
- Improved I;16 operations on big endian #5901 [@radarhere]
- Ensure that BMP pixel data offset does not ignore palette #5899 [@radarhere]
- Limit quantized palette to number of colors #5879 [@radarhere]
- Use latin1 encoding to decode bytes #5870 [@radarhere]
- Fixed palette index for zeroed color in FASTOCTREE quantize #5869 [@radarhere]
- When saving RGBA to GIF, make use of first transparent palette entry #5859 [@radarhere]
- Pass SAMPLEFORMAT to libtiff #5848 [@radarhere]
- Added rounding when converting P and PA #5824 [@radarhere]
- Improved putdata() documentation and data handling #5910 [@radarhere]
- Exclude carriage return in PDF regex to help prevent ReDoS #5912 [@radarhere]
- Image.NONE is only used for resampling and dithers #5908 [@radarhere]
- Fixed freeing pointer in ImageDraw.Outline.transform #5909 [@radarhere]
- Add Tidelift alignment action and badge #5763 [@aclark4life]
- Replaced further direct invocations of setup.py #5906 [@radarhere]
- Added ImageShow support for xdg-open #5897 [@m-shinder]
- Fixed typo #5902 [@radarhere]
- Switched from deprecated "setup.py install" to "pip install ." #5896 [@radarhere]
- Support 16-bit grayscale ImageQt conversion #5856 [@cmbruns]
- Fixed raising OSError in _safe_read when size is greater than SAFEBLOCK #5872 [@radarhere]
- Convert subsequent GIF frames to RGB or RGBA #5857 [@radarhere]
- WebP: Fix memory leak during decoding on failure #5798 [@ilai-deutel]
- Do not prematurely return in ImageFile when saving to stdout #5665 [@infmagic2047]
- Added support for top right and bottom right TGA orientations #5829 [@radarhere]
- Corrected ICNS file length in header #5845 [@radarhere]
- Block tile TIFF tags when saving #5839 [@radarhere]
- Added line width argument to ImageDraw polygon #5694 [@radarhere]
- Do not redeclare class each time when converting to NumPy #5844 [@radarhere]
- Only prevent repeated polygon pixels when drawing with transparency #5835 [@radarhere]
- Fix pushes_fd method signature #5833 [@hoodmane]
- Add support for pickling TrueType fonts #5826 [@hugovk]
- Only prefer command line tools SDK on macOS over default MacOSX SDK #5828 [@radarhere]
- Fix compilation on 64-bit Termux #5793 [@landfillbaby]
- Replace 'setup.py sdist' with '-m build --sdist' #5785 [@hugovk]
- Use declarative package configuration #5784 [@hugovk]
- Use title for display in ImageShow #5788 [@radarhere]
- Fix for PyQt6 #5775 [@hugovk]
- Rename master to main #5770 [@hugovk]
Dependencies
- Updated winbuild libimagequant to 2.17.0 #5916 [@radarhere]
- Updated harfbuzz to 3.2.0 #5883 [@radarhere]
- Updated libimagequant to 2.17.0 #5876 [@radarhere]
- Updated freetype to 2.11.1 #5867 [@radarhere]
- Updated harfbuzz to 3.1.2 #5853 [@radarhere]
- Updated harfbuzz to 3.1.1 #5820 [@radarhere]
- Updated harfbuzz to 3.1.0 #5808 [@radarhere]
Documentation
- CVEs TBD #5924 [@radarhere]
- Added release notes for #5919, #5920 and #5921 #5922 [@radarhere]
- Updated copyright year #5918 [@radarhere]
- Added release notes for pillow-wheels#237 #5917 [@radarhere]
- Added release notes for #5897 #5905 [@radarhere]
- Added PIL + pathlib Tutorial #5862 [@kolibril13]
- Dedicate the next release to Fredrik Lundh #5885 [@hugovk]
- Added release notes for #5857 #5874 [@radarhere]
- Improved example code #5866 [@radarhere]
- Improved explanation of fromarray "mode" parameter #5849 [@radarhere]
- Documentation for #5829 and #5694 #5847 [@radarhere]
- Updated macOS tested Pillow versions #5822 [@radarhere]
- Docs: Remove docutils pin #5821 [@hugovk]
- Changed URLs to https #5796 [@radarhere]
- Added release notes for #5788 #5792 [@radarhere]
- Update expected Pillow 10 release date: 2023-07-01 #5779 [@hugovk]
- Document #5788: "Use title for display" #5790 [@nulano]
- Improved image lifecycle documentation #5773 [@radarhere]
- Docs: No security updates in 8.4.0 #5767 [@hugovk]
Testing
- Added sys import #5913 [@radarhere]
- Do not compare properties to themselves #5907 [@radarhere]
- GHA: Still use macos-latest for non-PyPy builds #5888 [@radarhere]
- GHA: Use macos-10.15 to fix build #5886 [@hugovk]
- GHA: Add workflow_dispatch to enable manually triggering builds #5861 [@hugovk]
- Added context managers #5851 [@radarhere]
- Updated libjpeg-turbo to 2.1.2 #5841 [@radarhere]
- GHA: Use actions/setup-python's pip cache #5840 [@hugovk]
- Removed setuptools install from AppVeyor #5823 [@radarhere]
- Added Fedora 35 #5806 [@radarhere]
- Test Python 3.10.0 final on AppVeyor #5805 [@hugovk]
- Test PyPy3.8 #5778 [@hugovk]
- CI: Install pytest-timeout for MinGW CI #5780 [@hugovk]
- Removed Fedora 33 docker job #5766 [@radarhere]
8.4.0
https://pillow.readthedocs.io/en/stable/releasenotes/8.4.0.html
Changes
- Don't use bitmap glyphs when drawing text with stroker #5761 [@nulano]
- Make TIFF strip size configurable #5744 [@kmilos]
- Fixed Python errors when saving a (0, 0) TIFF image #5750 [@radarhere]
- Prefer global transparency in GIF when replacing with background color #5756 [@radarhere]
- Update winbuild libimagequant to 2.16.0 #5727 [@nulano]
- Accept methods cleanup #5724 [@radarhere]
- Remove raqm.cmake #5722 [@nulano]
- Moved _info function into docstring #5710 [@radarhere]
- Added "exif" keyword argument to TIFF saving #5575 [@radarhere]
- Copy Python palette to new image in quantize() #5696 [@radarhere]
- Read ICO AND mask from end #5667 [@radarhere]
- Actually check the framesize in FliDecode.c #5659 [@wiredfool]
Dependencies
- Upgrade Raqm to 0.7.2 #5736 [@nulano]
- Updated Ghostscript to 9.55.0 #5735 [@radarhere]
- Updated fribidi to 1.0.11 #5732 [@radarhere]
- Updated libimagequant to 2.16.0 #5726 [@radarhere]
- Updated harfbuzz to 3.0.0 #5720 [@radarhere]
- Updated harfbuzz to 2.9.1 #5705 [@radarhere]
Documentation
- Updated capitalization #5746 [@radarhere]
- Updated macOS tested Pillow versions #5737 [@radarhere]
- Updated macOS tested Pillow versions #5719 [@radarhere]
- Docs: Update CI targets table #5713 [@hugovk]
- Updated docstring #5708 [@radarhere]
- Docs: Temporarily pin docutils to fix bullets in sphinx_rtd_theme #5704 [@hugovk]
Testing
- Delete tidelift.yml #5765 [@hugovk]
- Test Python 3.10.0 final on GitHub Actions #5748 [@hugovk]
- [pre-commit.ci] pre-commit autoupdate #5747 [@pre-commit-ci]
- Add CentOS Stream 8 #5714 [@hugovk]
- Improve the fuzzer wrt. the current atheris version #5688 [@Google-Autofuzz]
- CI: Split MINGW to own workflow, remove redundant job #5709 [@hugovk]
- Install numpy on Python 3.10 #5702 [@radarhere]