mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 09:57:43 +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 (
 | 
			
		||||
    assert_deep_equal,
 | 
			
		||||
    assert_image_equal,
 | 
			
		||||
    is_big_endian,
 | 
			
		||||
    hopper,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +42,34 @@ def _test_img_equals_pyarray(
 | 
			
		|||
                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
 | 
			
		||||
fl_uint8_4_type = pyarrow.field(
 | 
			
		||||
    "_", pyarrow.list_(pyarrow.field("_", pyarrow.uint8()).with_nullable(False), 4)
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +158,11 @@ UINT = (
 | 
			
		|||
    3,
 | 
			
		||||
    4
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
INT32 = (
 | 
			
		||||
    pyarrow.uint32(),
 | 
			
		||||
    0xabcdef45,
 | 
			
		||||
    1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.parametrize(
 | 
			
		||||
| 
						 | 
				
			
			@ -166,3 +199,29 @@ def test_fromarray(mode: str,
 | 
			
		|||
    img = Image.fromarrow(arr, mode, TEST_IMAGE_SIZE)
 | 
			
		||||
 | 
			
		||||
    _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