尝试使用函数调整图像大小时出现 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 的随机数 - 所以当您将宽度和高度。
我想使用函数调整图像大小。我想通过一个函数来完成,因为我希望它是模块化的。但是,我收到以下错误:
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 的随机数 - 所以当您将宽度和高度。