Python如何实现PIL图像处理库绘制国际象棋棋盘
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,本文小编为大家详细介绍"Python如何实现PIL图像处理库绘制国际象棋棋盘",内容详细,步骤清晰,细节处理妥当,希望这篇"Python如何实现PIL图像处理库绘制国际象棋棋盘"文章能帮助大家解决疑惑
千家信息网最后更新 2024年11月24日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安全错误
数据库的锁怎样保障安全
匹配时只出现一个对应数据库
数据库数据建模的流程
南京中卫软件开发
服务器系统进入紧急模式
贵阳网络安全课程哪里学
镇海手机软件开发公司
考研管科数据库
picc软件开发面试
腾讯轻量云服务器 135
外文数据库优点有哪些
文件数据库链接地址
diagbox服务器验证
幻塔服务器选择哪个
大数据数据采集用什么数据库
人身安全与网络安全主持词
互联网应用与软件开发自考
易语言本地数据库连接
2022有关网络安全事件
普通网站云服务器要多少钱
办公楼用什么网络服务器
创建数据库 数据表
网络安全指引手册
盛世芳华服务器太火爆怎么进去
dmz区服务器管理
图片怎么放进数据库中
cad怎么转shp数据库
win7网络安全模式进不去
pt站支持代理服务器吗
网络安全寄语
pw论坛数据库