用于图像和pil modu的Python循环

2024-09-28 21:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中使用PIL和图像模式。 我想用以下代码创建一个图像:

imagesize = (12,12)
image = Image.new("RGB",imagesize,color=None)

我将使用此函数在图像上放置像素:

.putpixel(xy, color)

颜色在元组列表中。例如:

RGB = [((255, 255, 255),(207, 103, 36),(204, 93, 21),(204, 93, 21),(204, 93, 21), (.......some more RGB tuples.....)]

我需要一个循环,在.putpoixel(xy,color)中:

颜色每增加一步。例如RGB[0],next循环RGB[1]等等。 在这个循环中,x和y对我来说更难。 当y为0时,x从1变为12(图像大小),然后,当x达到image size时,它返回到1到12,但y现在是1。当x和x都达到图像大小的末尾时,循环结束。

有人能帮我吗?我是Python新手。

谨致问候

法瓦拉斯

编辑

p:S-忘了说,因为这是一个学校项目,所以除了img.new、img.show和img.outpixel之外,我不能使用任何方法


Tags: 函数代码图像imagenoneimgnewpil
3条回答

这取决于您想如何放置RGB颜色。例如:

for y in range(12):
  for x in range(12):
    img.putpixel(x, y, RGB[(x + 12*y)%len(RBG)]

将0到N个RBG颜色设置为0到N个像素,0到N个rgb设置为0+N,2N个像素,依此类推。 还有其他选项-随机选择颜色:

import random
...
for y in range(12):
  for x in range(12):
    img.putpixel(x, y, RBG[random.randint(0, len(RGB)-1)]

对这两种情况的优化都作为一项练习来完成。

如果有嵌套循环,i从0到11,j从0到11,那么要增量索引到一维向量,需要得到X[j+i*11]。

>>> for i in range(5):
...   for j in range(5):
...      print j + i*5

将打印0到24。

看到其他更好的方法填充图像的答案,可能有更多的Python的方式做这件事。但这是一般的答案!

注意,这是针对从零开始的变量,而不是从一开始的变量。对于12x12像素的图像,有效的xy范围是从0到11。

好吧,我上面的评论真的应该有个答案。我应该睡一觉。基本上你可以一次把你的像素数据放到图像中。图片的putdata方法接受组成图片像素的元组列表。所以:

img = PIL.Image.new("RGB", (12, 12))
img.show() # see a black image
pixels = [(255,0,0)]*(12*12)
img.putdata(pixels)
img.show() # see a red image

相关问题 更多 >