玩转树莓派《二》——用python实现动画与多媒体

环境:树莓派,系统raspbian,系统自带两个版本的python以及pygame。

1、画板

程序如下:

 1 !/home/pi/game_1.py
 2 import pygame
 3
 4 width = 640
 5 height = 480
 6 radius = 100
 7 fill = 1
 8
 9 pygame.init()  #初始化pygame
10
11 window = pygame.display.set_mode((window, height))
12 window.fill(pygame.Color(255, 255, 255))  # 用白色填充画板
13 while True:
14     pygame.draw.circle(window, pygame.Color(255, 0, 0),
15     (width / 2, height / 2), radius, fill)  # 红色画圆
16     pygame.display.update()     # 更新图像

输入命令:python game_1.py

运行程序,结果如下:

键盘输入:ctrl + c

终止程序。

然而,由于树莓派图形界面的卡爆,返回到命令窗口再ctrl + c有时候会卡掉,不如直接在pygame窗口上操作来的爽快,其实pygame窗口就是用gui编程的,类似于tkinter模块做成的gui,那么关掉窗口就需要事件输入反应,在原来的game_1.py文件后面加入代码:

1 while True:
2     if pygame.QUIT in [e.type for e in pygame.event.get()]:
3         break

我发现树莓派连接网络这方面真是慢,插上电源启动网络若干分钟才能SSH连接到树莓派ip,至于访问外网,时有时无,有时候由于某种故障,例如长时间不动树莓派或者重启wifi就会导致网络连接失败,putty成为inactive,这个时候只有重新拔插电源才能正常,否则直接SSH会显示time out,只能说没有HDMI线就是麻烦,一重启网络或者重启电脑就会出错。

2、Surface

Surface可想象成一个矩形的图像,可以由多个图像帧组成,用于实现游戏或动画中一个场景,接下来要做的就是合并两张图片。

tips:由于这里需要图片,因此在购买了HDMI转换器后,使用网络还是很方便的,首先方便传图,下载了scrot,下载后直接在命令行输入:scrot即可截取当前屏幕图片,也可以通过输入:scrot -h命令查看帮助文档,比如选择截图范围就可以输入:scrot -s就可以截取想要的图片范围了,保存的图片放在当前路径下,可以使用pi里面自带的picture viewer查看图片。

程序如下:

 1 import pygame
 2
 3 pygame.init()
 4 #设置黑色背景surface大小
 5 screen = pygame.display.set_mode((450,450))
 6 #加载第一张图片,并将其转换为与当前模式相匹配的模式
 7 background = pygame.image.load("banboo.jpg").convert_alpha()
 8 theremin = pygame.image.load("panda.jpg").convert_alpha()
 9 #将第一张图片与surface合并,并通过参数设置图片合并的位置
10 screen.blit(background, (0,0))
11 screen.blit(theremin, (135, 150))
12 while True:
13         pygame.display.update()

结果显示如下:

分析:由上图可以看出,大熊猫并没有被完全显示,因为大熊猫“panda.jpg”这个图片的分辨率大于竹子“banboo.jpg”这个图片,因此才不能显示完整的熊猫图片,因此可以尝试调节大熊猫的像素来适应竹子的像素。

3、在Surface上绘图

如果要绘制一段文字,就需要加载字体,需要用到font模块来加载字体文件并渲染文本。可以先通过pygame.font.get_fonts()函数可以获取pi上的字体列表:

1 import pygame
2
3 pygame.init()
4 for fontname in pygame.font.get_fonts():
5     print fontname

输出结果如下图:

下面将使用代码加载freemono这个字体来渲染文本:

 1 import pygame
 2
 3 pygame.init()
 4 screen  = pygame.display.set_mode((725, 92))
 5 #设置字体类型为“freemono”,大小为72号
 6 font = pygame.font.SysFont("freemono", 72, bold = 1)
 7 textSurface = font.render("I love my pi!", 1,
 8                           pygame.Color(255, 255, 255))
 9 screen.blit(textSurface, (10, 10))
10 while True:
11         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格式。

代码如下:

 1 import pygame
 2 from time import sleep
 3
 4 pygame.init()
 5
 6 screen = pygame.display.set_mode((320, 240))
 7 movie = pygame.movie.Movie("foo.mpg")
 8 movie.play()
 9 while True:
10     if not(movie.get_play):
11         print("rewind")
12         movie.rewind()  # 倒带
13     movie.play()  #重新播放
14     if pygame.QUIT in [event.type for event in pygame.event.get()]:
15         break

温馨提示:在pygame.examples模块中有很多完整的实例程序,可以在/usr/share/pyshared/pygame/exalmpes目录中找到源代码。

时间: 2024-07-30 13:41:28

玩转树莓派《二》——用python实现动画与多媒体的相关文章

