在上课时,有时需要显示一个倒计时时钟,让学生做题。 PPT 没有简单有效的方法实现倒计时时钟,参考了多个方案,最终决定采用 GIF 动画来实现。

这样使用起来很简单,只要把事先做好的各个时长的倒计时动画按需拖入 PPT 即可。

下面这个是一分钟的倒计时动画

已生成好了 1~15 分钟倒计时,可以点下面链接下载使用,图片尺寸是 900x700

https://www.jianguoyun.com/p/DVMc_zUQjrLzBRjch-AD

动画是用 Python 代码生成的,如果想改 UI, 可以修改下面代码来重新生成

# -*- coding: utf-8 -*-

from shutil import copyfile

import imageio
import os
from PIL import Image size = (900, 700)
nums = []
im_num_back = None for i in range(11):
filename = r'numbers\image%s.png' % i
im = Image.open(filename)
scale = 0.6
scale2 = 0.4
if i == 10:
im = im.resize((int(136 * scale2), int(362 * scale2)))
else:
im = im.resize((int(267 * scale) - 2, int(386 * scale) - 3))
nums.append(im) im_num_back = Image.open(r'numbers\image_black.png')
im_num_back = im_num_back.resize((int(267 * scale) - 2, int(386 * scale) - 3)) def create_clock_png(time_str, filepath):
img = Image.new('RGB', size, color=(68, 84, 106)) x = 186
y_base = 264 for j in range(len(time_str)):
s = time_str[j:j + 1]
if s == ':':
index = 10
y = y_base + 50
x = x + 20
else:
index = int(s)
y = y_base im_num = nums[index]
if s != ':':
img.paste(im_num_back, (x, y), im_num_back)
img.paste(im_num, (x, y), im_num) if s == ':':
x = x + 30
else:
x = x + 107 img = img.convert('P', palette=Image.ADAPTIVE, colors=255)
img.save(filepath) def create_gif(duration, folder, name):
file_path = r'%s\%s' % (folder, name)
if not os.path.exists(file_path):
os.makedirs(file_path)
cover_file = file_path + r'\%s_封面.png' % name
gif_file = file_path + r'\%s_动图.gif' % name remain = duration i = 1
for s in range(duration, -1, -1):
second = remain % 60
minute = int((remain - second) / 60) second_str = ''
if second < 10:
second_str = '0'
second_str = second_str + str(second) minute_str = ''
if minute < 10:
minute_str = '0'
minute_str = minute_str + str(minute) time_str = '%s:%s' % (minute_str, second_str)
print(time_str)
temp_file = r'temp\image_%s.png' % i
create_clock_png(time_str, temp_file) if i == 1:
copyfile(temp_file, cover_file) remain = remain - 1
i = i + 1 filenames = []
for i in range(1, duration + 2):
filename = r'temp\image_%s.png' % i
filenames.append(imageio.imread(filename)) imageio.mimsave(gif_file, filenames, duration=1, loop=1) if __name__ == '__main__': for i in range(1, 16):
folder = 'gif'
name = '%s分钟' % i
duration = i * 60
create_gif(duration, folder, name) exit()

时间匆忙,代码没有写注释,也没有优化。等有时间了再优化

代码中用到了一些图片文件,可以下载代码打包版本,里面有。代码打包下载地址:

https://www.jianguoyun.com/p/DZyUuOsQjrLzBRjniOAD

如果下载或使用中遇到问题,可加 QQ 群交流,群号:599320555

