mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-07-05 20:33:24 +03:00
Remove incomplete 11.2.0 release, bill as 11.2.1 instead
This commit is contained in:
parent
8dafc38371
commit
7a0092f207
|
@ -186,7 +186,7 @@ ExifTags.IFD.Makernote
|
||||||
Image.Image.get_child_images()
|
Image.Image.get_child_images()
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
.. deprecated:: 11.2.0
|
.. deprecated:: 11.2.1
|
||||||
|
|
||||||
``Image.Image.get_child_images()`` has been deprecated. and will be removed in Pillow
|
``Image.Image.get_child_images()`` has been deprecated. and will be removed in Pillow
|
||||||
13 (2026-10-15). It will be moved to ``ImageFile.ImageFile.get_child_images()``. The
|
13 (2026-10-15). It will be moved to ``ImageFile.ImageFile.get_child_images()``. The
|
||||||
|
|
|
@ -170,7 +170,7 @@ DXT1 and DXT5 pixel formats can be read, only in ``RGBA`` mode.
|
||||||
in ``P`` mode.
|
in ``P`` mode.
|
||||||
|
|
||||||
|
|
||||||
.. versionadded:: 11.2.0
|
.. versionadded:: 11.2.1
|
||||||
DXT1, DXT3, DXT5, BC2, BC3 and BC5 pixel formats can be saved::
|
DXT1, DXT3, DXT5, BC2, BC3 and BC5 pixel formats can be saved::
|
||||||
|
|
||||||
im.save(out, pixel_format="DXT1")
|
im.save(out, pixel_format="DXT1")
|
||||||
|
|
|
@ -391,7 +391,7 @@ Methods
|
||||||
the relative alignment of lines. Use the ``anchor`` parameter to
|
the relative alignment of lines. Use the ``anchor`` parameter to
|
||||||
specify the alignment to ``xy``.
|
specify the alignment to ``xy``.
|
||||||
|
|
||||||
.. versionadded:: 11.2.0 ``"justify"``
|
.. versionadded:: 11.2.1 ``"justify"``
|
||||||
:param direction: Direction of the text. It can be ``"rtl"`` (right to
|
:param direction: Direction of the text. It can be ``"rtl"`` (right to
|
||||||
left), ``"ltr"`` (left to right) or ``"ttb"`` (top to bottom).
|
left), ``"ltr"`` (left to right) or ``"ttb"`` (top to bottom).
|
||||||
Requires libraqm.
|
Requires libraqm.
|
||||||
|
@ -462,7 +462,7 @@ Methods
|
||||||
the relative alignment of lines. Use the ``anchor`` parameter to
|
the relative alignment of lines. Use the ``anchor`` parameter to
|
||||||
specify the alignment to ``xy``.
|
specify the alignment to ``xy``.
|
||||||
|
|
||||||
.. versionadded:: 11.2.0 ``"justify"``
|
.. versionadded:: 11.2.1 ``"justify"``
|
||||||
:param direction: Direction of the text. It can be ``"rtl"`` (right to
|
:param direction: Direction of the text. It can be ``"rtl"`` (right to
|
||||||
left), ``"ltr"`` (left to right) or ``"ttb"`` (top to bottom).
|
left), ``"ltr"`` (left to right) or ``"ttb"`` (top to bottom).
|
||||||
Requires libraqm.
|
Requires libraqm.
|
||||||
|
@ -609,7 +609,7 @@ Methods
|
||||||
the relative alignment of lines. Use the ``anchor`` parameter to
|
the relative alignment of lines. Use the ``anchor`` parameter to
|
||||||
specify the alignment to ``xy``.
|
specify the alignment to ``xy``.
|
||||||
|
|
||||||
.. versionadded:: 11.2.0 ``"justify"``
|
.. versionadded:: 11.2.1 ``"justify"``
|
||||||
:param direction: Direction of the text. It can be ``"rtl"`` (right to
|
:param direction: Direction of the text. It can be ``"rtl"`` (right to
|
||||||
left), ``"ltr"`` (left to right) or ``"ttb"`` (top to bottom).
|
left), ``"ltr"`` (left to right) or ``"ttb"`` (top to bottom).
|
||||||
Requires libraqm.
|
Requires libraqm.
|
||||||
|
@ -663,7 +663,7 @@ Methods
|
||||||
the relative alignment of lines. Use the ``anchor`` parameter to
|
the relative alignment of lines. Use the ``anchor`` parameter to
|
||||||
specify the alignment to ``xy``.
|
specify the alignment to ``xy``.
|
||||||
|
|
||||||
.. versionadded:: 11.2.0 ``"justify"``
|
.. versionadded:: 11.2.1 ``"justify"``
|
||||||
:param direction: Direction of the text. It can be ``"rtl"`` (right to
|
:param direction: Direction of the text. It can be ``"rtl"`` (right to
|
||||||
left), ``"ltr"`` (left to right) or ``"ttb"`` (top to bottom).
|
left), ``"ltr"`` (left to right) or ``"ttb"`` (top to bottom).
|
||||||
Requires libraqm.
|
Requires libraqm.
|
||||||
|
|
|
@ -44,7 +44,7 @@ or the clipboard to a PIL image memory.
|
||||||
:param window:
|
:param window:
|
||||||
HWND, to capture a single window. Windows only.
|
HWND, to capture a single window. Windows only.
|
||||||
|
|
||||||
.. versionadded:: 11.2.0
|
.. versionadded:: 11.2.1
|
||||||
:return: An image
|
:return: An image
|
||||||
|
|
||||||
.. py:function:: grabclipboard()
|
.. py:function:: grabclipboard()
|
||||||
|
|
|
@ -1,116 +0,0 @@
|
||||||
11.2.0
|
|
||||||
------
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
|
|
||||||
The release of Pillow 11.2.0 was halted prematurely, due to concern over the size
|
|
||||||
of Pillow wheels containing libavif. Instead, Pillow 11.2.1 has been released,
|
|
||||||
without libavif included in the wheels.
|
|
||||||
|
|
||||||
Security
|
|
||||||
========
|
|
||||||
|
|
||||||
Undefined shift when loading compressed DDS images
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
When loading some compressed DDS formats, an integer was bitshifted by 24 places to
|
|
||||||
generate the 32 bits of the lookup table. This was undefined behaviour, and has been
|
|
||||||
present since Pillow 3.4.0.
|
|
||||||
|
|
||||||
Deprecations
|
|
||||||
============
|
|
||||||
|
|
||||||
Image.Image.get_child_images()
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. deprecated:: 11.2.0
|
|
||||||
|
|
||||||
``Image.Image.get_child_images()`` has been deprecated. and will be removed in Pillow
|
|
||||||
13 (2026-10-15). It will be moved to ``ImageFile.ImageFile.get_child_images()``. The
|
|
||||||
method uses an image's file pointer, and so child images could only be retrieved from
|
|
||||||
an :py:class:`PIL.ImageFile.ImageFile` instance.
|
|
||||||
|
|
||||||
API Changes
|
|
||||||
===========
|
|
||||||
|
|
||||||
``append_images`` no longer requires ``save_all``
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Previously, ``save_all`` was required to in order to use ``append_images``. Now,
|
|
||||||
``save_all`` will default to ``True`` if ``append_images`` is not empty and the format
|
|
||||||
supports saving multiple frames::
|
|
||||||
|
|
||||||
im.save("out.gif", append_images=ims)
|
|
||||||
|
|
||||||
API Additions
|
|
||||||
=============
|
|
||||||
|
|
||||||
``"justify"`` multiline text alignment
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
In addition to ``"left"``, ``"center"`` and ``"right"``, multiline text can also be
|
|
||||||
aligned using ``"justify"`` in :py:mod:`~PIL.ImageDraw`::
|
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
|
||||||
im = Image.new("RGB", (50, 25))
|
|
||||||
draw = ImageDraw.Draw(im)
|
|
||||||
draw.multiline_text((0, 0), "Multiline\ntext 1", align="justify")
|
|
||||||
draw.multiline_textbbox((0, 0), "Multiline\ntext 2", align="justify")
|
|
||||||
|
|
||||||
Specify window in ImageGrab on Windows
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
When using :py:meth:`~PIL.ImageGrab.grab`, a specific window can be selected using the
|
|
||||||
HWND::
|
|
||||||
|
|
||||||
from PIL import ImageGrab
|
|
||||||
ImageGrab.grab(window=hwnd)
|
|
||||||
|
|
||||||
Check for MozJPEG
|
|
||||||
^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
You can check if Pillow has been built against the MozJPEG version of the
|
|
||||||
libjpeg library, and what version of MozJPEG is being used::
|
|
||||||
|
|
||||||
from PIL import features
|
|
||||||
features.check_feature("mozjpeg") # True or False
|
|
||||||
features.version_feature("mozjpeg") # "4.1.1" for example, or None
|
|
||||||
|
|
||||||
Saving compressed DDS images
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Compressed DDS images can now be saved using a ``pixel_format`` argument. DXT1, DXT3,
|
|
||||||
DXT5, BC2, BC3 and BC5 are supported::
|
|
||||||
|
|
||||||
im.save("out.dds", pixel_format="DXT1")
|
|
||||||
|
|
||||||
Other Changes
|
|
||||||
=============
|
|
||||||
|
|
||||||
Arrow support
|
|
||||||
^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
`Arrow <https://arrow.apache.org/>`__ is an in-memory data exchange format that is the
|
|
||||||
spiritual successor to the NumPy array interface. It provides for zero-copy access to
|
|
||||||
columnar data, which in our case is ``Image`` data.
|
|
||||||
|
|
||||||
To create an image with zero-copy shared memory from an object exporting the
|
|
||||||
arrow_c_array interface protocol::
|
|
||||||
|
|
||||||
from PIL import Image
|
|
||||||
import pyarrow as pa
|
|
||||||
arr = pa.array([0]*(5*5*4), type=pa.uint8())
|
|
||||||
im = Image.fromarrow(arr, 'RGBA', (5, 5))
|
|
||||||
|
|
||||||
Pillow images can also be converted to Arrow objects::
|
|
||||||
|
|
||||||
from PIL import Image
|
|
||||||
import pyarrow as pa
|
|
||||||
im = Image.open('hopper.jpg')
|
|
||||||
arr = pa.array(im)
|
|
||||||
|
|
||||||
Reading and writing AVIF images
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Pillow can now read and write AVIF images. If you are building Pillow from source, this
|
|
||||||
will require libavif 1.0.0 or later.
|
|
|
@ -1,11 +1,118 @@
|
||||||
11.2.1
|
11.2.1
|
||||||
------
|
------
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
The release of Pillow *11.2.0* was halted prematurely, due to hitting PyPI's
|
||||||
|
project size limit and concern over the size of Pillow wheels containing libavif.
|
||||||
|
The PyPI limit has now been increased and Pillow *11.2.1* has been released
|
||||||
|
instead, without libavif included in the wheels.
|
||||||
|
To avoid confusion, the incomplete 11.2.0 release has been removed from PyPI.
|
||||||
|
|
||||||
|
Security
|
||||||
|
========
|
||||||
|
|
||||||
|
Undefined shift when loading compressed DDS images
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
When loading some compressed DDS formats, an integer was bitshifted by 24 places to
|
||||||
|
generate the 32 bits of the lookup table. This was undefined behaviour, and has been
|
||||||
|
present since Pillow 3.4.0.
|
||||||
|
|
||||||
|
Deprecations
|
||||||
|
============
|
||||||
|
|
||||||
|
Image.Image.get_child_images()
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. deprecated:: 11.2.1
|
||||||
|
|
||||||
|
``Image.Image.get_child_images()`` has been deprecated. and will be removed in Pillow
|
||||||
|
13 (2026-10-15). It will be moved to ``ImageFile.ImageFile.get_child_images()``. The
|
||||||
|
method uses an image's file pointer, and so child images could only be retrieved from
|
||||||
|
an :py:class:`PIL.ImageFile.ImageFile` instance.
|
||||||
|
|
||||||
|
API Changes
|
||||||
|
===========
|
||||||
|
|
||||||
|
``append_images`` no longer requires ``save_all``
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Previously, ``save_all`` was required to in order to use ``append_images``. Now,
|
||||||
|
``save_all`` will default to ``True`` if ``append_images`` is not empty and the format
|
||||||
|
supports saving multiple frames::
|
||||||
|
|
||||||
|
im.save("out.gif", append_images=ims)
|
||||||
|
|
||||||
|
API Additions
|
||||||
|
=============
|
||||||
|
|
||||||
|
``"justify"`` multiline text alignment
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
In addition to ``"left"``, ``"center"`` and ``"right"``, multiline text can also be
|
||||||
|
aligned using ``"justify"`` in :py:mod:`~PIL.ImageDraw`::
|
||||||
|
|
||||||
|
from PIL import Image, ImageDraw
|
||||||
|
im = Image.new("RGB", (50, 25))
|
||||||
|
draw = ImageDraw.Draw(im)
|
||||||
|
draw.multiline_text((0, 0), "Multiline\ntext 1", align="justify")
|
||||||
|
draw.multiline_textbbox((0, 0), "Multiline\ntext 2", align="justify")
|
||||||
|
|
||||||
|
Specify window in ImageGrab on Windows
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
When using :py:meth:`~PIL.ImageGrab.grab`, a specific window can be selected using the
|
||||||
|
HWND::
|
||||||
|
|
||||||
|
from PIL import ImageGrab
|
||||||
|
ImageGrab.grab(window=hwnd)
|
||||||
|
|
||||||
|
Check for MozJPEG
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
You can check if Pillow has been built against the MozJPEG version of the
|
||||||
|
libjpeg library, and what version of MozJPEG is being used::
|
||||||
|
|
||||||
|
from PIL import features
|
||||||
|
features.check_feature("mozjpeg") # True or False
|
||||||
|
features.version_feature("mozjpeg") # "4.1.1" for example, or None
|
||||||
|
|
||||||
|
Saving compressed DDS images
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Compressed DDS images can now be saved using a ``pixel_format`` argument. DXT1, DXT3,
|
||||||
|
DXT5, BC2, BC3 and BC5 are supported::
|
||||||
|
|
||||||
|
im.save("out.dds", pixel_format="DXT1")
|
||||||
|
|
||||||
|
Other Changes
|
||||||
|
=============
|
||||||
|
|
||||||
|
Arrow support
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
`Arrow <https://arrow.apache.org/>`__ is an in-memory data exchange format that is the
|
||||||
|
spiritual successor to the NumPy array interface. It provides for zero-copy access to
|
||||||
|
columnar data, which in our case is ``Image`` data.
|
||||||
|
|
||||||
|
To create an image with zero-copy shared memory from an object exporting the
|
||||||
|
arrow_c_array interface protocol::
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
import pyarrow as pa
|
||||||
|
arr = pa.array([0]*(5*5*4), type=pa.uint8())
|
||||||
|
im = Image.fromarrow(arr, 'RGBA', (5, 5))
|
||||||
|
|
||||||
|
Pillow images can also be converted to Arrow objects::
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
import pyarrow as pa
|
||||||
|
im = Image.open('hopper.jpg')
|
||||||
|
arr = pa.array(im)
|
||||||
|
|
||||||
Reading and writing AVIF images
|
Reading and writing AVIF images
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The release of Pillow 11.2.0 was halted prematurely, due to concern over the size of
|
Pillow can now read and write AVIF images when built from source with libavif 1.0.0
|
||||||
Pillow wheels containing libavif.
|
or later.
|
||||||
|
|
||||||
Instead, Pillow 11.2.1's wheels do not contain libavif. If you wish to read and write
|
|
||||||
AVIF images, you will need to build Pillow from source with libavif 1.0.0 or later.
|
|
||||||
|
|
|
@ -15,7 +15,6 @@ expected to be backported to earlier versions.
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
11.2.1
|
11.2.1
|
||||||
11.2.0
|
|
||||||
11.1.0
|
11.1.0
|
||||||
11.0.0
|
11.0.0
|
||||||
10.4.0
|
10.4.0
|
||||||
|
|
|
@ -3362,7 +3362,7 @@ def fromarrow(
|
||||||
|
|
||||||
See: :ref:`arrow-support` for more detailed information
|
See: :ref:`arrow-support` for more detailed information
|
||||||
|
|
||||||
.. versionadded:: 11.2.0
|
.. versionadded:: 11.2.1
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if not hasattr(obj, "__arrow_c_array__"):
|
if not hasattr(obj, "__arrow_c_array__"):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user