Pillow/PIL Python - 仅将第一行写入图像
Pillow/PIL Python - only first row written to image
我正在尝试创建一个随机生成游戏地图的 Perlin 噪声应用程序。我正在尝试写入新图像,但是只写入了第一行。
这是我创建的一个存在同样问题的存根:
from PIL import Image
from random import randint
height = 25
width = 25
z = randint(-1000, 1000) / 100
img = Image.new('RGBA', (width, height), color=(255, 255, 255, 255))
for y in range(height):
img.putdata([(0,255,0,255) for x in range(width)]) # Logic error occurs on this line
img.save("location.png", "PNG")
这次我犯了什么愚蠢的错误?
好吧,您需要一个填满整个图像的序列。 putdata
每次调用时都从 0,0 开始,因此每次都只是从 0,0 写入到序列的末尾。通过执行以下操作获得足够长的序列以填充整个图像:
height = 25
width = 25
data = [255 * randint(-1000, 1000) / 100 for x in range(width * height)]
然后你可以像这样使用putdata:
img = Image.new('RGBA', (width, height), color=(255, 255, 255, 255))
img.putdata(data)
img.save("location.png", "PNG")
您必须通过以下方式提供像素信息:
img.putdata([(0,255,0, 255) for x in range(width) for y in range(height)])
您提供信息的方式将创建 25 个子列表,每个子列表包含 25 个元素,而该函数需要 625 个元素而没有任何子列表。
我正在尝试创建一个随机生成游戏地图的 Perlin 噪声应用程序。我正在尝试写入新图像,但是只写入了第一行。
这是我创建的一个存在同样问题的存根:
from PIL import Image
from random import randint
height = 25
width = 25
z = randint(-1000, 1000) / 100
img = Image.new('RGBA', (width, height), color=(255, 255, 255, 255))
for y in range(height):
img.putdata([(0,255,0,255) for x in range(width)]) # Logic error occurs on this line
img.save("location.png", "PNG")
这次我犯了什么愚蠢的错误?
好吧,您需要一个填满整个图像的序列。 putdata
每次调用时都从 0,0 开始,因此每次都只是从 0,0 写入到序列的末尾。通过执行以下操作获得足够长的序列以填充整个图像:
height = 25
width = 25
data = [255 * randint(-1000, 1000) / 100 for x in range(width * height)]
然后你可以像这样使用putdata:
img = Image.new('RGBA', (width, height), color=(255, 255, 255, 255))
img.putdata(data)
img.save("location.png", "PNG")
您必须通过以下方式提供像素信息:
img.putdata([(0,255,0, 255) for x in range(width) for y in range(height)])
您提供信息的方式将创建 25 个子列表,每个子列表包含 25 个元素,而该函数需要 625 个元素而没有任何子列表。