У меня есть функция для создания тестовых изображений для Django тестов:
def generate_test_image() -> SimpleUploadedFile:
"""
Generates simple test image. This seem work with all image validators.
"""
small_gif = (
b'\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x00\x00\x00\x21\xf9\x04'
b'\x01\x0a\x00\x01\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02'
b'\x02\x4c\x01\x00\x3b'
)
return SimpleUploadedFile('small.gif', small_gif, content_type='image/gif')
И у меня есть еще одна функция, основанная на библиотеке imagehash
, которая создает изображение ha sh для изображений, чтобы сохранить его в базе данных и не позволять загружать одно изображение дважды.
def create_image_hash(image: BinaryIO, raise_errors: bool = False) -> Optional[imagehash.ImageHash]:
"""
Creates image hash on image file.
"""
try:
image_hash = imagehash.average_hash(PIL.Image.open(image))
except PIL.UnidentifiedImageError as err:
if raise_errors:
raise err from err
return None
return image_hash
Эта функция генерирует ha sh для тестового изображения - 0000000000000000
Есть ли способ сгенерировать достаточно другое тестовое изображение иметь другое изображение ha sh на этих изображениях?
Я пробовал следующее:
def generate_random_test_image(size: int = 150) -> SimpleUploadedFile:
"""
Generates random test image.
"""
base = bytearray(
b'\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x00\x00\x00\x21\xf9\x04'
b'\x01\x0a\x00\x01\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02'
b'\x02\x4c\x01\x00\x3b'
)
random_part = bytearray(random.getrandbits(8) for _ in range(size))
return SimpleUploadedFile('small.gif', base + random_part, content_type='image/gif')
Но независимо от размера он, наконец, делает то же изображение ha sh - 00000000000000
Есть идеи?
Спасибо!