【教学类-40-01】20240322 幼儿视力检查照片合成GIF

作品展示——GIF动图

背景需求:

2024年3月22日,中班幼儿视力检查,保健老师表扬我们班幼儿视力正常率高。

我为每位孩子拍照时,突然想把动作图用Python变成GIF图片,于是每位孩子都拍了多张“辨认视力表的不同手势”,积累一些做GIF动画的素材。

设计过程:

第0步:把所有照片放在一个文件夹里

第1步:生成01-31的文件夹(学号文件夹)

print('------1、生成01-31的学号文件夹-------')import os
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\20240322中4班检查视力照片'
# 创建名为"123"的文件夹
os.makedirs(path, exist_ok=True)# 生成01到31的数字文件夹
for i in range(1, 32):folder_name = str(i).zfill(2)  # 将数字填充成两位数,例如01、02等os.makedirs(os.path.join(path, folder_name), exist_ok=True)

放大照片,把同一位幼儿的照片,拖入相应的学号文件夹

第2步,读取每个文件夹内的高清照片,将里面的图片合并为gif

print('------1、生成01-31的学号文件夹-------')
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\20240322中4班检查视力照片'
import os
from PIL import Image# 读取123文件夹下所有的二级文件夹for root, dirs, files in os.walk(path):for dir_name in dirs:# 获取二级文件夹的路径subpath = os.path.join(root, dir_name)print(subpath)# 创建一个图像列表来存储二级文件夹中的所有图片images = []# 读取二级文件夹中的所有图片for filename in os.listdir(subpath):if filename.endswith(".png") or filename.endswith(".jpg"):image_path = os.path.join(subpath, filename)image = Image.open(image_path)images.append(image)# 将图片列表保存为gifif images:gif_path = os.path.join(root, f"{dir_name}.gif")images[0].save(gif_path, save_all=True, append_images=images[1:], duration=100, loop=0)

28个gif生成了10分钟

图片越多,gif的容量就越大(一般gif都是100K左右,但是这里用了原照片的格式,一张就2-3MB)

生成gif虽然高清,但是太大了。需要缩小容量

第3步,读取每个文件夹,将里面的图片长宽缩小到600*800,再合并为gif

查看每张照片的像素长宽,3000*4000,缩小到600*800

print('------2、转成600*800的像素的图片 gif-------')
import os
import time
from PIL import Image# 读取指定路径下所有的二级文件夹
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20240322中4班检查视力照片'for root, dirs, files in os.walk(path):for dir_name in dirs:# 获取二级文件夹的路径subpath = os.path.join(root, dir_name)print(subpath)# 创建一个图像列表来存储二级文件夹中的所有图片images = []# 读取二级文件夹中的所有图片并进行resize操作for filename in os.listdir(subpath):if filename.endswith(".png") or filename.endswith(".jpg"):image_path = os.path.join(subpath, filename)image = Image.open(image_path)# 压缩照片尺寸为指定大小,例如(200, 200)resized_image = image.resize((600, 800))images.append(resized_image)# 将压缩后的图片列表保存为gifif images:gif_path = os.path.join(root, f"{dir_name}.gif")images[0].save(gif_path, save_all=True, append_images=images[1:], duration=100, loop=0)print("生成GIF成功:", gif_path)

第4步,把所有gif生成到“gif文件夹”内

# 创建名为"零时文件夹"的文件夹new=path+r'\gif'
os.makedirs(new, exist_ok=True)

最终效果

1、素材

2、代码

