Releases: python-pillow/Pillow
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]
8.3.2
https://pillow.readthedocs.io/en/stable/releasenotes/8.3.2.html
Security
-
CVE-2021-23437 Raise ValueError if color specifier is too long
[hugovk, radarhere] -
Fix 6-byte OOB read in FliDecode
[wiredfool]
Python 3.10 wheels
Fixed regressions
8.3.1
https://pillow.readthedocs.io/en/stable/releasenotes/8.3.1.html
Changes
- Catch OSError when checking if fp is sys.stdout #5585 [@radarhere]
- Handle removing orientation from alternate types of EXIF data #5584 [@radarhere]
- Make Image.array take optional dtype argument #5572 [@t-vi]
8.3.0
https://pillow.readthedocs.io/en/stable/releasenotes/8.3.0.html
Changes
- Use snprintf instead of sprintf #5567 [@radarhere]
- Limit TIFF strip size when saving with LibTIFF #5514 [@kmilos]
- Allow ICNS save on all operating systems #4526 [@newpanjing]
- De-zigzag JPEG's DQT when loading; deprecate convert_dict_qtables #4989 [@gofr]
- Do not use background or transparency index for new color #5564 [@radarhere]
- Simplified code #5315 [@radarhere]
- Replaced xml.etree.ElementTree #5565 [@radarhere]
- Corrected border position for P mode in ImageOps.expand() #5562 [@radarhere]
- Moved CVE image to pillow-depends #5561 [@radarhere]
- Added tag data for IFD groups #5554 [@radarhere]
- Improved ImagePalette #5552 [@radarhere]
- Add DDS saving #5402 [@radarhere]
- Improved getxmp() #5455 [@radarhere]
- Convert to float for comparison with float in IFDRational eq #5412 [@radarhere]
- Allow getexif() to access TIFF tag_v2 data #5416 [@radarhere]
- Read FITS image mode and size #5405 [@radarhere]
- Merge parallel horizontal edges in ImagingDrawPolygon #5347 [@radarhere]
- Use transparency behind first GIF frame and when disposing to background #5557 [@radarhere]
- Fixed undefined variable in logging #5556 [@radarhere]
- Avoid unstable nature of qsort in Quant.c #5367 [@radarhere]
- Copy palette to new images in ImageOps expand #5551 [@radarhere]
- Ensure palette string matches RGB mode #5549 [@radarhere]
- Do not modify EXIF of original image instance in exif_transpose() #5547 [@radarhere]
- Fixed default numresolution for small JPEG2000 images #5540 [@radarhere]
- Fixed format warning #5535 [@radarhere]
- Updated declaration to match definition #5534 [@radarhere]
- Added DDS BC5 reading #5501 [@radarhere]
- Raise an error if ImageDraw.textbbox is used without a TrueType font #5510 [@radarhere]
- Added ICO saving in BMP format #5513 [@radarhere]
- Ensure PNG seeks to end of previous chunk at start of load_end #5493 [@radarhere]
- Do not allow TIFF to seek to a past frame #5473 [@radarhere]
- Avoid race condition when displaying images with eog #5507 [@mconst]
- Added specific error messages when ink has incorrect number of bands #5504 [@radarhere]
- Allow converting an image to a numpy array to raise errors #5379 [@radarhere]
- Use METH_NOARGS when no arguments are required #5488 [@radarhere]
- Fixed typo #5505 [@radarhere]
- Added CFAPattern, ExifVersion and FlashpixVersion UNDEFINED tags #5495 [@radarhere]
- Removed DPI rounding from BMP, JPEG and PNG loading #5476 [@radarhere]
- Removed WMF DPI rounding #5470 [@radarhere]
- Remove spikes when drawing thin pieslices #5460 [@xtsm]
- Updated default value for SAMPLESPERPIXEL TIFF tag #5452 [@radarhere]
- HTTP link is not valid (wrong redirect) #5481 [@homm]
- Removed TIFF DPI rounding #5446 [@radarhere]
- Include code in WebP error #5471 [@radarhere]
- Replaced uint16 and uint32 with uint16_t and uint32_t to resolve TIFF deprecations #5458 [@radarhere]
- Do not alter pixels outside mask when drawing text on an image with transparency #5434 [@radarhere]
- Reset handle when seeking backwards in TIFF #5443 [@radarhere]
- Fix build with libraqm < 0.7.0 #5462 [@adrian-the-git]
- Replace sys.stdout with sys.stdout.buffer when saving #5437 [@radarhere]
- Fixed UNDEFINED TIFF tag of length 0 being changed in roundtrip #5426 [@radarhere]
- Fixed bug when checking FreeType2 version if it is not installed #5445 [@radarhere]
- Do not round dimensions when saving PDF #5459 [@radarhere]
- Added ImageOps contain() #5417 [@radarhere]
- Clarified error message #5457 [@radarhere]
- Changed WebP default "method" value to 4 #5450 [@radarhere]
- Switched to saving 1-bit PDFs with DCTDecode #5430 [@radarhere]
- Use bpp from ICO header #5429 [@radarhere]
- Corrected JPEG APP14 transform value #5408 [@radarhere]
- Changed TIFF tag 33723 length to 1 #5425 [@radarhere]
- Changed ImageMorph incorrect mode errors to ValueError #5414 [@radarhere]
- Add EXIF tags specified in EXIF 2.32 #5419 [@gladiusglad]
- Treat previous contents of first GIF frame as transparent #5391 [@radarhere]
- Changed quantize and quantize2 to static #5374 [@radarhere]
- For special image modes, revert default resize resampling to NEAREST #5411 [@radarhere]
- Changed mode for TGA 16-bit palette to BGR;15 #5400 [@radarhere]
- TGA color map entry size is only 1 byte #5396 [@radarhere]
- JPEG2000: Support decoding subsampled RGB and YCbCr images #4996 [@nulano]
- Stop decoding BC1 punchthrough alpha in BC2&3 #4144 [@jansol]
- Added TransferFunction and ReferenceBlackWhite to core TIFF tags #5384 [@radarhere]
- Use zero if GIF background color index is missing #5390 [@radarhere]
- Fixed ensuring that GIF previous frame was loaded #5386 [@radarhere]
- Valgrind fixes #5397 [@wiredfool]
- Use python3 in shebang line #5395 [@radarhere]
- Round down the radius in rounded_rectangle #5382 [@radarhere]
- Fixed reading uncompressed RGB data from DDS #5383 [@radarhere]
- Changed register_open calls to be consistent #5380 [@radarhere]
Dependencies
- Updated libimagequant to 2.15.1 #5492 [@radarhere]
- Updated libimagequant to 2.15.0 #5479 [@radarhere]
- Updated harfbuzz to 2.8.1 #5464 [@radarhere]
- Updated libjpeg-turbo to 2.1.0 #5433 [@radarhere]
- Updated libtiff to 4.3.0 #5421 [@radarhere]
Documentation
- Added release notes #5566 [@radarhere]
- Add Twitter to PyPI project URLs #5563 [@hugovk]
- Modified docstring for GaussianBlur #5539 [@kdpenner]
- Copies of an image do not retain the format #5532 [@radarhere]
- Fix differing background colors in right sidebar in dark mode docs #5515 [@PH-KDX]
- Updated macOS tested Pillow versions #5521 [@radarhere]
- Build docs with sphinx_copybutton and sphinxext.opengraph #5498 [@hugovk]
- Updated badges for wheels #5483 [@radarhere]
- Use python3 #5477 [@radarhere]
- Corrected code references in docstring #5468 [@radarhere]
- Updated tested libtiff versions #5466 [@radarhere]
- Updated macOS tested Pillow versions #5427 [@radarhere]
- Added info about mode when saving ICO for Windows #5423 [@radarhere]
- Add Raspberry Pi OS to platform support #5424 [@thijstriemstra]
- Changed wording to avoid confusion with IMAGING_TYPE_SPECIAL #5410 [@radarhere]
- Fix PDF file format documentation #5399 [@cholojuanito]
Testing
- Corrected comments #5560 [@radarhere]
- Reverse test order for two CI jobs #5542 [@radarhere]
- Fixed errors when running tests in random order #5533 [@radarhere]
- Fix lcms2_static target for msbuild #5522 [@kmilos]
- Removed setuptools version requirement on GHA macOS and Windows #5496 [@radarhere]
- Removed GitHub Actions Ubuntu setuptools version requirement #5482 [@radarhere]
- Corrected errors in restoring sys.stdout in tests #5474 [@radarhere]
- Revert "Fixed Python 3.10 at alpha.7": use 3.10-dev #5456 [@hugovk]
- GHA: Update test-windows for 64-bit PyPy 7.3.4 release #5453 [@nulano]
- Fixed Python 3.10 at alpha.7 #5447 [@radarhere]
- Added Fedora 34 #5451 [@radarhere]
- Updated nasm to 2.15.05 in AppVeyor #5422 [@radarhere]
- Corrected test #5420 [@radarhere]
- Add test for CVE-2021-25292 ReDoS #5393 [@hugovk]
- Removed Fedora 32 docker job #5378 [@radarhere]