Я хочу изменить размер изображения с помощью функции. Я хочу сделать это через функцию, потому что я хочу, чтобы она была модульной. Однако я получаю следующую ошибку:
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")
Вы используете метод resize()
неправильно. Синтаксис
resize(size, resample=0)
где size
— кортеж (width, height)
. Вы указываете высоту в качестве второго аргумента, фильтра передискретизации. Улучшенная версия
logo = logo.resize((width/resize_rand, height/resize_rand))
Могу ли я указать на еще один риск вашего кода: random.randint(0, 3)
вернет случайное число от 0 до 3 включительно - поэтому вы рискуете ошибкой деления на ноль, когда вы делите на нее ширину и высоту.