ValueError:图块不能扩展到图像之外

Posted

技术标签:

【中文标题】ValueError:图块不能扩展到图像之外【英文标题】:ValueError: tile cannot extend outside image 【发布时间】:2018-02-20 15:08:44 【问题描述】:

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

【问题讨论】:

我认为没有更简单的方法。只需将代码放入实用程序函数中即可。如果你想隐藏实用功能的混乱,把它放在一个单独的模块中,然后将它导入到你的主程序中。 @unutbu 请随时在答案中分享代码或在编辑部分调整我的代码。 【参考方案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。

【讨论】:

以上是关于ValueError:图块不能扩展到图像之外的主要内容,如果未能解决你的问题,请参考以下文章

绘制图像的傅立叶变换时出现问题。 “ValueError:x 和 y 不能大于 2-D,但具有 (2592,) 和 (2592, 1, 3) 形状”

更新时删除图像数据的流生成器

在android webview中使用apk扩展文件中的图像

ValueError:调用 cross_val_score 时发现未知类别

错误ValueError:尝试使用cross_val_score和线性回归时不支持连续[重复]

Google Maps API V3 - 自定义图块