如何用Python PIL生成100x100尺寸、5x5格规格的棋盘格图案
100×100规格5×5排布棋盘格的PIL正确实现
原代码存在的核心问题
- 图像创建参数错位:
Image.new要求传入的尺寸元组格式为(宽度, 高度),原代码传入(h,w)完全颠倒了宽高顺序,直接导致画布比例异常 - 循环逻辑冗余:逐像素双层遍历全图,在循环内反复新建独立子图、重复初始化绘制对象,完全没有利用PIL批量绘制图形的高效能力
- 棋盘格判断逻辑错误:直接对单个像素坐标做奇偶判断,没有按照5×5的分块规则计算格子归属,无法生成规整的方格图案
- 绘制坐标顺序颠倒:调用
draw.rectangle时,传入的两个坐标点数值逻辑反向,根本无法画出位置正确的矩形区域 - 尺寸不匹配需求:原代码默认画布为500×500,和要求的100×100输出尺寸不符,也没有实现单格尺寸为总高/5、总宽/5的分割规则
可直接落地的正确实现代码
from PIL import Image, ImageDraw # 按要求设定图像总尺寸 total_h = 100 total_w = 100 # 计算单个棋盘格的宽高,满足h/5、w/5的要求 cell_h = total_h // 5 cell_w = total_w // 5 # 新建RGB模式空白画布 img = Image.new("RGB", (total_w, total_h)) draw = ImageDraw.Draw(img) # 遍历5行5列的所有棋盘格位置 for row in range(5): for col in range(5): # 按棋盘格交替规则填充黑白两色 if (row + col) % 2 == 0: fill = (255, 255, 255) else: fill = (0, 0, 0) # 计算当前格子的绘制边界坐标 top_left = (col * cell_w, row * cell_h) bottom_right = ((col + 1) * cell_w, (row + 1) * cell_h) draw.rectangle([top_left, bottom_right], fill=fill) img.show()
实现效果说明
- 最终输出图像严格为100×100尺寸
- 共排布5行5列的棋盘格,单格尺寸正好为总高度的1/5、总宽度的1/5(即20×20像素)
- 棋盘格按相邻不同色的规则交替填充,边缘整齐无错位
内容的提问来源于stack exchange,提问作者Jabir
相关产品推荐
相关产品推荐

