1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
from __future__ import absolute_import, division, print_function
import unittest
import six
from PIL import Image
import imagehash
from .utils import TestImageHash
class TestBasic(TestImageHash):
def setUp(self):
self.image = self.get_data_image()
self.func = imagehash.whash
def test_whash(self):
self.check_hash_algorithm(self.func, self.image)
def test_whash_length(self):
self.check_hash_length(self.func, self.image, sizes=[2, 4, 8, 16, 32, 64])
def test_whash_stored(self):
self.check_hash_stored(self.func, self.image, sizes=[2, 4, 8, 16, 32, 64])
class Test(unittest.TestCase):
def setUp(self):
self.image = self._get_white_image()
def _get_white_image(self, size=None):
if size is None:
size = (512, 512)
return Image.new('RGB', size, 'white')
def test_hash_size_2power(self):
for hash_size in [4, 8, 16]:
hash = imagehash.whash(self.image, hash_size=hash_size)
self.assertEqual(hash.hash.size, hash_size**2)
def test_hash_size_for_small_images(self):
default_hash_size = 8
for image_size in [(1, 25), (7, 5)]:
image = self._get_white_image(image_size)
hash = imagehash.whash(image)
self.assertEqual(hash.hash.size, default_hash_size**2)
def test_hash_size_not_2power(self):
emsg = 'hash_size is not power of 2'
for hash_size in [3, 7, 12]:
with six.assertRaisesRegex(self, AssertionError, emsg):
imagehash.whash(self.image, hash_size=hash_size)
def test_hash_size_is_less_than_image_scale(self):
image = self._get_white_image((120, 200))
emsg = 'hash_size in a wrong range'
for hash_size in [128, 512]:
with six.assertRaisesRegex(self, AssertionError, emsg):
imagehash.whash(image, hash_size=hash_size, image_scale=64)
def test_custom_hash_size_and_scale(self):
hash_size = 16
hash = imagehash.whash(self.image, hash_size=hash_size, image_scale=64)
self.assertEqual(hash.hash.size, hash_size**2)
def test_hash_size_more_than_scale(self):
emsg = 'hash_size in a wrong range'
with six.assertRaisesRegex(self, AssertionError, emsg):
imagehash.whash(self.image, hash_size=32, image_scale=16)
def test_image_scale_not_2power(self):
emsg = 'image_scale is not power of 2'
for image_scale in [4, 8, 16]:
with six.assertRaisesRegex(self, AssertionError, emsg):
imagehash.whash(self.image, image_scale=image_scale + 1)
if __name__ == '__main__':
unittest.main()
|