如何使用Python的PIL库生成10×10随机颜色网格?
解决10×10随机颜色网格的问题
嘿,你现在的代码只生成一行网格的原因很简单——你把rectangle_y固定成了0,所以所有矩形都画在了第一行的位置上。要生成10×10的网格,我们只需要添加一个嵌套循环,分别控制行(垂直方向)和列(水平方向)的位置就行。
修改后的完整代码
import random import uuid from PIL import Image, ImageDraw run_id = uuid.uuid1() print(f'Processing run_id: {run_id}') # 画布尺寸和单个矩形的尺寸 canvas_size = (1600, 1600) rect_size = (160, 160) grid_rows = 10 grid_cols = 10 image = Image.new('RGB', canvas_size) draw_image = ImageDraw.Draw(image) # 外层循环处理每一行(y轴方向) for row in range(grid_rows): # 计算当前行的y坐标起始位置 rectangle_y = row * rect_size[1] # 内层循环处理当前行的每一列(x轴方向) for col in range(grid_cols): rectangle_x = col * rect_size[0] rectangle_shape = [ (rectangle_x, rectangle_y), (rectangle_x + rect_size[0], rectangle_y + rect_size[1]) ] # 生成随机RGB颜色 random_color = ( random.randint(0, 255), random.randint(0, 255), random.randint(0, 255) ) draw_image.rectangle(rectangle_shape, fill=random_color) image.save(f'./output/{run_id}.png')
关键修改点说明
- 嵌套循环:外层
for row in range(grid_rows)控制垂直方向的10行,内层for col in range(grid_cols)控制每行的10列,这样就能遍历所有100个网格位置。 - 动态计算y坐标:把原来固定的
rectangle_y = 0改成row * rect_size[1],这样每一行的起始y位置会随着行数递增,保证矩形在垂直方向排列。 - 变量优化:我把画布尺寸、矩形尺寸、行列数都单独定义成变量,这样之后要调整网格大小(比如改成8×8)或者矩形尺寸时,只需要修改这些变量就行,不用到处找硬编码的数值。
这样修改后,运行代码就能生成一个10×10的随机彩色网格啦!
内容的提问来源于stack exchange,提问作者user15284020
相关产品推荐
相关产品推荐

