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

Pet*_*ter 10 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")
Run Code Online (Sandbox Code Playgroud)

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

为了记录,我不想只存储一种颜色,我只是这样做,以便最初使它工作.

Kev*_*vin 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")
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述


替代方案:

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")
Run Code Online (Sandbox Code Playgroud)