admin管理员组文章数量:1794759
《Python游戏趣味编程》 第13章 趣味图像生成
13 趣味图片生成
图书简介可以看这里:
童晶:《Python游戏趣味编程》新书上架了本章我们将学习Python的第三方图像处理库Pillow,编写代码生成一些趣味图像,效果如图13-1所示。首先学习图像文件的打开与显示、图像的剪裁与保存;接着学习图像的复制与粘贴、像素颜色的读写;最后实现随机互动的风格图片生成。
本章案例最终代码一共70行,代码参看:配套资源\\第13章\\13-5-3.py,视频效果参看:配套资源\\第13章\\趣味图片生成.mp4。
from PIL import Image # 导入图像处理库 import pgzrun # 导入游戏库 import random # 导入随机库 im = Image.open("images\\\\image2.jpg") # 打开图像文件 w, h = im.size # 获得图像文件尺寸 WIDTH = w # 设置窗口的宽度 HEIGHT = h # 设置窗口的高度 px = im.load() # 导入图片像素 XY = [] # 列表中存储点坐标 RGB = [] # 列表中存储对应的像素颜色值 key = 1 # 定义按了哪个数字键,缺省为1 r = 3 # 定义了绘制小基本元素的大小,受鼠标左右移动控制 def update(): # 更新模块,每帧重复操作 global key # 按下键盘数字键后,对key赋相应的值 if keyboard.k_1: key = 1 elif keyboard.k_2: key = 2 elif keyboard.k_3: key = 3 elif keyboard.k_4: key = 4 elif keyboard.k_5: key = 5 elif keyboard.k_6: key = 6 elif keyboard.escape: key = -1 XY.clear() # 清空坐标列表 RGB.clear() # 清空颜色列表 for i in range(100): x = random.randint(0, w-1) # 取随机坐标 y = random.randint(0, h-1) r, g, b = px[x, y] # 取对应图片像素的颜色 XY.append((x, y)) # 将位置信添加到列表中 RGB.append((r, g, b)) # 将颜色信添加到列表中 def draw(): # 绘制模块,每帧重复执行 if key == -1: #当鼠标右键按下时 screen.clear() # 清除屏幕 for i in range(100): x = XY[i][0] # 当前点坐标 y = XY[i][1] box = Rect((x,y),(r,r)) # 画正方形区域的范围 if key == 1: # 绘制填充圆 screen.draw.filled_circle(XY[i], r, RGB[i]) if key == 2: # 绘制空心圆 screen.draw.circle(XY[i], r, RGB[i]) if key == 3: # 绘制线条 screen.draw.line((x, y), (x+r, y+r), RGB[i]) if key == 4: # 绘制两条线条组成的叉号 screen.draw.line((x-r, y-r), (x+r, y+r), RGB[i]) screen.draw.line((x-r, y+r), (x+r, y-r), RGB[i]) if key == 5: # 绘制空心正方形 screen.draw.rect(box, RGB[i]) if key == 6: # 绘制实心正方形 screen.draw.filled_rect(box, RGB[i]) def on_mouse_move(pos, rel, buttons): # 当鼠标移动时 global r x = pos[0] # 鼠标的x坐标 r = x*10//WIDTH + 1 # 鼠标在最左边r=1,最右边r=10 if mouse.RIGHT in buttons: # 当鼠标右键按下时,准备清屏 key == -1 pgzrun.go() # 开始执行游戏练习13-6:尝试生成如图13-17所示的趣味错觉图像:
import pgzrun # 导入游戏库 r = 4 # 白色小球半径 h_gray = r*2 # 灰色长条的高 # 两个白色小球之间的间隔、也是两个灰色长条间的间隔 step = r * 15 WIDTH = 12*step + 3*h_gray # 设置窗口的宽度 HEIGHT = 8*step + 3*h_gray # 设置窗口的高度 def draw(): # 绘制模块,每帧重复执行 screen.fill('black') # 黑色背景 # 画灰色长方形 for i in range(h_gray, HEIGHT-h_gray, step): # 画出水平的多个灰色长方形 box = Rect((0, i), (WIDTH, h_gray)) screen.draw.filled_rect(box, (150, 150, 150)) for i in range(h_gray, WIDTH-h_gray, step): # 画出竖直的多个灰色长方形 box = Rect((i, 0), (h_gray, HEIGHT)) screen.draw.filled_rect(box, (150, 150, 150)) # 画白色小圆圈 for i in range(h_gray, HEIGHT-h_gray, step): for j in range(h_gray, WIDTH-h_gray, step): screen.draw.filled_circle((j+r, i+r), h_gray, 'white') pgzrun.go() # 开始执行游戏
分步骤代码、图片素材、讲解视频可以从异步社区下载:
www.epubit/bookDetails?id=UB72096d97d6149分步骤代码也可以直接从这里下载:
联想Filez
这一章了解了转义字符、异常处理、多行注释等知识,学习了图像处理的基本概念,结合图像处理库Pillow与游戏开发库Pygame Zero,生成了各种各样的趣味图像。读者可以阅读Pillow官网上的帮助文档,进行更多图像处理的实验。也可以参考本章的思路,快速了解、学习、应用其他Python标准库与第三方库。
版权声明:本文标题:《Python游戏趣味编程》 第13章 趣味图像生成 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686836801a108559.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论