我想将我的图像调整为以下比例:重新缩放x0.5,x0.75,x0.9,x1.1 x1.25,x1.5范围内的图像基本上我想要输入的是让我们说0.5,我文件夹中的所有图像都会有一半的尺寸。 请注意,我的图像有不同的大小,是的,我知道如何获取图像的高度和宽度,并将其乘以输入,是的,我已经在这里How do I resize an image using PIL and maintain its aspect ratio?检查了上一个问题,但是有更好的方法吗从那以后呢?
编辑:类似这样的事情:
import os
from PIL import Image
path = path_to_input_images
for filename in os.listdir(path + 'image/'):
im = Image.open(path + 'image/' + filename)
im.size = list(im.size)
im.size[0] = int(float(im.size[0]) * 0.5)
im.size[1] = int(float(im.size[1]) * 0.5)
im.size = tuple(im.size)
im.save(path + 'resized_images'+ filename)
但我收到ValueError: tile cannot extend outside image
答案 0 :(得分:1)
我认为没有更简单的方法。只需将代码放入实用程序功能中即可完成设置。
import os
from PIL import Image
def rescale(im, ratio):
size = [int(x*ratio) for x in im.size]
im = im.resize(size, Image.ANTIALIAS)
return im
def process_dir(path):
image_dir = os.path.join(path, 'image')
for filename in os.listdir(image_dir):
filepath = os.path.join(image_dir, filename)
im = Image.open(filepath)
im = rescale(im, 0.5)
im.save(path_to_output)
process_dir(path_to_input_images)
我无法重现您所看到的ValueError
,但我可以制作SystemError
:
SystemError: tile cannot extend outside image
通过展开 im.size
,然后尝试将其保存到新文件中:
In [78]: im = Image.open(FILENAME)
In [79]: im.size
Out[79]: (250, 250)
In [82]: im.size = (500, 500)
In [83]: im.save('/tmp/out.png')
SystemError: tile cannot extend outside image
请勿尝试重新分配im.size
。要重新缩放图像,请致电im.thumbnail
或im.resize
。由于您可能希望按比例>重新缩放图像。 1,im.resize
is the right method在这里使用。