mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 07:57:27 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from PIL import Image
 | |
| 
 | |
| from .helper import (
 | |
|     PillowTestCase,
 | |
|     assert_image_equal,
 | |
|     assert_image_similar,
 | |
|     fromstring,
 | |
|     hopper,
 | |
|     tostring,
 | |
| )
 | |
| 
 | |
| 
 | |
| class TestImageThumbnail(PillowTestCase):
 | |
|     def test_sanity(self):
 | |
|         im = hopper()
 | |
|         self.assertIsNone(im.thumbnail((100, 100)))
 | |
| 
 | |
|         self.assertEqual(im.size, (100, 100))
 | |
| 
 | |
|     def test_aspect(self):
 | |
|         im = Image.new("L", (128, 128))
 | |
|         im.thumbnail((100, 100))
 | |
|         self.assertEqual(im.size, (100, 100))
 | |
| 
 | |
|         im = Image.new("L", (128, 256))
 | |
|         im.thumbnail((100, 100))
 | |
|         self.assertEqual(im.size, (50, 100))
 | |
| 
 | |
|         im = Image.new("L", (128, 256))
 | |
|         im.thumbnail((50, 100))
 | |
|         self.assertEqual(im.size, (50, 100))
 | |
| 
 | |
|         im = Image.new("L", (256, 128))
 | |
|         im.thumbnail((100, 100))
 | |
|         self.assertEqual(im.size, (100, 50))
 | |
| 
 | |
|         im = Image.new("L", (256, 128))
 | |
|         im.thumbnail((100, 50))
 | |
|         self.assertEqual(im.size, (100, 50))
 | |
| 
 | |
|         im = Image.new("L", (128, 128))
 | |
|         im.thumbnail((100, 100))
 | |
|         self.assertEqual(im.size, (100, 100))
 | |
| 
 | |
|         im = Image.new("L", (256, 162))  # ratio is 1.5802469136
 | |
|         im.thumbnail((33, 33))
 | |
|         self.assertEqual(im.size, (33, 21))  # ratio is 1.5714285714
 | |
| 
 | |
|         im = Image.new("L", (162, 256))  # ratio is 0.6328125
 | |
|         im.thumbnail((33, 33))
 | |
|         self.assertEqual(im.size, (21, 33))  # ratio is 0.6363636364
 | |
| 
 | |
|     def test_float(self):
 | |
|         im = Image.new("L", (128, 128))
 | |
|         im.thumbnail((99.9, 99.9))
 | |
|         self.assertEqual(im.size, (100, 100))
 | |
| 
 | |
|     def test_no_resize(self):
 | |
|         # Check that draft() can resize the image to the destination size
 | |
|         with Image.open("Tests/images/hopper.jpg") as im:
 | |
|             im.draft(None, (64, 64))
 | |
|             self.assertEqual(im.size, (64, 64))
 | |
| 
 | |
|         # Test thumbnail(), where only draft() is necessary to resize the image
 | |
|         with Image.open("Tests/images/hopper.jpg") as im:
 | |
|             im.thumbnail((64, 64))
 | |
|             self.assertEqual(im.size, (64, 64))
 | |
| 
 | |
|     def test_DCT_scaling_edges(self):
 | |
|         # Make an image with red borders and size (N * 8) + 1 to cross DCT grid
 | |
|         im = Image.new("RGB", (257, 257), "red")
 | |
|         im.paste(Image.new("RGB", (235, 235)), (11, 11))
 | |
| 
 | |
|         thumb = fromstring(tostring(im, "JPEG", quality=99, subsampling=0))
 | |
|         # small reducing_gap to amplify the effect
 | |
|         thumb.thumbnail((32, 32), Image.BICUBIC, reducing_gap=1.0)
 | |
| 
 | |
|         ref = im.resize((32, 32), Image.BICUBIC)
 | |
|         # This is still JPEG, some error is present. Without the fix it is 11.5
 | |
|         assert_image_similar(thumb, ref, 1.5)
 | |
| 
 | |
|     def test_reducing_gap_values(self):
 | |
|         im = hopper()
 | |
|         im.thumbnail((18, 18), Image.BICUBIC)
 | |
| 
 | |
|         ref = hopper()
 | |
|         ref.thumbnail((18, 18), Image.BICUBIC, reducing_gap=2.0)
 | |
|         # reducing_gap=2.0 should be the default
 | |
|         assert_image_equal(ref, im)
 | |
| 
 | |
|         ref = hopper()
 | |
|         ref.thumbnail((18, 18), Image.BICUBIC, reducing_gap=None)
 | |
|         with self.assertRaises(AssertionError):
 | |
|             assert_image_equal(ref, im)
 | |
| 
 | |
|         assert_image_similar(ref, im, 3.5)
 | |
| 
 | |
|     def test_reducing_gap_for_DCT_scaling(self):
 | |
|         with Image.open("Tests/images/hopper.jpg") as ref:
 | |
|             # thumbnail should call draft with reducing_gap scale
 | |
|             ref.draft(None, (18 * 3, 18 * 3))
 | |
|             ref = ref.resize((18, 18), Image.BICUBIC)
 | |
| 
 | |
|             with Image.open("Tests/images/hopper.jpg") as im:
 | |
|                 im.thumbnail((18, 18), Image.BICUBIC, reducing_gap=3.0)
 | |
| 
 | |
|                 assert_image_equal(ref, im)
 |