Python 二、Python过程型程序设计快速入门

一.数据结构 程序=数据结构+算法 数据结构: 通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其它的数据结构. python的最基本数据结构是序列 序列中的每个元素被分配一个序号(即元素的位置),也陈为索引:索引从0开始编号 python包含6中内建的数据序列:列表.元祖.字符串.Unicode字符串.buff对象和xrange对象 二.python的关键要素 基本数据类型 对象引用 组合数据类型 逻辑操作符 控制流语句 算术操作符 输入

问道python之基础篇【二】python入门

问道python之基础篇[二] Python入门 1.python的工作过程 python解释器把源代码转换为字节码的中间形式,然后再把它翻译成机器使用的机器语言并运行. 2.pyc文件 2.1.什么是pyc文件 执行python代码时,如果导入了其他的.py文件,那么在执行过程中会自动生成一个与其同名的.pyc文件,该文件就是python解释器编译之后产生的字节码. ps:代码经过编译可以产生字节码:字节码通过反编译也可以得到代码. Pyc文件一般由3个部分组成: 最开始4个字节是一个Maig

SQL Server调优系列玩转篇二(如何利用汇聚联合提示(Hint)引导语句运行)

原文:SQL Server调优系列玩转篇二(如何利用汇聚联合提示(Hint)引导语句运行) 前言 上一篇我们分析了查询Hint的用法,作为调优系列的最后一个玩转模块的第一篇.有兴趣的可以点击查看:SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行) 本篇继续玩转模块的内容,同样,还是希望扎实掌握前面一系列的内容,才进入本模块的内容分析. 闲言少叙,进入本篇的内容. 技术准备 数据库版本为SQL Server2012,利用微软的以前的案例库(Northwind)进行分析,

windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)

windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) 简单说几句 在mongodb中3元素:db(数据库).collection(集合).document(文档) 其中collection类似于数据库中的表,document类似于行,这样一来我们就将内容对比起来记忆学习了. 数据格式 MongoDB documents是BSON格式(一种类json的一种二进制形式的存

【美妙的Python之二】Python初步

美妙的Python之Python起步 简而言之: Python 是能你无限惊喜的语言,与众不同.           1.动态类型:         Python是一种动态类型语言,不需要预先声明变量的类型,变量的类型和值在赋值那一刻动态地初始化.这一点与C/C++,Java等静态类型语言完全不同,静态类型在编译阶段就必须显示的声明变量的类型,动态类似在运行时才确定变量的类型.        变量a动态地初始化为int类型,并赋值2014;        变量msg则动态初始化为str类型,并赋

Python 二、Python对象类型及其运算

一.Python对象的相关术语 Python中一切皆对象,python程序中保存的所有数据都是围绕对象这个概念展开的:所有的对象都是由类实例化而来的,只不过这些类有些是python内置的类:例如,整数和浮点数,字符串都是由python内置的类实例化而来的.除此之外用户还可以自定义类型,就是类. python程序中存储的所有数据都是对象 每个对象都有一个身份.一个类型和一个值 例如,school="MaGe Linux"会以"MaGe Linux"创建一个字符串对象,

Python服务器开发二:Python网络基础

Python服务器开发二:Python网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.包括:传输层的 FTP,UDP,TCP协议等,网络层的ip协议等,高层协议如HTTP,telnet协议等,HTTP是TCP/IP的一个子协议. socket是对TCP/IP协议的封装和应用(程序员层面上).也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如

Python基本语法[二],python入门到精通[四]

在上一篇博客Python基本语法,python入门到精通[二]已经为大家简单介绍了一下python的基本语法,上一篇博客的基本语法只是一个预览版的,目的是让大家对python的基本语法有个大概的了解.之所以将python的基本语法分为两部分,是因为园子里大部分人都是有编程基础的,所以在学习Python的时候可以先出个预览版的,预览版都是根据Python的语法与其他语言(java/C#/php)比较类似又不完全一样的地方,便于大家对Python有个基本理解.在大家差不多有个了解以后,我们再深入讲讲

玩蛇记之用python实现易宝快速支付接口

玩蛇记之用python实现易宝快速支付接口 现在很多这种快速支付的通道,易宝支持的通道算是很全面的,正好最近需要集成易宝的支付通道到平台中,所以写一贴来记录一下,顺便鄙视一下国内的支付平台,api的支持做得很是差劲,易宝的例子代码居然是错的,这么囧的事情都能出现,可见国内的竞争还是不够激烈啊. 进入主题,今天的任务是要打通支付和支付通知接口,根据一般性规则,通过http协议的支付接口的一般设计都是,通过N个field或者查询参数传递数据,其中一个是验证串,防止篡改数据,每个申请了支付接口的用户都