mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-30 23:47:27 +03:00 
			
		
		
		
	Merge pull request #4566 from radarhere/text
Consider transparency when pasting text on an RGBA image
This commit is contained in:
		
						commit
						b9a087d482
					
				
							
								
								
									
										
											BIN
										
									
								
								Tests/images/transparent_background_text.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Tests/images/transparent_background_text.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.2 KiB | 
|  | @ -236,7 +236,7 @@ class TestImagingPaste: | |||
|                 [ | ||||
|                     (127, 191, 254, 191), | ||||
|                     (111, 207, 206, 110), | ||||
|                     (127, 254, 127, 0), | ||||
|                     (255, 255, 255, 0) if mode == "RGBA" else (127, 254, 127, 0), | ||||
|                     (207, 207, 239, 239), | ||||
|                     (191, 191, 190, 191), | ||||
|                     (207, 206, 111, 112), | ||||
|  |  | |||
|  | @ -150,6 +150,18 @@ class TestImageFont: | |||
| 
 | ||||
|         assert_image_equal(img_path, img_filelike) | ||||
| 
 | ||||
|     def test_transparent_background(self): | ||||
|         im = Image.new(mode="RGBA", size=(300, 100)) | ||||
|         draw = ImageDraw.Draw(im) | ||||
|         ttf = self.get_font() | ||||
| 
 | ||||
|         txt = "Hello World!" | ||||
|         draw.text((10, 10), txt, font=ttf) | ||||
| 
 | ||||
|         target = "Tests/images/transparent_background_text.png" | ||||
|         with Image.open(target) as target_img: | ||||
|             assert_image_similar(im, target_img, 4.09) | ||||
| 
 | ||||
|     def test_textsize_equal(self): | ||||
|         im = Image.new(mode="RGB", size=(300, 100)) | ||||
|         draw = ImageDraw.Draw(im) | ||||
|  |  | |||
|  | @ -391,9 +391,19 @@ fill_mask_L(Imaging imOut, const UINT8* ink, Imaging imMask, | |||
|             UINT8* mask = (UINT8*) imMask->image[y+sy]+sx; | ||||
|             for (x = 0; x < xsize; x++) { | ||||
|                 for (i = 0; i < pixelsize; i++) { | ||||
|                     *out = BLEND(*mask, *out, ink[i], tmp1); | ||||
|                     out++; | ||||
|                     UINT8 channel_mask = *mask; | ||||
|                     if (( | ||||
|                         strcmp(imOut->mode, "RGBa") == 0 || | ||||
|                         strcmp(imOut->mode, "RGBA") == 0 || | ||||
|                         strcmp(imOut->mode, "La") == 0 || | ||||
|                         strcmp(imOut->mode, "LA") == 0 || | ||||
|                         strcmp(imOut->mode, "PA") == 0 | ||||
|                     ) && i != 3) { | ||||
|                         channel_mask = 255 - (255 - channel_mask) * (1 - (255 - out[3]) / 255); | ||||
|                     } | ||||
|                     out[i] = BLEND(channel_mask, out[i], ink[i], tmp1); | ||||
|                 } | ||||
|                 out += pixelsize; | ||||
|                 mask++; | ||||
|             } | ||||
|         } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user