Генерация случайного тестового изображения для Django тестов - PullRequest
0 голосов
/ 18 июня 2020

У меня есть функция для создания тестовых изображений для 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

Есть идеи?

Спасибо!

...