'''
把幼儿检查视力的手势照片,缩小长宽 ,合并成gif
作者:AI对话大师
时间:2024年3月22日
'''
import os
import time
from PIL import Imagepath=r'C:\Users\jg2yXRZ\OneDrive\桌面\20240322中4班检查视力照片'
print('------0、生成01-31的学号文件夹-------')
path_jpg=path+r'\jpg'import os# 创建名为"20240322中4班检查视力照片"的文件夹,起始已经存在了
os.makedirs(path_jpg, exist_ok=True)# 生成01到31的数字文件夹
for i in range(1, 32):folder_name = str(i).zfill(2)  # 将数字填充成两位数,例如01、02等os.makedirs(os.path.join(path_jpg, folder_name), exist_ok=True)print('------1、手动移动照片到文件夹内,以下可以不运行,等照片移动后,全部代码都显示(不用隐藏)-------')# 创建名为"储存照片的gif"的文件夹
new=path+r'\gif'
os.makedirs(new, exist_ok=True)print('------2、转成600*800的像素的图片 gif-------')# 读取指定路径下所有的二级文件夹
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20240322中4班检查视力照片'for root, dirs, files in os.walk(path_jpg):for dir_name in dirs:# 获取二级文件夹的路径subpath = os.path.join(root, dir_name)print(subpath)# 创建一个图像列表来存储二级文件夹中的所有图片images = []# 读取二级文件夹中的所有图片并进行resize操作for filename in os.listdir(subpath):if filename.endswith(".png") or filename.endswith(".jpg"):image_path = os.path.join(subpath, filename)image = Image.open(image_path)# 压缩照片尺寸为指定大小,例如(200, 200)resized_image = image.resize((600, 800))images.append(resized_image)# 将压缩后的图片列表保存为gifif images:gif_path = os.path.join(new, f"{dir_name}.gif")images[0].save(gif_path, save_all=True, append_images=images[1:], duration=100, loop=0)print("生成GIF成功:", gif_path)

3、效果

这样gif图片容量小,而且都在一个文件夹内,看起来方便、直观

远景拍摄的照片,用PS修一下,图片放大,尽量确保每张照片的人物头像大小相似。

修图后,在用代码运行一次。

最终GIF效果——逐帧动画:有没有一种指点江山的感觉

感悟:

1、本来想把这些给gif插入闵豆家园APP给家长看,但是闵豆可以传jpg\mp4\png,但是不支持gif。

2、而通过微信转移GIF,发现微信不能下载GIF(只能添加到表情)

虽然我用Python实现了批量制作照片GIF动图的结果,但是无用武之地啊。o(╥﹏╥)o

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot的西安旅游系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的西安旅游系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

动态规划(算法竞赛、蓝桥杯)--单调队列优化绿色通道

1、B站视频链接&#xff1a;E45 单调队列优化DP 绿色通道_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N5e410; int n,tim,w[N],f[N],q[N];bool check(int m){int h1,t0;for(int i1; i<n; i){while(h<t && f[q[t]]>f[i-…

visual studio卸载几种方法

1、控制面板卸载&#xff1b; 2、有时候会发现控制面板卸载会失败&#xff0c;无法卸载&#xff0c;这时候要先把下面目录的关于visual studio的都删除&#xff0c;然后重启电脑后&#xff0c;重新安装vs即可。

使用echart绘制拓扑图,树类型,自定义tooltip和label样式,可收缩

效果如图&#xff1a; 鼠标移上显示 vue3 - ts文件 “echarts”: “^5.4.3”, import { EChartsOption } from echarts import * as echarts from echarts/core import { TooltipComponent } from echarts/components import { TreeChart } from echarts/charts import { C…

复试专业前沿问题问答合集10-1——区块链与加密货币

复试专业前沿问题问答合集10-1——区块链与加密货币 区块链与加密货币安全以及6G通信的基础知识问答: 区块链以及加密货币相关的基础安全知识 包括区块链如何确保交易安全、共识机制的作用、加密货币钱包的保护措施、智能合约的工作原理以及如何防范潜在的网络攻击。这些知…

vue项目实现---用户在页面没有操作5分钟时退出登录

方案1: 后端处理 (1)用户切换页面或者点击按钮时需要发送请求接口,如果后端判断在5分钟之内没有请求,然后将前端的token失效 方案2: 前端处理 (1)在main.js中创建全局的事件监听器来实现对键盘抬起事件和鼠标点击事件的监听 试例:Vue 项目中全局监听键盘抬起事件和鼠标点击…

【笔记】KaiOS SPN显示逻辑

更新流程code 1、gonk/dom/system/gonk/radio/RadioInterfaceLayer.jsm handleNetworkStateChanged -> requestNetworkInfo() -> handleRilResponse的getOperator -> handleOperator handleNetworkStateChanged:网络状态变化请求网络信息 this.requestNetworkInfo…

实用福利网站分享

