ValueError при попытке использовать функцию для изменения размера изображения

Я хочу изменить размер изображения с помощью функции. Я хочу сделать это через функцию, потому что я хочу, чтобы она была модульной. Однако я получаю следующую ошибку:

Traceback (most recent call last):
  File "/home/onur/Desktop/composite-testing.py", line 30, in <module>
    brand_logo = random_resize(brand_logo)
  File "/home/onur/Desktop/composite-testing.py", line 12, in random_resize
    logo = logo.resize(width/resize_rand, height/resize_rand)
  File "/usr/lib/python3/dist-packages/PIL/Image.py", line 1833, in resize
    raise ValueError(
ValueError: Unknown resampling filter (183.0). Use Image.NEAREST (0), Image.LANCZOS (1), Image.BILINEAR (2), Image.BICUBIC (3), Image.BOX (4) or Image.HAMMING (5)`

Это моя функция. Я хочу, чтобы изменение размера было случайным, но сохраняло масштаб:

def random_resize(logo):
    resize_rand = random.randint(0, 3)
    width, height = logo.size
    logo = logo.resize(width/resize_rand, height/resize_rand)
    return logo

И вот как я использую это в коде:

for background in os.listdir(current_dir + '/composite-testing/'):
    for logo_image in os.listdir(current_dir + '/logos/'):

        epoch = str(math.ceil(time.time()))

        if not os.path.exists(current_dir + '/result/'):
            os.mkdir(current_dir + '/result/')

        brand_logo = Image.open(current_dir + '/logos/' + logo_image, 'r').convert('RGBA')

        logo_width, logo_height = brand_logo.size
        brand_logo = random_rotate(brand_logo)
        --> brand_logo = random_resize(brand_logo)

        gameplay = Image.open(current_dir + '/composite-testing/' + background, 'r').convert('RGBA')
        gameplay_width, gameplay_height = gameplay.size

        logo_x = math.floor((gameplay_width / 2) - (logo_width / 2))
        logo_y = math.floor((gameplay_height / 2) - (logo_height / 2))

        text_img = Image.new('RGBA', (gameplay_width, gameplay_height), (0, 0, 0, 0))

        text_img.paste(gameplay, (0, 0))
        text_img.paste(brand_logo, (logo_x, logo_y), mask=brand_logo)
        img_draw = ImageDraw.Draw(text_img)
        img_draw.rectangle(((logo_x, logo_y), (logo_x + logo_width, logo_y + logo_height)), outline='Red')
        text_img.save(current_dir + '/result/' + epoch + '.png', format = "png")
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
147
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете метод resize() неправильно. Синтаксис

resize(size, resample=0)

где size — кортеж (width, height). Вы указываете высоту в качестве второго аргумента, фильтра передискретизации. Улучшенная версия

logo = logo.resize((width/resize_rand, height/resize_rand))

Могу ли я указать на еще один риск вашего кода: random.randint(0, 3) вернет случайное число от 0 до 3 включительно - поэтому вы рискуете ошибкой деления на ноль, когда вы делите на нее ширину и высоту.

Другие вопросы по теме