Changelog
### 8.3.1
```
------------------
- 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, radarhere]
```
### 8.3.0
```
------------------
- Use snprintf instead of sprintf. CVE-2021-34552 5567
[radarhere]
- Limit TIFF strip size when saving with LibTIFF 5514
[kmilos]
- Allow ICNS save on all operating systems 4526
[baletu, radarhere, newpanjing, hugovk]
- De-zigzag JPEG's DQT when loading; deprecate convert_dict_qtables 4989
[gofr, radarhere]
- Replaced xml.etree.ElementTree 5565
[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, hrdrq]
- Use transparency behind first GIF frame and when disposing to background 5557
[radarhere, zewt]
- 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]
- 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]
- Removed DPI rounding from BMP, JPEG, PNG and WMF loading 5476, 5470
[radarhere]
- Remove spikes when drawing thin pieslices 5460
[xtsm]
- Updated default value for SAMPLESPERPIXEL TIFF tag 5452
[radarhere]
- Removed TIFF DPI rounding 5446
[radarhere, hugovk]
- Include code in WebP error 5471
[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]
- 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, hugovk]
- 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]
- For special image modes, revert default resize resampling to NEAREST 5411
[radarhere]
- JPEG2000: Support decoding subsampled RGB and YCbCr images 4996
[nulano, radarhere]
- Stop decoding BC1 punchthrough alpha in BC2&3 4144
[jansol]
- 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]
- Round down the radius in rounded_rectangle 5382
[radarhere]
- Fixed reading uncompressed RGB data from DDS 5383
[radarhere]
```
Links
- PyPI: https://pypi.org/project/pillow
- Changelog: https://pyup.io/changelogs/pillow/
- Homepage: https://python-pillow.org
Changelog
### 4.26.2
```
----------------------------
- [otTables] Added missing ``CompositeMode.PLUS`` operator (2390).
```
### 4.26.1
```
----------------------------
- [transform] Added ``transformVector`` and ``transformVectors`` methods to the
``Transform`` class. Similar to ``transformPoint`` but ignore the translation
part (2386).
```
### 4.26.0
```
----------------------------
- [xmlWriter] Default to ``"\n"`` for ``newlinestr`` instead of platform-specific
``os.linesep`` (2384).
- [otData] Define COLRv1 ClipList and ClipBox (2379).
- [removeOverlaps/instancer] Added --ignore-overlap-errors option to work around
Skia PathOps.Simplify bug (2382, 2363, google/fonts3365).
- NOTE: This will be the last version to support Python 3.6. FontTools will require
Python 3.7 or above from the next release (2350)
```
### 4.25.2
```
----------------------------
- [COLRv1] Various changes to sync with the latest CORLv1 draft spec. In particular:
define COLR.VarIndexMap, remove/inline ColorIndex struct, add VarIndexBase to ``PaintVar*`` tables (2372);
add reduced-precicion specialized transform Paints;
define Angle as fraction of half circle encoded as F2Dot14;
use FWORD (int16) for all Paint center coordinates;
change PaintTransform to have an offset to Affine2x3;
- [ttLib] when importing XML, only set sfntVersion if the font has no reader and is empty (2376)
```
### 4.25.1
```
----------------------------
- [ttGlyphPen] Fixed bug in ``TTGlyphPointPen``, whereby open contours (i.e. starting
with segmentType "move") would throw ``NotImplementedError``. They are now treated
as if they are closed, like with the ``TTGlyphPen`` (2364, 2366).
```
### 4.25.0
```
----------------------------
- [tfmLib] Added new library for parsing TeX Font Metric (TFM) files (2354).
- [TupleVariation] Make shared tuples order deterministic on python < 3.7 where
Counter (subclass of dict) doesn't remember insertion order (2351, 2353).
- [otData] Renamed COLRv1 structs to remove 'v1' suffix and match the updated draft
spec: 'LayerV1List' -> 'LayerList', 'BaseGlyphV1List' -> 'BaseGlyphList',
'BaseGlyphV1Record' -> 'BaseGlyphPaintRecord' (2346).
Added 8 new ``PaintScale*`` tables: with/without centers, uniform vs non-uniform.
Added ``*AroundCenter`` variants to ``PaintRotate`` and ``PaintSkew``: the default
versions no longer have centerX/Y, but default to origin.
``PaintRotate``, ``PaintSkew`` and ``PaintComposite`` formats were re-numbered.
NOTE: these are breaking changes; clients using the experimental COLRv1 API will
have to be updated (2348).
- [pointPens] Allow ``GuessSmoothPointPen`` to accept a tolerance. Fixed call to
``math.atan2`` with x/y parameters inverted. Sync the code with fontPens (2344).
- [post] Fixed parsing ``post`` table format 2.0 when it contains extra garbage
at the end of the stringData array (2314).
- [subset] drop empty features unless 'size' with FeatureParams table (2324).
- [otlLib] Added ``otlLib.optimize`` module; added GPOS compaction algorithm.
The compaction can be run on existing fonts with ``fonttools otlLib.optimize``
or using the snippet ``compact_gpos.py``. There's experimental support for
compacting fonts at compilation time using an environment variable, but that
might be removed later (2326).
```
### 4.24.4
```
----------------------------
- [subset/instancer] Fixed ``AttributeError`` when instantiating a VF that
contains GPOS ValueRecords with ``Device`` tables but without the respective
non-Device values (e.g. ``XAdvDevice`` without ``XAdvance``). When not
explicitly set, the latter are assumed to be 0 (2323).
```
Links
- PyPI: https://pypi.org/project/fonttools
- Changelog: https://pyup.io/changelogs/fonttools/
- Repo: http://github.com/fonttools/fonttools
Changelog
### 0.17.1
```
* Build wheels for pypy3 as well as macOS arm64 and universal2 wheels.
* Add a Blob class wrapper for hb_blob_t, and allow constructing Face
from it. Blob has from_file_path() method that mmap’s files instead of
leading all data in memory upfront.
* Buffer.get_script() and get_language() return None for invalid (e.g.
unset) script and language a=instead of an empty string.
```
### 0.17.0
```
* upgraded HarfBuzz to 2.8.2 (91)
* Buffer.glyph_positions() can now return None during tracing
* enabled DirectWrite shaper on Windows (77)
* fixed crash when all shapers fail (83), a RuntimeError exception will
be raised in this case
* respect return value from message callback function (51)
* fix crash when accessing Buffer.language before setting it (89), None
will be returned for unset language and script
```
Links
- PyPI: https://pypi.org/project/uharfbuzz
- Changelog: https://pyup.io/changelogs/uharfbuzz/
- Repo: https://github.com/trufont/uharfbuzz
Update skia-pathops from 0.6.0.post2 to 0.6.0.post3.
Update pillow from 8.2.0 to 8.3.1.
Changelog
### 8.3.1 ``` ------------------ - 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, radarhere] ``` ### 8.3.0 ``` ------------------ - Use snprintf instead of sprintf. CVE-2021-34552 5567 [radarhere] - Limit TIFF strip size when saving with LibTIFF 5514 [kmilos] - Allow ICNS save on all operating systems 4526 [baletu, radarhere, newpanjing, hugovk] - De-zigzag JPEG's DQT when loading; deprecate convert_dict_qtables 4989 [gofr, radarhere] - Replaced xml.etree.ElementTree 5565 [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, hrdrq] - Use transparency behind first GIF frame and when disposing to background 5557 [radarhere, zewt] - 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] - 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] - Removed DPI rounding from BMP, JPEG, PNG and WMF loading 5476, 5470 [radarhere] - Remove spikes when drawing thin pieslices 5460 [xtsm] - Updated default value for SAMPLESPERPIXEL TIFF tag 5452 [radarhere] - Removed TIFF DPI rounding 5446 [radarhere, hugovk] - Include code in WebP error 5471 [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] - 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, hugovk] - 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] - For special image modes, revert default resize resampling to NEAREST 5411 [radarhere] - JPEG2000: Support decoding subsampled RGB and YCbCr images 4996 [nulano, radarhere] - Stop decoding BC1 punchthrough alpha in BC2&3 4144 [jansol] - 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] - Round down the radius in rounded_rectangle 5382 [radarhere] - Fixed reading uncompressed RGB data from DDS 5383 [radarhere] ```Links
- PyPI: https://pypi.org/project/pillow - Changelog: https://pyup.io/changelogs/pillow/ - Homepage: https://python-pillow.orgUpdate fonttools[unicode] from 4.24.3 to 4.26.2.
Changelog
### 4.26.2 ``` ---------------------------- - [otTables] Added missing ``CompositeMode.PLUS`` operator (2390). ``` ### 4.26.1 ``` ---------------------------- - [transform] Added ``transformVector`` and ``transformVectors`` methods to the ``Transform`` class. Similar to ``transformPoint`` but ignore the translation part (2386). ``` ### 4.26.0 ``` ---------------------------- - [xmlWriter] Default to ``"\n"`` for ``newlinestr`` instead of platform-specific ``os.linesep`` (2384). - [otData] Define COLRv1 ClipList and ClipBox (2379). - [removeOverlaps/instancer] Added --ignore-overlap-errors option to work around Skia PathOps.Simplify bug (2382, 2363, google/fonts3365). - NOTE: This will be the last version to support Python 3.6. FontTools will require Python 3.7 or above from the next release (2350) ``` ### 4.25.2 ``` ---------------------------- - [COLRv1] Various changes to sync with the latest CORLv1 draft spec. In particular: define COLR.VarIndexMap, remove/inline ColorIndex struct, add VarIndexBase to ``PaintVar*`` tables (2372); add reduced-precicion specialized transform Paints; define Angle as fraction of half circle encoded as F2Dot14; use FWORD (int16) for all Paint center coordinates; change PaintTransform to have an offset to Affine2x3; - [ttLib] when importing XML, only set sfntVersion if the font has no reader and is empty (2376) ``` ### 4.25.1 ``` ---------------------------- - [ttGlyphPen] Fixed bug in ``TTGlyphPointPen``, whereby open contours (i.e. starting with segmentType "move") would throw ``NotImplementedError``. They are now treated as if they are closed, like with the ``TTGlyphPen`` (2364, 2366). ``` ### 4.25.0 ``` ---------------------------- - [tfmLib] Added new library for parsing TeX Font Metric (TFM) files (2354). - [TupleVariation] Make shared tuples order deterministic on python < 3.7 where Counter (subclass of dict) doesn't remember insertion order (2351, 2353). - [otData] Renamed COLRv1 structs to remove 'v1' suffix and match the updated draft spec: 'LayerV1List' -> 'LayerList', 'BaseGlyphV1List' -> 'BaseGlyphList', 'BaseGlyphV1Record' -> 'BaseGlyphPaintRecord' (2346). Added 8 new ``PaintScale*`` tables: with/without centers, uniform vs non-uniform. Added ``*AroundCenter`` variants to ``PaintRotate`` and ``PaintSkew``: the default versions no longer have centerX/Y, but default to origin. ``PaintRotate``, ``PaintSkew`` and ``PaintComposite`` formats were re-numbered. NOTE: these are breaking changes; clients using the experimental COLRv1 API will have to be updated (2348). - [pointPens] Allow ``GuessSmoothPointPen`` to accept a tolerance. Fixed call to ``math.atan2`` with x/y parameters inverted. Sync the code with fontPens (2344). - [post] Fixed parsing ``post`` table format 2.0 when it contains extra garbage at the end of the stringData array (2314). - [subset] drop empty features unless 'size' with FeatureParams table (2324). - [otlLib] Added ``otlLib.optimize`` module; added GPOS compaction algorithm. The compaction can be run on existing fonts with ``fonttools otlLib.optimize`` or using the snippet ``compact_gpos.py``. There's experimental support for compacting fonts at compilation time using an environment variable, but that might be removed later (2326). ``` ### 4.24.4 ``` ---------------------------- - [subset/instancer] Fixed ``AttributeError`` when instantiating a VF that contains GPOS ValueRecords with ``Device`` tables but without the respective non-Device values (e.g. ``XAdvDevice`` without ``XAdvance``). When not explicitly set, the latter are assumed to be 0 (2323). ```Links
- PyPI: https://pypi.org/project/fonttools - Changelog: https://pyup.io/changelogs/fonttools/ - Repo: http://github.com/fonttools/fonttoolsUpdate uharfbuzz from 0.16.1 to 0.17.1.
Changelog
### 0.17.1 ``` * Build wheels for pypy3 as well as macOS arm64 and universal2 wheels. * Add a Blob class wrapper for hb_blob_t, and allow constructing Face from it. Blob has from_file_path() method that mmap’s files instead of leading all data in memory upfront. * Buffer.get_script() and get_language() return None for invalid (e.g. unset) script and language a=instead of an empty string. ``` ### 0.17.0 ``` * upgraded HarfBuzz to 2.8.2 (91) * Buffer.glyph_positions() can now return None during tracing * enabled DirectWrite shaper on Windows (77) * fixed crash when all shapers fail (83), a RuntimeError exception will be raised in this case * respect return value from message callback function (51) * fix crash when accessing Buffer.language before setting it (89), None will be returned for unset language and script ```Links
- PyPI: https://pypi.org/project/uharfbuzz - Changelog: https://pyup.io/changelogs/uharfbuzz/ - Repo: https://github.com/trufont/uharfbuzzUpdate skia-pathops from 0.6.0.post2 to 0.6.0.post3.
Changelog
### 0.6.0.post3 ``` Make pypy 7.3 wheels for Linux. ```Links
- PyPI: https://pypi.org/project/skia-pathops - Changelog: https://pyup.io/changelogs/skia-pathops/ - Repo: https://github.com/fonttools/skia-pathops