mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-01 00:17:27 +03:00 
			
		
		
		
	Allow alpha_composite to use LA images (#9066)
This commit is contained in:
		
						commit
						9a2c5160f2
					
				|  | @ -388,6 +388,37 @@ class TestImage: | ||||||
|         assert img_colors is not None |         assert img_colors is not None | ||||||
|         assert sorted(img_colors) == expected_colors |         assert sorted(img_colors) == expected_colors | ||||||
| 
 | 
 | ||||||
|  |     def test_alpha_composite_la(self) -> None: | ||||||
|  |         # Arrange | ||||||
|  |         expected_colors = sorted( | ||||||
|  |             [ | ||||||
|  |                 (3300, (255, 255)), | ||||||
|  |                 (1156, (170, 192)), | ||||||
|  |                 (1122, (128, 255)), | ||||||
|  |                 (1089, (0, 0)), | ||||||
|  |                 (1122, (255, 128)), | ||||||
|  |                 (1122, (0, 128)), | ||||||
|  |                 (1089, (0, 255)), | ||||||
|  |             ] | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |         dst = Image.new("LA", size=(100, 100), color=(0, 255)) | ||||||
|  |         draw = ImageDraw.Draw(dst) | ||||||
|  |         draw.rectangle((0, 33, 100, 66), fill=(0, 128)) | ||||||
|  |         draw.rectangle((0, 67, 100, 100), fill=(0, 0)) | ||||||
|  |         src = Image.new("LA", size=(100, 100), color=(255, 255)) | ||||||
|  |         draw = ImageDraw.Draw(src) | ||||||
|  |         draw.rectangle((33, 0, 66, 100), fill=(255, 128)) | ||||||
|  |         draw.rectangle((67, 0, 100, 100), fill=(255, 0)) | ||||||
|  | 
 | ||||||
|  |         # Act | ||||||
|  |         img = Image.alpha_composite(dst, src) | ||||||
|  | 
 | ||||||
|  |         # Assert | ||||||
|  |         img_colors = img.getcolors() | ||||||
|  |         assert img_colors is not None | ||||||
|  |         assert sorted(img_colors) == expected_colors | ||||||
|  | 
 | ||||||
|     def test_alpha_inplace(self) -> None: |     def test_alpha_inplace(self) -> None: | ||||||
|         src = Image.new("RGBA", (128, 128), "blue") |         src = Image.new("RGBA", (128, 128), "blue") | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3570,9 +3570,8 @@ def alpha_composite(im1: Image, im2: Image) -> Image: | ||||||
|     """ |     """ | ||||||
|     Alpha composite im2 over im1. |     Alpha composite im2 over im1. | ||||||
| 
 | 
 | ||||||
|     :param im1: The first image. Must have mode RGBA. |     :param im1: The first image. Must have mode RGBA or LA. | ||||||
|     :param im2: The second image.  Must have mode RGBA, and the same size as |     :param im2: The second image. Must have the same mode and size as the first image. | ||||||
|        the first image. |  | ||||||
|     :returns: An :py:class:`~PIL.Image.Image` object. |     :returns: An :py:class:`~PIL.Image.Image` object. | ||||||
|     """ |     """ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -25,13 +25,12 @@ ImagingAlphaComposite(Imaging imDst, Imaging imSrc) { | ||||||
|     int x, y; |     int x, y; | ||||||
| 
 | 
 | ||||||
|     /* Check arguments */ |     /* Check arguments */ | ||||||
|     if (!imDst || !imSrc || strcmp(imDst->mode, "RGBA") || |     if (!imDst || !imSrc || | ||||||
|         imDst->type != IMAGING_TYPE_UINT8 || imDst->bands != 4) { |         (strcmp(imDst->mode, "RGBA") && strcmp(imDst->mode, "LA"))) { | ||||||
|         return ImagingError_ModeError(); |         return ImagingError_ModeError(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (strcmp(imDst->mode, imSrc->mode) || imDst->type != imSrc->type || |     if (strcmp(imDst->mode, imSrc->mode) || imDst->xsize != imSrc->xsize || | ||||||
|         imDst->bands != imSrc->bands || imDst->xsize != imSrc->xsize || |  | ||||||
|         imDst->ysize != imSrc->ysize) { |         imDst->ysize != imSrc->ysize) { | ||||||
|         return ImagingError_Mismatch(); |         return ImagingError_Mismatch(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user