mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-01 00:17:27 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			117 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from tester import *
 | |
| 
 | |
| from PIL import Image
 | |
| 
 | |
| def test_extent():
 | |
|     im = lena('RGB')
 | |
|     (w,h) = im.size
 | |
|     transformed = im.transform(im.size, Image.EXTENT,
 | |
|                                (0,0,
 | |
|                                 w//2,h//2), # ul -> lr
 | |
|                                Image.BILINEAR)
 | |
| 
 | |
|     
 | |
|     scaled = im.resize((w*2, h*2), Image.BILINEAR).crop((0,0,w,h))
 | |
|     
 | |
|     assert_image_similar(transformed, scaled, 10) # undone -- precision?
 | |
| 
 | |
| def test_quad():
 | |
|     # one simple quad transform, equivalent to scale & crop upper left quad
 | |
|     im = lena('RGB')
 | |
|     (w,h) = im.size
 | |
|     transformed = im.transform(im.size, Image.QUAD,
 | |
|                                (0,0,0,h//2,
 | |
|                                 w//2,h//2,w//2,0), # ul -> ccw around quad
 | |
|                                Image.BILINEAR)
 | |
|     
 | |
|     scaled = im.resize((w*2, h*2), Image.BILINEAR).crop((0,0,w,h))
 | |
|     
 | |
|     assert_image_equal(transformed, scaled)
 | |
| 
 | |
| def test_mesh():
 | |
|     # this should be a checkerboard of halfsized lenas in ul, lr
 | |
|     im = lena('RGBA')
 | |
|     (w,h) = im.size
 | |
|     transformed = im.transform(im.size, Image.MESH,
 | |
|                                [((0,0,w//2,h//2), # box
 | |
|                                 (0,0,0,h,
 | |
|                                  w,h,w,0)), # ul -> ccw around quad
 | |
|                                 ((w//2,h//2,w,h), # box
 | |
|                                 (0,0,0,h,
 | |
|                                  w,h,w,0))], # ul -> ccw around quad
 | |
|                                Image.BILINEAR)
 | |
| 
 | |
|     #transformed.save('transformed.png')
 | |
| 
 | |
|     scaled = im.resize((w//2, h//2), Image.BILINEAR)
 | |
| 
 | |
|     checker = Image.new('RGBA', im.size)
 | |
|     checker.paste(scaled, (0,0))
 | |
|     checker.paste(scaled, (w//2,h//2))
 | |
|         
 | |
|     assert_image_equal(transformed, checker) 
 | |
| 
 | |
|     # now, check to see that the extra area is (0,0,0,0)
 | |
|     blank = Image.new('RGBA', (w//2,h//2), (0,0,0,0))
 | |
| 
 | |
|     assert_image_equal(blank, transformed.crop((w//2,0,w,h//2)))
 | |
|     assert_image_equal(blank, transformed.crop((0,h//2,w//2,h)))
 | |
| 
 | |
| def _test_alpha_premult(op):
 | |
|      # create image with half white, half black, with the black half transparent.
 | |
|     # do op, 
 | |
|     # there should be no darkness in the white section.
 | |
|     im = Image.new('RGBA', (10,10), (0,0,0,0));
 | |
|     im2 = Image.new('RGBA', (5,10), (255,255,255,255));
 | |
|     im.paste(im2, (0,0))
 | |
|     
 | |
|     im = op(im, (40,10))
 | |
|     im_background = Image.new('RGB', (40,10), (255,255,255))
 | |
|     im_background.paste(im, (0,0), im)
 | |
|     
 | |
|     hist = im_background.histogram()
 | |
|     assert_equal(40*10, hist[-1])
 | |
| 
 | |
|     
 | |
| def test_alpha_premult_resize():
 | |
| 
 | |
|     def op (im, sz):
 | |
|         return im.resize(sz, Image.LINEAR)
 | |
|     
 | |
|     _test_alpha_premult(op)
 | |
|     
 | |
| def test_alpha_premult_transform():
 | |
|     
 | |
|     def op(im, sz):
 | |
|         (w,h) = im.size
 | |
|         return im.transform(sz, Image.EXTENT,
 | |
|                             (0,0,
 | |
|                              w,h), 
 | |
|                             Image.BILINEAR)
 | |
| 
 | |
|     _test_alpha_premult(op)
 | |
| 
 | |
| 
 | |
| def test_blank_fill():
 | |
|     # attempting to hit
 | |
|     # https://github.com/python-imaging/Pillow/issues/254 reported
 | |
|     #
 | |
|     # issue is that transforms with transparent overflow area
 | |
|     # contained junk from previous images, especially on systems with
 | |
|     # constrained memory. So, attempt to fill up memory with a
 | |
|     # pattern, free it, and then run the mesh test again. Using a 1Mp
 | |
|     # image with 4 bands, for 4 megs of data allocated, x 64. OMM (64
 | |
|     # bit 12.04 VM with 512 megs available, this fails with Pillow <
 | |
|     # a0eaf06cc5f62a6fb6de556989ac1014ff3348ea
 | |
|     #
 | |
|     # Running by default, but I'd totally understand not doing it in
 | |
|     # the future
 | |
|     
 | |
|     foo = [Image.new('RGBA',(1024,1024), (a,a,a,a))
 | |
|              for a in range(1,65)]   
 | |
| 
 | |
|     # Yeah. Watch some JIT optimize this out. 
 | |
|     foo = None
 | |
| 
 | |
|     test_mesh()
 |