如何使用 pil 在 python 中制作颜色网格?

How to make a color grid in python using pil?

我是一个十足的菜鸟,想做一个10*10的颜色随机的网格。我的代码已经取得进展,但我无法继续前进。

import random
import uuid

from PIL import Image, ImageDraw

run_id = uuid.uuid1()

print(f'Processing run_id: {run_id}')

image = Image.new('RGB', (1600, 1600))
width, height = image.size

rectangle_width = 160
rectangle_height = 160

draw_image = ImageDraw.Draw(image)
for i in range(10):
    rectangle_x = i*160
    rectangle_y = 0

    rectangle_shape = [
        (rectangle_x, rectangle_y),
        (rectangle_x + rectangle_width, rectangle_y + rectangle_height)]
    draw_image.rectangle(
        rectangle_shape,
        fill=(
            random.randint(0, 255),
            random.randint(0, 255),
            random.randint(0, 255)
        )
    )

image.save(f'./output/{run_id}.png')

这是我想要实现的,但颜色是随机的

运行 您的代码,您似乎只有一个单行循环(正方形顶部的行)。通过添加另一个 for 循环(遍历正方形中的每一行;用 j 表示),您可以为每一行绘制一个彩色正方形。

显示输出时,我得到了你的desired output

import random
import uuid

from PIL import Image, ImageDraw

run_id = uuid.uuid1()

print(f'Processing run_id: {run_id}')

image = Image.new('RGB', (1600, 1600))
width, height = image.size

rectangle_width = 160
rectangle_height = 160

draw_image = ImageDraw.Draw(image)
for i in range(10):
    for j in range(10):
        rectangle_x = i*160
        rectangle_y = j*160
    
        rectangle_shape = [
            (rectangle_x, rectangle_y),
            (rectangle_x + rectangle_width, rectangle_y + rectangle_height)]
        draw_image.rectangle(
            rectangle_shape,
            fill=(
                random.randint(0, 255),
                random.randint(0, 255),
                random.randint(0, 255)
            )
        )

image.save(f'./output/{run_id}.png')

image.show()

我认为这要容易得多:

#!/usr/bin/env python3

import numpy as np
from PIL import Image

# Generate 10x10 grid of random colours
grid = np.random.randint(0,256, (10,10,3), dtype=np.uint8)

# Make into PIL Image and scale up using Nearest Neighbour
im = Image.fromarray(grid).resize((1600,1600), resample=Image.NEAREST)

im.save('result.png')