Skip to main content
 首页 » 编程设计

python之在 PIL 中创建棋盘

2025年05月04日22softidea

背景

我一直在尝试在 PIL 模块中创建一个棋盘,我得到了前两行的一般模式,但无法弄清楚如何将其应用到整个棋盘。如您所见,我创建了一个图像:

from PIL import Image 
 
img = Image.new("RGB", (15,15), "white") # create a new 15x15 image 
pixels = img.load() # create the pixel map 

我对前两行的解决方案

注意 - 我仍在学习 Python,因此这段代码可能看起来效率很低,但请随时提出改进建议。

第二行:

代码:

black_2 = [] 
for i in range(img.size[0]): 
    if i % 2 == 0: 
        black_2.append(i) 

这为我提供了放置黑色像素的所有水平索引位置。因此,对于我创建的 15x15 板,它返回 [0, 2, 4, 6, 8, 10, 12, 14]

第一行:

代码:

然后我使用第二行计算出第一行的水平索引位置

black_1 = [i-1 for i in black_2 if i > 0] 
if img.size[0] % 2 == 0: # 'that' if statement 
    black_1.append(img.size[0]-1) 

对于我创建的 15x15 像素板,它返回 [1, 3, 5, 7, 9, 11, 13]。我创建了那个 if 语句,因为我意识到如果板的长度是偶数,最后一个黑色像素不会显示,这似乎可以解决这个问题。

将像素更改为黑色:

# hardcoded to check patterns 
for i in black_1: 
    pixels[i,0] = (0,0,0) 
 
for k in black_2: 
    pixels[k,1] = (0,0,0) 
 
img.show() 

如何将这两种模式应用于电路板的其余部分,而不管其大小如何?

我怀疑需要一个 for var in range() 循环,但我不确定它会如何变化取决于高度(img.size[1]) 的棋盘是奇数还是偶数。

到目前为止的总体模式:

black_1 适用于第一行

black_2 适用于第二行

请您参考如下方法:

一个棋盘有 64 个方格而不是 256 个。首先您需要 (8,8) 然后您可以使用双 for 循环为所有 8 行分配颜色。

任何尺寸的一般示例

from PIL import Image 
 
size = 16 
img = Image.new("RGB", (size,size), "white") # create a new 15x15 image 
pixels = img.load() # create the pixel map 
 
black_2 = [] 
for i in range(img.size[0]): 
    if i % 2 == 0: 
        black_2.append(i) 
 
black_1 = [i-1 for i in black_2 if i > 0] 
if img.size[0] % 2 == 0: # 'that' if statement 
    black_1.append(img.size[0]-1) 
 
 
for i in black_1: 
    for j in range(0, size, 2): 
        pixels[i,j] = (0,0,0) 
 
for k in black_2: 
    for l in range(1, size+1, 2): 
        pixels[k,l] = (0,0,0) 
 
img.show()