Python PIL简单渐变和类型错误:需要整数

Python PIL简单渐变和类型错误:需要整数,python,python-imaging-library,Python,Python Imaging Library,我已经看到了,但是它没有回答我的问题,因为它没有使用numpy。考虑这个例子: import Image import math img = Image.new('L', (100, 50), 'white') a = 0.1 # factor for x in xrange(img.size[0]): for y in xrange(img.size[1]): # val: 0 to 255; 255/2 = 127.5; val = int( 127.5*math.si

我已经看到了,但是它没有回答我的问题,因为它没有使用numpy。考虑这个例子:

import Image
import math

img = Image.new('L', (100, 50), 'white')
a = 0.1 # factor
for x in xrange(img.size[0]):
  for y in xrange(img.size[1]):
    # val: 0 to 255; 255/2 = 127.5;
    val = int( 127.5*math.sin(a*y) + 127.5 )
    print x, y, val, type(x), type(y), type(val)
    img.putpixel((x, y), (val, val, val))
img.save('singrad.png', 'png')
这在以下情况下失败:

$ python test.py 
0 0 127 <type 'int'> <type 'int'> <type 'int'>
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    img.putpixel((x, y), (val, val, val))
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1267, in putpixel
    return self.im.putpixel(xy, value)
TypeError: an integer is required
我不知道需要什么整数,-假设putpixel的所有参数都报告为


如何使其工作?

您正在使用模式“L”单个8位像素值创建图像,因此您输入的值必须是int<255。您正在放置需要“RGB”模式的元组。我认为将代码更改为img.putpixlx,y,val可以解决这个问题。

您正在创建一个具有模式“L”单个8位像素值的图像,因此您输入的值必须是int<255。您正在放置需要“RGB”模式的元组。我认为将代码更改为img.putpixlx,y,val可以解决这个问题。

啊,明白了:图像类型“L”是灰度/单色的,所以它需要每个像素一个整数值,而不是RGB元组:

img.putpixel((x, y), val)
如果图像类型为'RGB',即image.new'RGB',…,则该命令作为书面命令起作用:

img.putpixel((x, y), (val, val, val))
啊,明白了:图像类型“L”是灰度/单色的,所以每像素需要一个整数值,而不是RGB元组:

img.putpixel((x, y), val)
如果图像类型为'RGB',即image.new'RGB',…,则该命令作为书面命令起作用:

img.putpixel((x, y), (val, val, val))

谢谢你,@Bernhard——事实上,这就是问题所在。。。干杯谢谢你,@Bernhard——事实上,这就是问题所在。。。干杯