mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-26 17:24:31 +03:00
update tests, add comments
This commit is contained in:
parent
7ea0611af4
commit
1477fbc07a
|
@ -1,3 +1,5 @@
|
|||
from __future__ import division
|
||||
|
||||
from helper import unittest, PillowTestCase, hopper
|
||||
from PIL import Image, ImageDraw, ImageMode
|
||||
|
||||
|
@ -348,7 +350,7 @@ class CoreResampleCoefficientsTest(PillowTestCase):
|
|||
self.assertEqual(histogram[0x100 * 3 + 0xff], 0x10000) # fourth channel
|
||||
|
||||
|
||||
class CoreResampleRoiTest(PillowTestCase):
|
||||
class CoreResampleBoxTest(PillowTestCase):
|
||||
def test_wrong_arguments(self):
|
||||
im = hopper()
|
||||
for resample in (Image.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING,
|
||||
|
@ -378,38 +380,52 @@ class CoreResampleRoiTest(PillowTestCase):
|
|||
with self.assertRaisesRegexp(ValueError, "can't exceed"):
|
||||
im.resize((32, 32), resample, (0, 0, im.width, im.height + 1))
|
||||
|
||||
def resize_tiled(self, im, dst_size, xtiles, ytiles):
|
||||
def split_range(size, tiles):
|
||||
scale = size / tiles
|
||||
for i in range(tiles):
|
||||
yield (int(round(scale * i)), int(round(scale * (i + 1))))
|
||||
|
||||
tiled = Image.new(im.mode, dst_size)
|
||||
scale = (im.size[0] / tiled.size[0], im.size[1] / tiled.size[1])
|
||||
|
||||
for y0, y1 in split_range(dst_size[1], ytiles):
|
||||
for x0, x1 in split_range(dst_size[0], xtiles):
|
||||
box = (x0 * scale[0], y0 * scale[1],
|
||||
x1 * scale[0], y1 * scale[1])
|
||||
tile = im.resize((x1 - x0, y1 - y0), Image.BICUBIC, box)
|
||||
tiled.paste(tile, (x0, y0))
|
||||
return tiled
|
||||
|
||||
def test_tiles(self):
|
||||
im = hopper()
|
||||
# should not be fractional
|
||||
size = (28, 14)
|
||||
sc = (3, 4) # scale
|
||||
o = (5, 10) # offset
|
||||
# fixed size divisible by scale
|
||||
im = im.resize((im.width // sc[0] * sc[0],
|
||||
im.height // sc[1] * sc[1]))
|
||||
im = Image.open("Tests/images/flower.jpg")
|
||||
assert im.size == (480, 360)
|
||||
dst_size = (251, 188)
|
||||
reference = im.resize(dst_size, Image.BICUBIC)
|
||||
|
||||
for resample in (Image.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING,
|
||||
Image.BICUBIC, Image.LANCZOS):
|
||||
box = (o[0] * sc[0], o[1] * sc[1],
|
||||
(o[0] + size[0]) * sc[0], (o[1] + size[1]) * sc[1])
|
||||
tile1 = im.resize(size, resample, box)
|
||||
big_size = (im.width // sc[0], im.height // sc[1])
|
||||
tile2 = im.resize(big_size, resample)\
|
||||
.crop(o + (o[0] + size[0], o[1] + size[1]))
|
||||
|
||||
self.assert_image_equal(tile1, tile2)
|
||||
for tiles in [(1, 1), (3, 3), (9, 7), (100, 100)]:
|
||||
tiled = self.resize_tiled(im, dst_size, *tiles)
|
||||
self.assert_image_similar(reference, tiled, 0.01)
|
||||
|
||||
def test_subsample(self):
|
||||
im = hopper()
|
||||
reference = im.crop((0, 0, 125, 125)).resize((26, 26), Image.BICUBIC)
|
||||
supersampled = im.resize((32, 32), Image.BOX)
|
||||
without_box = supersampled.resize((26, 26), Image.BICUBIC)
|
||||
with_box = supersampled.resize((26, 26), Image.BICUBIC, (0, 0, 31.25, 31.25))
|
||||
# This test shows advantages of the subpixel resizing
|
||||
# after supersampling (e.g. during JPEG decoding).
|
||||
im = Image.open("Tests/images/flower.jpg")
|
||||
assert im.size == (480, 360)
|
||||
dst_size = (48, 36)
|
||||
# Reference is cropped image resized to destination
|
||||
reference = im.crop((0, 0, 473, 353)).resize(dst_size, Image.BICUBIC)
|
||||
# Image.BOX emulates supersampling (480 / 8 = 60, 360 / 8 = 45)
|
||||
supersampled = im.resize((60, 45), Image.BOX)
|
||||
|
||||
self.assert_image_similar(reference, with_box, 12)
|
||||
with_box = supersampled.resize(dst_size, Image.BICUBIC,
|
||||
(0, 0, 59.125, 44.125))
|
||||
without_box = supersampled.resize(dst_size, Image.BICUBIC)
|
||||
|
||||
with self.assertRaisesRegexp(AssertionError, "difference 3\d\."):
|
||||
self.assert_image_similar(reference, without_box, 10)
|
||||
# error with box should be much smaller than without
|
||||
self.assert_image_similar(reference, with_box, 6)
|
||||
with self.assertRaisesRegexp(AssertionError, "difference 29\."):
|
||||
self.assert_image_similar(reference, without_box, 5)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
Loading…
Reference in New Issue
Block a user