我想要使用图像处理一个想法,但是我不能让它正确地写出像素值,它总是只是灰色,带有一些像人工制品一样的图案,无论我怎样尝试,人工制品都会改变但是图像保持灰色。
这是我的基本代码:
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(将其变为浅灰色但就是这样),逗号后面没有逗号,但绝对没有任何效果。
为了记录,我不想只存储一种颜色,我只是这样做才能让它正常工作。
答案 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")
结果:
替代解决方案:
如果您的数据尚未采用该格式,则使用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")