尝试使用函数调整图像大小时出现 ValueError

ValueError when trying to use a function to resize an image

我想使用函数调整图像大小。我想通过一个函数来完成,因为我希望它是模块化的。但是,我收到以下错误:

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) 将 return 一个从 0 到 3 的随机数 - 所以当您将宽度和高度。