ValueError:tile无法扩展到图像外部

时间:2018-02-20 15:08:44

标签: python python-3.x image python-imaging-library

我想将我的图像调整为以下比例:重新缩放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

的错误

1 个答案:

答案 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.thumbnailim.resize。由于您可能希望按比例>重新缩放图像。 1,im.resize is the right method在这里使用。