Python PIL简单渐变和类型错误:需要整数
我已经看到了,但是它没有回答我的问题,因为它没有使用numpy。考虑这个例子: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
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——事实上,这就是问题所在。。。干杯