值错误:磁贴不能扩展到imag之外

2024-05-23 15:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: path图像imageimport文件夹sizepilos
1条回答
网友
1楼 · 发布于 2024-05-23 15:31:37

我想没有更简单的方法了。只要把代码放在一个实用函数中,你就万事大吉了。在

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

^{pr2}$

通过展开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。要重新缩放图像,请调用^{}^{}。由于您可能希望按比率>;1重新缩放图像,^{} is the right method在此处使用。在

相关问题 更多 >