1.http://www.w3school.com.cn w3school&#xff0c;很好的在线web学习网站&#xff0c;免费 2.https://sklearn.apachecn.org sklearn文档&#xff0c;虽然是文档&#xff0c;但能学到很多很多具体的机器学习例子和知识 3.http://www.runoob.com 菜鸟教程&#xff0c;也是…

实验6-10 统计单词的长度(PTA)

题目&#xff1a; 本题目要求编写程序&#xff0c;输入一行字符&#xff0c;统计每个单词的长度。所谓“单词”是指连续不含空格的字符串&#xff0c;各单词之间用空格分隔&#xff0c;空格数可以是多个。 输入格式: 输入给出一行字符。 输出格式: 在一行中输出每个单词的…

阿里云2核4G云服务器ECS和轻量应用服务器价格表

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

【postgresql 基础入门】表的约束(一)主键与外键,数据的实体完整性与参照完整性,外键引用数据被修改时的动作触发

主键与外键-表的约束(一) ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 系列文章…

2核4G服务器阿里云性能测评和优惠价格表

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

Debezium日常分享系列之:Debezium2.5稳定版本之数据类型映射

Debezium日常分享系列之&#xff1a;Debezium2.5稳定版本之数据类型映射 一、基本类型二、时间类型三、Decimal类型四、Boolean values布尔值五、Spatial types空间类型六、Debezium技术总结 Debezium MySQL 连接器表示对带有事件的行的更改&#xff0c;这些事件的结构类似于该…

MySQL数据库存储引擎MyISAM与InnoDB

前言 MySQL存储引擎是MySQL数据库中负责管理数据存储和检索的组件&#xff0c;不同的存储引擎提供了不同的功能和特性&#xff0c;可以根据实际需求选择合适的存储引擎来优化数据库性能和功能。以下是一些常见的MySQL存储引擎&#xff1a;InnoDB、MyISAM、MEMORY、NDB Cluster…

【LeetCode】--- 动态规划 集训(一)

目录 一、1137. 第 N 个泰波那契数1.1 题目解析1.2 状态转移方程1.3 解题代码 二、面试题 08.01. 三步问题2.1 题目解析2.2 状态转移方程2.3 解题代码 三、746. 使用最小花费爬楼梯3.1 题目解析3.2 状态转移方程3.3 解题代码 一、1137. 第 N 个泰波那契数 题目地址&#xff1a…

苏州城市学院芮国强一行莅临聚合数据走访调研

3月19日&#xff0c;苏州城市学院校党委书记芮国强、校长赵志宏一行莅临聚合数据&#xff0c;就数据科技赋能行业升级展开调研。聚合数据董事长左磊接待来访。 城市学院党委理论学习中心组一行参观了聚合数据展厅&#xff0c;了解了聚合数据的发展历程、数据产品、应用案例、奖…

QT信号和槽机制connect用法

信号与槽机制是绝对不可或缺且常用的&#xff0c;其中的参数一般都会比较简单&#xff0c;bool、int、QString之类的&#xff0c;但当我们想要传递相对比较复杂的参数&#xff0c;例如QVector<int>、QList<QString>&#xff0c;以及一些我们自定义的结构体时&#…

常用的6个的ChatGPT网站,国内可用!

GPTGod &#x1f310; 链接&#xff1a; GPTGod &#x1f3f7;️ 标签&#xff1a; GPT-4 免费体验 支持API 支持绘图 付费选项 &#x1f4dd; 简介&#xff1a;GPTGod 是一个功能全面的平台&#xff0c;提供GPT-4的强大功能&#xff0c;包括API接入和绘图支持。用户可以选择免…

【WPF应用5】WPF中的TextBlock控件:属性与事件详解及示例

在WPF&#xff08;Windows Presentation Foundation&#xff09;开发中&#xff0c;TextBlock控件是一个常用的元素&#xff0c;用于显示静态或动态文本内容。它提供了丰富的属性和事件&#xff0c;使得开发者能够灵活地控制文本的显示样式和响应用户的交互行为。本文将详细介绍…

数理最适化笔记1

1.1数理最适化是什么&#xff1f; 实际的问题通过数学公式表达出来&#xff0c;并且找到最优解的一种方叫做数理最适化。 数理最适化问题通常是 目的函数&#xff0c;和制约条件组成。 数理最适化问题有很多&#xff0c;最基本的叫做 线性最适化问题 eg. minimize 3x4y s.…