玩转树莓派《二》——用python实现动画与多媒体
环境:树莓派,系统raspbian,系统自带两个版本的python以及pygame。
1、画板
程序如下:
!/home/pi/game_1.py
import pygame width = 640
height = 480
radius = 100
fill = 1 pygame.init() #初始化pygame window = pygame.display.set_mode((window, height))
window.fill(pygame.Color(255, 255, 255)) # 用白色填充画板
while True:
pygame.draw.circle(window, pygame.Color(255, 0, 0),
(width / 2, height / 2), radius, fill) # 红色画圆
pygame.display.update() # 更新图像
输入命令:python game_1.py
运行程序,结果如下:
键盘输入:ctrl + c
终止程序。
然而,由于树莓派图形界面的卡爆,返回到命令窗口再ctrl + c有时候会卡掉,不如直接在pygame窗口上操作来的爽快,其实pygame窗口就是用gui编程的,类似于tkinter模块做成的gui,那么关掉窗口就需要事件输入反应,在原来的game_1.py文件后面加入代码:
while True:
if pygame.QUIT in [e.type for e in pygame.event.get()]:
break
我发现树莓派连接网络这方面真是慢,插上电源启动网络若干分钟才能SSH连接到树莓派ip,至于访问外网,时有时无,有时候由于某种故障,例如长时间不动树莓派或者重启wifi就会导致网络连接失败,putty成为inactive,这个时候只有重新拔插电源才能正常,否则直接SSH会显示time out,只能说没有HDMI线就是麻烦,一重启网络或者重启电脑就会出错。
2、Surface
Surface可想象成一个矩形的图像,可以由多个图像帧组成,用于实现游戏或动画中一个场景,接下来要做的就是合并两张图片。
tips:由于这里需要图片,因此在购买了HDMI转换器后,使用网络还是很方便的,首先方便传图,下载了scrot,下载后直接在命令行输入:scrot即可截取当前屏幕图片,也可以通过输入:scrot -h命令查看帮助文档,比如选择截图范围就可以输入:scrot -s就可以截取想要的图片范围了,保存的图片放在当前路径下,可以使用pi里面自带的picture viewer查看图片。
程序如下:
import pygame pygame.init()
#设置黑色背景surface大小
screen = pygame.display.set_mode((450,450))
#加载第一张图片,并将其转换为与当前模式相匹配的模式
background = pygame.image.load("banboo.jpg").convert_alpha()
theremin = pygame.image.load("panda.jpg").convert_alpha()
#将第一张图片与surface合并,并通过参数设置图片合并的位置
screen.blit(background, (0,0))
screen.blit(theremin, (135, 150))
while True:
pygame.display.update()
结果显示如下:
分析:由上图可以看出,大熊猫并没有被完全显示,因为大熊猫“panda.jpg”这个图片的分辨率大于竹子“banboo.jpg”这个图片,因此才不能显示完整的熊猫图片,因此可以尝试调节大熊猫的像素来适应竹子的像素。
3、在Surface上绘图
如果要绘制一段文字,就需要加载字体,需要用到font模块来加载字体文件并渲染文本。可以先通过pygame.font.get_fonts()函数可以获取pi上的字体列表:
import pygame pygame.init()
for fontname in pygame.font.get_fonts():
print fontname
输出结果如下图:
下面将使用代码加载freemono这个字体来渲染文本:
import pygame pygame.init()
screen = pygame.display.set_mode((725, 92))
#设置字体类型为“freemono”,大小为72号
font = pygame.font.SysFont("freemono", 72, bold = 1)
textSurface = font.render("I love my pi!", 1,
pygame.Color(255, 255, 255))
screen.blit(textSurface, (10, 10))
while True:
pygame.display.update()
输出结果如下:
4、处理事件与输入
在pygame中,用户触发的事件会被捕获并以Event的对象形式放入消息队列,而pygame.event模块提供从消息队列中获取未被处理的事件对象并能够对事件进行进一步的处理。接下来将会扩展pygame_1程序来通过捕捉鼠标事件来绘制不同的圆形,原理是越靠近窗口边缘,圆的半径越大。
程序如下图所示:
结果图很漂亮:
5、播放声音
tips:这里,树莓派屏幕右上方出现一个彩色方块的原因时供电不足,建议截usb插口的话,用供电的多接口usb,因为严重供电不足,否则的话播放音乐插耳机的时候各种故障,然后系统崩溃,树莓派发热发烫。
5.1在命令行中输入以下命令打开工具界面:
sudo raspi-config
5.2选择Advanced-option回车后,选择Audio再回车
5.3由于默认的声音输出口试HDMI输出,如果你的HDMI连接的显示屏是没有声音播放口的话建议转为模拟信号输出,也就是耳机输出,选择Forced audio即可
好的,现在你可以百度一个在线音乐,在耳机插孔插上耳机就可以听到音乐了。
6、播放视频
为了不让我的树莓派早夭,我决定去拿供电usb,果然那可恶的小方块不见了,但是不稳定,用电多的时候,还是会随着电源的红色信号灯一闪一闪,小方块也会一闪一闪,可能是供电的电源仍然不够,或者是因为我插上的东西太多了,或许无线鼠标和键盘会比较好。;
pygame.movie模块可以播放视频,前提是视频必须是MPEG1格式的,也就是类似于“.mpg”结尾的视频。当然可以通过安装ffmpeg将其他格式的视频转换为mpg格式。
代码如下:
import pygame
from time import sleep pygame.init() screen = pygame.display.set_mode((320, 240))
movie = pygame.movie.Movie("foo.mpg")
movie.play()
while True:
if not(movie.get_play):
print("rewind")
movie.rewind() # 倒带
movie.play() #重新播放
if pygame.QUIT in [event.type for event in pygame.event.get()]:
break
温馨提示:在pygame.examples模块中有很多完整的实例程序,可以在/usr/share/pyshared/pygame/exalmpes目录中找到源代码。
玩转树莓派《二》——用python实现动画与多媒体的更多相关文章
- 菜鸟玩云计算之二十:saltstack入门初步
菜鸟玩云计算之二十 SaltStack 入门初步 0. saltstack 是什么 参考下面的文章: http://docs.saltstack.com/en/latest/topics/tutori ...
- 二、Python数据类型(一)
一.Python的基本输入与输出语句 (一)输出语句 print() 示例: print('你好,Python') print(4+5) a = 10 print(a) 输出的内容可以是字符串,变量, ...
- 二十三. Python基础(23)--经典类和新式类
二十三. Python基础(23)--经典类和新式类 ●知识框架 ●接口类&抽象类的实现 # 接口类&抽象类的实现 #①抛出异常法 class Parent(object): ...
- 二十一. Python基础(21)--Python基础(21)
二十一. Python基础(21)--Python基础(21) 1 ● 类的命名空间 #对于类的静态属性: #类.属性: 调用的就是类中的属性 #对象.属性: 先从自己的内存空间里找名 ...
- windows下mongodb基础玩法系列二CURD附加一
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- 二十. Python基础(20)--面向对象的基础
二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...
- vue2.0学习笔记之路由(二)路由嵌套+动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- windows下一根数据线玩转树莓派zero(w)
买了个树莓派zero w,想着用一根普通micro数据线达成 供电+ssh+通过usb共享网络+远程桌面 的目标 通过用静态ip免去了用benjour的连接不稳定方法,下面开始细说 需要的硬件: 树莓 ...
随机推荐
- django drf 权限permission
https://www.django-rest-framework.org/api-guide/permissions/#custom-permissions from django.shortcut ...
- 7-Linq查询语言
本篇博客对应视频讲解 回顾 上一期我们讲解了字符编码相关的内容,大家应该去理解字符和字节之间的关系.并学习使用Encoding类进行编码之间的转换. 今天给大家讲的内容十分的重要,也是C#等语言比其他 ...
- Cookie客户端缓存.Session.Application
Cookie客户端缓存. 1.引言 随着浏览器的处理能力不断增强,越来越多的网站开始考虑将数据存储在「客户端」,那么久不得不谈本地存储了. 本地存储的好处: 一是避免取回数据前页面一片空白,如果不需要 ...
- 【cocos2d-x 手游研发----博彩大转盘】
博彩大转盘,转盘抽奖的小系统,这是一个很有意思的游戏模块,游戏中增加这样一些趣味的小模块,我会附上源码: 会增进玩家的粘性,每天都想来抽两把试试手气: 我做的这个是个矩形风格的转盘,不是那种圆形的转盘 ...
- php性能优化三(PHP语言本身)
0.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册 ...
- [CentOS] 7 不执行文件 /etc/rc.d/rc.local
chmod 0755 /etc/rc.local systemctl enable rc-local.service --now systemctl restart rc-local.service
- jdk命令行工具(一)
1.概述 熟悉java开发的人应该都知道在jdk的bin目录下有许多的工具,这些工具主要用于监视虚拟机和故障处理.这些故障处理工具被Sun公司称作为“礼物”附赠给JDK的使用者,并在软件的使用说明中把 ...
- iOS学习笔记(4)——显示单组件选取器
1. 创建工程 创建新工程,create a new Xcode project 创建single view application 创建名为PickerViewTest的工程 2. 创建xib文件 ...
- Scrapyd-Client的安装
1. pip安装 这里推荐使用pip安装,相关命令如下: pip3 install scrapyd-client 2.验证安装 安装成功后会有一个可用命令,叫作scrapyd-deploy,即部署命令 ...
- PHP-GD库开发手记
创建带有alpha通道的背景输出图像画中文字体获取长宽等比例缩放图片,也可以用于裁切实例代码 创建带有alpha通道的背景 $png = imagecreatetruecolor(800, 600); ...