创建图像的缩略图失败,并出现TypeError:'int'对象不可下标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建图像的缩略图失败,并出现TypeError:'int'对象不可下标相关的知识,希望对你有一定的参考价值。

我正在尝试使用PIL模块创建背景对象,但是有一个我不理解的错误。代码:

from PIL import Image
class background():
    def __init__(self, width, height, value):
        img = Image.open('new.png')
        img_new = img.thumbnail(width, height)
        for x in range(width):
            for y in range(height):
                img_new.putpixel(x, y, value)
        img_new.show()

bg = background(200, 200, 1)

错误:

Traceback (most recent call last):
  File "...filename.py", line 11, in <module>
    bg = background(200, 200, 1)
  File "...filename.py", line 5, in __init__.py
    img_new = img.thumbnail(width, height)
  File "...Python38-32libsite-packagesPILImage.py", line 2205, in thumbnail
    if x > size[0]:
TypeError: 'int' object is not subscriptable

这是什么意思?

答案

Image.thumbnail() method需要一个Image.thumbnail()参数,它是宽度和高度的元组

size

或者,也许更清晰:

img.thumbnail((width, height))

该方法还带有第二个参数size = (width, height) img.thumbnail(size) ;您传入resample作为大小,传入width作为height参数。通过传递resample作为大小,您会得到错误。当该方法尝试为width值建立索引(期望一个元组)时,将抛出异常,因为无法对整数进行索引。

您在调用width时遇到类似的错误,该位置也是一个元组:

Image.putpixel()

请注意,您确实不需要打开现有图像。如果您想创建色彩均匀的空白图像,只需使用Image.putpixel()

img_new.putpixel((x, y), value)

您需要在Image.new()这里;假设您的Image.new()是单个整数值,我选择了class background(): def __init__(self, width, height, value): img_new = Image.new("I", (width, height), value) # ... do something with the new, uniformly coloured image. ,其中像素由32位带符号整数表示。上面创建的图像大小正确,并且所有像素均设置为pick an image mode

以上是关于创建图像的缩略图失败,并出现TypeError:'int'对象不可下标的主要内容,如果未能解决你的问题,请参考以下文章

创建缩略图失败 redmine

带有 ALAsset 缩略图的低清晰度

为啥我的元类实现失败并出现关于无法创建 NoneType 实例的 TypeError

上传脚本,裁剪/剪切缩略图

Yii2 - Imagine - 创建缩略图并保持透明背景

动态创建图像缩略图(使用 django)