在上课时,有时需要显示一个倒计时时钟,让学生做题。 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. kubernets之DaemonSet

    一  k8s资源之DaemonSet 1.1 介绍认识DaemonSet DaemonSet可以理解为一种比较特殊的RS,DaemonSet的作用是永远保持被指定的节点只运行一个pod的副本,可用作集 ...

  2. D2Admin 登录用户重新初始话右侧菜单

    背景 最近用到D2Admin开发项目,用户登录菜单要根据用户角色权限获取,但是又不想用官网的方案(vue基于d2-admin的RBAC权限管理解决方案),所以自己加了个只修改 menuAside的方案 ...

  3. 在.NET Core 中使用Quartz.NET

    Quartz.NET是功能齐全的开源作业调度系统,可用于最小的应用程序到大型企业系统. Quartz.NET具有三个主要概念: job:运行的后台任务 trigger:控制后台任务运行的触发器. sc ...

  4. 获取网页url中的参数

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. pandas高级操作

    pandas高级操作 import numpy as np import pandas as pd from pandas import DataFrame,Series 替换操作 替换操作可以同步作 ...

  6. 阿里云镜像仓库镜像迁移至私有Harbor

    下载镜像同步工具 wget https://goodrain-delivery.oss-cn-hangzhou.aliyuncs.com/boe/image-syncer && chm ...

  7. Golang调用windows下的dll动态库中的函数 Golang 编译成 DLL 文件

    Golang调用windows下的dll动态库中的函数 package main import ( "fmt" "syscall" "time&quo ...

  8. C#编写一个在asp.net core 3.1下的简单的corn模式的计划任务和一个更简单的定时器类

    asp.net core 下,新增了一个BackgroundService用来实现能在后台跑一个长久运行的任务,因此,也可以用来替换掉原来使用的static的Timer组件, Timer组件主要有以下 ...

  9. 【wp】HWS计划2021硬件安全冬令营线上选拔赛

    逆向手在夹缝中艰难求生系列. 这篇真的存粹是做题笔记了,对内核驱动啥的不太懂,pwn也不会,能做出来的题都是硬逆出来的( childre最后死活没整出来,后来看大佬的wp才知道对子进程有修改(.)呜呜 ...

  10. SpringBoot启动方式,Spring Boot 定义系统启动任务

    SpringBoot启动方式,Spring Boot 定义系统启动任务 SpringBoot启动方式 1.1 方法一 1.2 方法二 1.2.1 start.sh 1.2.2 stop.sh 1.2. ...