社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python制作一个猫咪小秒表

Python中文社区 • 6 年前 • 711 次点击  


盛光晓,粗通python,精通arcpy,某公司首席Python扛把子程序员。

博客: https://blog.csdn.net/esa72ya

本文作者已加入Python中文社区专栏作者计划

秒表是一项随处可见的神奇小物件,最常用到秒表的两大场景,一个是运动会,另一个是健身房,因此也总是让人联想到汗水和心跳,贲张的血管,粗重的呼吸,时间似乎变得缓慢,那一只聚拢万千目光的小小秒表,此刻却像一座沉重而古老的大钟,每一次悠长的回摆都回荡着岁月的钝响,一次又一次把人们的心提到了嗓子眼。那么,秒表有没有办法做的可爱、调皮一点呢?比如像下图这样的猫咪秒表。

要实现这样的效果,用python就足够了。主要用到的就是matplotlib包。

首先,下载猫咪的gif图,然后将gif图切分成多张png图。用这几句代码就可以实现:

im=Image.open(infile)
mypalette=im.getpalette()
im.putpalette(mypalette)
new_im=Image.new('RGBA',im.size)
new_im.paste(im)
new_im.save('image\\{}.png'.format(str(i)))

原始的gif是这样的:

拆分成的png图片:

然后,动画的效果是通过帧动画来实现的。每一帧都用一张上文生成的不同的png图片,遍历完png图片之后,再继续循环往复。不难看出,原始gif中的猫耳朵是向左的,如果改成向上的,看着要舒服一些。这就需要将图片沿着斜45度角进行旋转。用这几行代码就可以:

    newim=[]
    for m in range(len(im[0])):
        item=[]

        for n in range(len(im)):
             item.append(im[n][m])

        newim.append(item)
    newims.append(np.array(newim))

现在,猫咪的gif动画是酱紫的。

接着,就是引入matplotlib,“支起”画布,具体代码如下:

import matplotlib.pyplot as plt
fig=plt.figure(figsize=(6,6))
ax=plt.gca()
ax.grid()

然后,就可以绘制指针了,用下面这句话:

#两个[]的作用都是用于之后填充数据,当其中填充的数据不一样的时候,指针也就不一样,也就实现了动画效果
anchor,=plt.plot([],[],'-',color=precolor,lw=1.8)

接着,就是绘制表盘的外围以及“3”、“6”、“9”、“12”四个数字,用几行代码就可以搞定:

#绘制表盘
x_out=[r_out*np.cos(theta[i]) for i in range(len(theta))]
y_out=[r_out*np.sin(theta[i]) for i in range(len(theta))]
ln1.set_data(x_out,y_out)
#绘制“3”、“6”、“9”、“12”四个数字
ax.text(1.850"3",color='#791E94',fontsize=18,ha="center",va="center",fontproperties=font)
ax.text(-1.850 "9",color='#791E94',fontsize=18,ha="center",va="center",fontproperties=font)
ax.text(0.051.85"12",color='#791E94',fontsize=18,ha="center",va="center",fontproperties=font)
ax.text(0.05-1.85"6",color='#791E94',fontsize=18,ha="center",va="center",fontproperties=font)

画出来的效果是这样的,是不是很卡通?

最后,就是动画效果的实现,最主要的语句是这个:

#fig指的是画布,update指的是执行每一帧更新的函数,length指的是一共有多少帧,init指的是第一帧所执行的函数
ani=animation.FuncAnimation(fig,update,length,init_func=init,interval=interval_time)

在update函数中,对猫咪的动作和指针的位置按帧来进行赋值,代码如下:

#对猫咪的动作进行帧赋值
figcat.set_data(newims[i%6])
#对指针的位置进行帧赋值
anchor.set_data([0,anchor_ratio*math.cos(theta[i])*(r_out-2 *r_in)],[0,anchor_ratio*math.sin(theta[i])*(r_out-2*r_in)])

ps:如果想要一边看喵表走,一边听猫咪叫,那可以用python自带的winsound模块来实现。用下面这行代码就可以:

#友情提示,'CatMeow.mp4'文件是需要自行下载的
winsound.PlaySound('CatMeow.mp4',winsound.SND_LOOP)


zhi

chi

zuo

zhe



长按扫码鼓励作者

点 击 投 稿


热 门 推 荐

为你的Python程序加密

用Python开发计时器程序

用Python爬取WordPress官网所有插件

用OpenCV和OCR识别图片中的表格数据

推荐Python中文社区旗下的几个服务类公众号


▼ 长按扫码上方二维码或点击下方阅读原文

免费成为社区注册会员,会员可以享受更多权益

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31023
 
711 次点击