mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-08-17 02:34:44 +03:00
Merge branch 'main' into palala_pixelsize
This commit is contained in:
commit
b0d55caa9d
|
@ -5,6 +5,9 @@ Changelog (Pillow)
|
||||||
9.3.0 (unreleased)
|
9.3.0 (unreleased)
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
- Raise an error when allocating translucent color to RGB palette #6654
|
||||||
|
[jsbueno, radarhere]
|
||||||
|
|
||||||
- Added reading of TIFF child images #6569
|
- Added reading of TIFF child images #6569
|
||||||
[radarhere]
|
[radarhere]
|
||||||
|
|
||||||
|
|
|
@ -345,13 +345,14 @@ class TestCffi(AccessTest):
|
||||||
|
|
||||||
@pytest.mark.parametrize("mode", ("P", "PA"))
|
@pytest.mark.parametrize("mode", ("P", "PA"))
|
||||||
def test_p_putpixel_rgb_rgba(self, mode):
|
def test_p_putpixel_rgb_rgba(self, mode):
|
||||||
for color in [(255, 0, 0), (255, 0, 0, 127)]:
|
for color in ((255, 0, 0), (255, 0, 0, 127 if mode == "PA" else 255)):
|
||||||
im = Image.new(mode, (1, 1))
|
im = Image.new(mode, (1, 1))
|
||||||
access = PyAccess.new(im, False)
|
access = PyAccess.new(im, False)
|
||||||
access.putpixel((0, 0), color)
|
access.putpixel((0, 0), color)
|
||||||
|
|
||||||
alpha = color[3] if len(color) == 4 and mode == "PA" else 255
|
if len(color) == 3:
|
||||||
assert im.convert("RGBA").getpixel((0, 0)) == (255, 0, 0, alpha)
|
color += (255,)
|
||||||
|
assert im.convert("RGBA").getpixel((0, 0)) == color
|
||||||
|
|
||||||
|
|
||||||
class TestImagePutPixelError(AccessTest):
|
class TestImagePutPixelError(AccessTest):
|
||||||
|
|
|
@ -50,6 +50,16 @@ def test_getcolor():
|
||||||
palette.getcolor("unknown")
|
palette.getcolor("unknown")
|
||||||
|
|
||||||
|
|
||||||
|
def test_getcolor_rgba_color_rgb_palette():
|
||||||
|
palette = ImagePalette.ImagePalette("RGB")
|
||||||
|
|
||||||
|
# Opaque RGBA colors are converted
|
||||||
|
assert palette.getcolor((0, 0, 0, 255)) == palette.getcolor((0, 0, 0))
|
||||||
|
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
palette.getcolor((0, 0, 0, 128))
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"index, palette",
|
"index, palette",
|
||||||
[
|
[
|
||||||
|
|
|
@ -955,6 +955,11 @@ def truetype(font=None, size=10, index=0, encoding="", layout_engine=None):
|
||||||
encoding of any text provided in subsequent operations.
|
encoding of any text provided in subsequent operations.
|
||||||
:param layout_engine: Which layout engine to use, if available:
|
:param layout_engine: Which layout engine to use, if available:
|
||||||
:data:`.ImageFont.Layout.BASIC` or :data:`.ImageFont.Layout.RAQM`.
|
:data:`.ImageFont.Layout.BASIC` or :data:`.ImageFont.Layout.RAQM`.
|
||||||
|
If it is available, Raqm layout will be used by default.
|
||||||
|
Otherwise, basic layout will be used.
|
||||||
|
|
||||||
|
Raqm layout is recommended for all non-English text. If Raqm layout
|
||||||
|
is not required, basic layout will have better performance.
|
||||||
|
|
||||||
You can check support for Raqm layout using
|
You can check support for Raqm layout using
|
||||||
:py:func:`PIL.features.check_feature` with ``feature="raqm"``.
|
:py:func:`PIL.features.check_feature` with ``feature="raqm"``.
|
||||||
|
|
|
@ -115,7 +115,11 @@ class ImagePalette:
|
||||||
raise ValueError("palette contains raw palette data")
|
raise ValueError("palette contains raw palette data")
|
||||||
if isinstance(color, tuple):
|
if isinstance(color, tuple):
|
||||||
if self.mode == "RGB":
|
if self.mode == "RGB":
|
||||||
if len(color) == 4 and color[3] == 255:
|
if len(color) == 4:
|
||||||
|
if color[3] != 255:
|
||||||
|
raise ValueError(
|
||||||
|
"cannot add non-opaque RGBA color to RGB palette"
|
||||||
|
)
|
||||||
color = color[:3]
|
color = color[:3]
|
||||||
elif self.mode == "RGBA":
|
elif self.mode == "RGBA":
|
||||||
if len(color) == 3:
|
if len(color) == 3:
|
||||||
|
|
|
@ -281,9 +281,9 @@ deps = {
|
||||||
"libs": [r"imagequant.lib"],
|
"libs": [r"imagequant.lib"],
|
||||||
},
|
},
|
||||||
"harfbuzz": {
|
"harfbuzz": {
|
||||||
"url": "https://github.com/harfbuzz/harfbuzz/archive/5.2.0.zip",
|
"url": "https://github.com/harfbuzz/harfbuzz/archive/5.3.0.zip",
|
||||||
"filename": "harfbuzz-5.2.0.zip",
|
"filename": "harfbuzz-5.3.0.zip",
|
||||||
"dir": "harfbuzz-5.2.0",
|
"dir": "harfbuzz-5.3.0",
|
||||||
"build": [
|
"build": [
|
||||||
cmd_cmake("-DHB_HAVE_FREETYPE:BOOL=TRUE"),
|
cmd_cmake("-DHB_HAVE_FREETYPE:BOOL=TRUE"),
|
||||||
cmd_nmake(target="clean"),
|
cmd_nmake(target="clean"),
|
||||||
|
|
Loading…
Reference in New Issue
Block a user