PPT 倒计时时钟,用 GIF 动画实现,可直接使用 -- 附 Python 实现代码的更多相关文章

  1. 利用Eric+Qt Designer编写倒计时时钟

    [前言]前几日通过编写命令行通讯录,掌握了Python的基本语法结构,于是开始向更高水平冲击,利用Eric与Qt Designer 编写一个带界面的小程序.本次实操中也确实遇到了不少问题,通过学习也都 ...

  2. 网页计算器 && 简易网页时钟 && 倒计时时钟

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 使用CSS3动画属性实现360°无限循环旋转【代码片段】

    使用CSS3的animation动画属性实现360°无限循环旋转. 代码片段: <div id="test"> <img src="/CSS3/img/ ...

  4. 【PPT】PPT倒计时动画的制作方法 5.4.3.2.1...

    制作步骤: 1.输入数字 在PPT空白页面中插入横排文本框,输入数字54321,并修改数字字体和大小. 2.修改数字的间距,让数字重叠在一起 字体间距 - 其他间距 - 紧缩 - 输入 150 3.选 ...

  5. Flutter 实际开发常用工具类(全局提示,请求封装,token缓存,验证码倒计时、常用窗帘动画及布局)

    介绍: 一星期从入门到实际开发经验分享及总结           代码传送门github Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.未来App开发 ...

  6. iOS中图片动画的三种模式及基本的代码实现

    -(void)play { //第一种图片动画模式 头尾方式 //头尾方式 [UIView beginAnimations:nil context:nil];//动画开始 [UIView setAni ...

  7. 安卓开发20:动画之Animation 详细使用-主要通过java代码实现动画效果

    AlphaAnimation 透明效果实现: activity_main.xml中仅仅是一个简单的图片,下面的例子都会使用这个xml: <RelativeLayout xmlns:android ...

  8. [转]Android UI:看看Google官方自定义带旋转动画的ImageView-----RotateImageView怎么写(附 图片淡入淡出效果)

    http://blog.csdn.net/yanzi1225627/article/details/22439119 众所周知,想要让ImageView旋转的话,可以用setRotation()让其围 ...

  9. 看完48秒动画,让你不敢再登录HTTP网站(附完整示例代码)

    在我的 单点登录SSO示例代码 一文中,强烈不建议部署HTTP的SSO服务站点. 在此写个基于网络包嗅探的HTTP会话劫持程序,给大家一个直观的危害性展示. 示例中,我在一台Mac上登录58同城,被另 ...

随机推荐

  1. 2V转5V输出,2.4V转5V输出,DC-DC同步整流升压电路

    PW5100可以适用于2V转5V和2.4V转5V的应用电路中,PW5100是一颗DC-DC的同步升压转换器芯片. PW5100特点: 1, 低输入,宽范围:0.7V-5V 2, 输出电压固定,外围少: ...

  2. SpringBoot JPA简单使用

    引自B站楠哥:https://www.bilibili.com/video/BV137411B7vB 一.新建Springboot项目 ​ pom.xml文件 <?xml version=&qu ...

  3. drf认证、节流、权限、版本

    Django rest framework 认证: 作用:验证用户是否登录 在视图类中写上authentication_classes = [ ],这是一个列表 需要实现 authenticate() ...

  4. 美团配送A/B评估体系建设与实践

    https://mp.weixin.qq.com/s/v3Fvp6Hed7ZGoE8FGlGMvQ

  5. SSL_ERROR_WANT_READ

    ``` 47757 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer: 11, old: 15581551413, new: 15 ...

  6. Codeforces #698 (Div. 2) E. Nezzar and Binary String 题解

    中文题意: 给你两个长度为 \(n\) 的01串 \(s,f,\)有 \(q\) 次询问. 每次询问有区间 \([\ l,r\ ]\) ,如果 \([\ l,r\ ]\) 同时包含\(0\)和\(1\ ...

  7. Python学习【第3篇】:列表魔法

    ##########################深灰魔法-list类中提供的方法###################list 类,列表list = [1,12,9,"age" ...

  8. python join()方法的使用,可以应用到tcp压测发送指定数据长度的应用

    Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串.其中,序列中的元素应是字符串类型. 学习join()方法主要是为了配合随机数的使用,生产某个指定位数的随机数,在t ...

  9. EasyUI动态显示后台数据库中的数据

    最近在完成一个项目,采用SSM框架搭建完成,前端使用EasyUI搭建页面: 其中涉及到一个查询显示功能:查询数据库中的数据,动态显示在页面之中,刚开始这部分十分有疑问,所以虚心向同学学习,现总结至博客 ...

  10. OutOfMemoryError系列

    OutOfMemoryError系列 1.[OutOfMemoryError系列(1): Java heap space](https://blog.csdn.net/renfufei/article ...