Python如何实现PIL图像处理库绘制国际象棋棋盘
发表于:2025-02-21 作者:千家信息网编辑
千家信息网最后更新 2025年02月21日,本文小编为大家详细介绍"Python如何实现PIL图像处理库绘制国际象棋棋盘",内容详细,步骤清晰,细节处理妥当,希望这篇"Python如何实现PIL图像处理库绘制国际象棋棋盘"文章能帮助大家解决疑惑
千家信息网最后更新 2025年02月21日Python如何实现PIL图像处理库绘制国际象棋棋盘
本文小编为大家详细介绍"Python如何实现PIL图像处理库绘制国际象棋棋盘",内容详细,步骤清晰,细节处理妥当,希望这篇"Python如何实现PIL图像处理库绘制国际象棋棋盘"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
1 PIL绘制国际象棋棋盘流程
1.1 思路秒懂
步骤1:创建空白图片和绘画对象
步骤2:绘制网格
步骤3:填充颜色
1.2 分块解析
步骤1:创建空白图片和绘画对象
imageTemp = Image.new("RGB", size, bgcolor)draw = ImageDraw.Draw(imageTemp) # 允许在imageTemp图片上画画
步骤2:绘制网格
绘制网格的关键是使用 Python PIL ImageDraw.Draw.line() 方法。
具体而言,本文采用分别绘制平均横直线和平均竖直线的方法。
下例为绘制平均竖直线:
for i in range(7): for j in range(7): i = i + 1 j = j + 1 everage_line = size[0] / 8 everage_line = everage_line * j start = (everage_line, 0) end = (everage_line, size[1]) draw.line([start, end], fill=(0, 0, 0), width=3)
注:采用 for 循环遍历列
因为 i,j 在分母,避免为0可能的报错,故+1
计算每两条竖线之间的距离
start起始值为"左"、"上"两值,end结束值为"右","下"两值
循环绘制7条竖线将白底绘板均分为8份
并设置绘制线条颜色及线条宽度等
步骤3:填充颜色
值得注意的是,填充颜色要保证相邻两块颜色不一致。
填充颜色的关键是使用 Python PIL ImageDraw.Draw.rectangle() 方法。
具体做法是先填充第一、第二行,再将生成图像复制粘贴。
填充第一、第二行方格时要注意填充矩形的起始点和结束点值,保证相邻两块颜色不一致。
下例为填充第一行方格(间隔填充):
draw.rectangle((0, 0, 50, 50), fill = (0, 0, 0))draw.rectangle((100, 0, 150, 50), fill = (0, 0, 0))draw.rectangle((200, 0, 250, 50), fill = (0, 0, 0))draw.rectangle((300, 0, 350, 50), fill = (0, 0, 0))
填充好前两行方格后接下来就进入复制粘贴部分了;
对于第三第四行,就直接粘贴第一、二行图像就可以了:
region = imageTemp.crop((0,0,400,100))imageTemp.paste(region, (0, 100))
对于第五到第八行,在进行一遍复制粘贴,这回复制的是前四行的图像结果:
region = imageTemp.crop((0,0,400,200))imageTemp.paste(region, (0, 200))
2 完整代码
2.1 方法一
# coding=utf-8from PIL import Image, ImageDraw # 定义颜色、大小size = (400, 400)bgcolor = (255, 255, 255) # 创建空白图片和绘画对象imageTemp = Image.new("RGB", size, bgcolor)draw = ImageDraw.Draw(imageTemp) # 绘制平均竖直线for i in range(7): for j in range(7): i = i + 1 j = j + 1 everage_line = size[0] / 8 everage_line = everage_line * j start = (everage_line, 0) end = (everage_line, size[1]) draw.line([start, end], fill=(0, 0, 0), width=3) # 绘制平均横直线for i in range(7): for j in range(7): i = i + 1 j = j + 1 everage_line = size[0] / 8 everage_line = everage_line * i start = (0, everage_line) end = (size[0], everage_line) draw.line([start, end], fill=(0, 0, 0), width=3) # 先涂两行方格# 第一行间隔涂黑draw.rectangle((0, 0, 50, 50), fill = (0, 0, 0))draw.rectangle((100, 0, 150, 50), fill = (0, 0, 0))draw.rectangle((200, 0, 250, 50), fill = (0, 0, 0))draw.rectangle((300, 0, 350, 50), fill = (0, 0, 0))# 第二行间隔涂黑draw.rectangle((50, 50, 100, 100), fill = (0, 0, 0))draw.rectangle((150, 50, 200, 100), fill = (0, 0, 0))draw.rectangle((250, 50, 300, 100), fill = (0, 0, 0))draw.rectangle((350, 50, 400, 100), fill = (0, 0, 0)) # 复制粘贴# 操作第三行和第四行region = imageTemp.crop((0,0,400,100))imageTemp.paste(region, (0, 100))# 操作第五行到第八行region = imageTemp.crop((0,0,400,200))imageTemp.paste(region, (0, 200)) # 显示imageTemp.show()
2.2 方法二
from PIL import Image, ImageDraw imageTemp = Image.new("RGB", (400, 400), 0)draw = ImageDraw.Draw(imageTemp)h,w = imageTemp.size for x in range(7): for y in range(7): x = x + 1 y = y + 1 x_zuobiao = w/8 x_zuobiao = x_zuobiao*x start = (x_zuobiao, 0) end = (x_zuobiao, h) draw.line([start, end], fill=(256, 256, 256), width=3) for x in range(7): for y in range(7): x = x + 1 y = y + 1 y_zuobiao = h/8 y_zuobiao = y_zuobiao * y start = (0, y_zuobiao) end = (w, y_zuobiao) draw.line([start, end], fill=(256, 256, 256), width=3) x = 0y = 0z = 50t = 50for i in range(4): for i in range(2): for j in range(4): if(y<450): draw.rectangle((x, y, z, t), fill=(255, 255, 255)) x = x + 100 z = z + 100 for i in range(4): x = x - 100 z = z - 100 x = x + 50 y = y + 50 z = z + 50 t = t + 50 x = x - 100 z = z - 100 imageTemp.show()
2.3 方法三(精简版)
from PIL import Image, ImageDraw imageTemp=Image.new("RGB",(400,400),0)draw = ImageDraw.Draw(imageTemp)h,w = imageTemp.size x=0; y=0;z=50;t=50for a in range(4): for i in range(2): for j in range(4): if(y<450): draw.rectangle((x, y, z, t), fill = (255, 255, 255)) x=x+100 z=z+100 x = 0;z = 50;x=x+50;y=y+50;z=z+50;t=t+50 x=0;z=50 imageTemp.show()
3 结果展示
读到这里,这篇"Python如何实现PIL图像处理库绘制国际象棋棋盘"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
颜色
步骤
图像
方法
国际
国际象棋
棋盘
象棋
处理
图片
方格
图像处理
对象
文章
空白
绘画
网格
四行
一致
一行
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发技术教学大纲
力学软件开发前景
cago服务器异常
网络安全大牛
长沙工地机械设备管理软件开发
360怎么导入收藏服务器
软件开发好还是ui设计师好
我的世界服务器移动受限
天龙八部东北服务器哪里人多
软件开发工程师什么级别
饥荒创建世界服务器无法启动
数据库程序设计mysql
海曙软件开发周期
参加网络安全培训会的通知
网站sql数据库怎么看
ps3怎么进入数据库
数据库技术与应用概述
干服务器测试有辐射吗
满州里疫情数据库
武汉极客互联网科技
网络安全年会总结
相城区提供网络技术有哪些
信息检索评价数据库
数据库的中间件包括
西安中兴软件开发招聘
桓台企业erp软件开发
c 导入文件中的数据库
公积金网络安全的保护措施
轴承优化设计软件开发
华为服务器延保