mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-06-29 17:33:08 +03:00
Test uint32 array creation -> image32 images
This commit is contained in:
parent
3d77723a0c
commit
c729d4e208
|
@ -9,6 +9,7 @@ from PIL import Image
|
||||||
from .helper import (
|
from .helper import (
|
||||||
assert_deep_equal,
|
assert_deep_equal,
|
||||||
assert_image_equal,
|
assert_image_equal,
|
||||||
|
is_big_endian,
|
||||||
hopper,
|
hopper,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -41,6 +42,34 @@ def _test_img_equals_pyarray(
|
||||||
assert_deep_equal(px[x, y], arr[y * img.width + x].as_py())
|
assert_deep_equal(px[x, y], arr[y * img.width + x].as_py())
|
||||||
|
|
||||||
|
|
||||||
|
def _test_img_equals_int32_pyarray(
|
||||||
|
img: Image.Image, arr: Any, mask: list[int] | None, elts_per_pixel: int = 1
|
||||||
|
) -> None:
|
||||||
|
assert img.height * img.width * elts_per_pixel == len(arr)
|
||||||
|
px = img.load()
|
||||||
|
assert px is not None
|
||||||
|
if mask is None:
|
||||||
|
# have to do element wise comparison when we're comparing
|
||||||
|
# flattened rgba in an uint32 to a pixel.
|
||||||
|
mask = list(range(elts_per_pixel))
|
||||||
|
for x in range(0, img.size[0], int(img.size[0] / 10)):
|
||||||
|
for y in range(0, img.size[1], int(img.size[1] / 10)):
|
||||||
|
pixel = px[x, y]
|
||||||
|
assert isinstance(pixel, tuple)
|
||||||
|
arr_pixel_int = arr[y * img.width + x].as_py()
|
||||||
|
arr_pixel_tuple = (
|
||||||
|
arr_pixel_int % 256,
|
||||||
|
(arr_pixel_int // 256) % 256,
|
||||||
|
(arr_pixel_int // 256**2) % 256,
|
||||||
|
(arr_pixel_int // 256**3),
|
||||||
|
)
|
||||||
|
if is_big_endian():
|
||||||
|
arr_pixel_tuple = arr_pixel_tuple[::-1]
|
||||||
|
|
||||||
|
for ix, elt in enumerate(mask):
|
||||||
|
assert pixel[ix] == arr_pixel_tuple[elt]
|
||||||
|
|
||||||
|
|
||||||
# really hard to get a non-nullable list type
|
# really hard to get a non-nullable list type
|
||||||
fl_uint8_4_type = pyarrow.field(
|
fl_uint8_4_type = pyarrow.field(
|
||||||
"_", pyarrow.list_(pyarrow.field("_", pyarrow.uint8()).with_nullable(False), 4)
|
"_", pyarrow.list_(pyarrow.field("_", pyarrow.uint8()).with_nullable(False), 4)
|
||||||
|
@ -129,7 +158,11 @@ UINT = (
|
||||||
3,
|
3,
|
||||||
4
|
4
|
||||||
)
|
)
|
||||||
|
INT32 = (
|
||||||
|
pyarrow.uint32(),
|
||||||
|
0xabcdef45,
|
||||||
|
1
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
@ -166,3 +199,29 @@ def test_fromarray(mode: str,
|
||||||
img = Image.fromarrow(arr, mode, TEST_IMAGE_SIZE)
|
img = Image.fromarrow(arr, mode, TEST_IMAGE_SIZE)
|
||||||
|
|
||||||
_test_img_equals_pyarray(img, arr, mask, elts_per_pixel)
|
_test_img_equals_pyarray(img, arr, mask, elts_per_pixel)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"mode, data_tp, mask",
|
||||||
|
(
|
||||||
|
("LA", INT32, [0, 3]),
|
||||||
|
("RGB", INT32, [0, 1, 2]),
|
||||||
|
("RGBA", INT32, None),
|
||||||
|
("RGBA", INT32, None),
|
||||||
|
("CMYK", INT32, None),
|
||||||
|
("YCbCr", INT32, [0, 1, 2]),
|
||||||
|
("HSV", INT32, [0, 1, 2]),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
def test_from_int32array(mode: str,
|
||||||
|
data_tp: tuple,
|
||||||
|
mask:list[int] | None) -> None:
|
||||||
|
(dtype,
|
||||||
|
elt,
|
||||||
|
elts_per_pixel) = data_tp
|
||||||
|
|
||||||
|
ct_pixels = TEST_IMAGE_SIZE[0] * TEST_IMAGE_SIZE[1]
|
||||||
|
arr = pyarrow.array([elt]*(ct_pixels*elts_per_pixel), type=dtype)
|
||||||
|
img = Image.fromarrow(arr, mode, TEST_IMAGE_SIZE)
|
||||||
|
|
||||||
|
_test_img_equals_int32_pyarray(img, arr, mask, elts_per_pixel)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user