使用Python Imaging Library(PIL)通过输入像素值创建图像

时间:2014-12-12 14:23:45

标签: python python-imaging-library

我想要使用图像处理一个想法,但是我不能让它正确地写出像素值,它总是只是灰色,带有一些像人工制品一样的图案,无论我怎样尝试,人工制品都会改变但是图像保持灰色。

这是我的基本代码:

from PIL import Image
data = ""
for i in range( 128**2 ):
    data += "(255,0,0),"
im = Image.fromstring("RGB", (128,128), data)
im.save("test.png", "PNG")

http://effbot.org/imagingbook/pil-index.htm中没有关于如何格式化data的信息,所以我尝试使用0-1,0-255,00000000-111111111(二进制),方括号,方括号,否括号,alpha的额外值以及将RGB更改为RGBA(将其变为浅灰色但就是这样),逗号后面没有逗号,但绝对没有任何效果。

为了记录,我不想只存储一种颜色,我只是这样做才能让它正常工作。

1 个答案:

答案 0 :(得分:13)

格式字符串的排列方式如下:

“RGBRGBRGBRGB ...”

其中R是表示特定像素的红色值的单个字符,对于G和B是相同的。

“但255是三个字符长,我怎么能把它变成一个字符?”你问。使用chr将您的数字转换为字节值。

from PIL import Image
data = ""
for i in range( 128**2 ):
    data += chr(255) + chr(0) + chr(0)
im = Image.fromstring("RGB", (128,128), data)
im.save("test.png", "PNG")

结果:

enter image description here


替代解决方案:

如果您的数据尚未采用该格式,则使用fromstring是生成图像的一种相当迂回的方式。相反,请考虑使用Image.load直接操作像素值。然后你就不必做任何字符串转换了。

from PIL import Image

im = Image.new("RGB", (128, 128))
pix = im.load()
for x in range(128):
    for y in range(128):
        pix[x,y] = (255,0,0)

im.save("test.png", "PNG")