知行编程网知行编程网  2022-08-06 07:00 知行编程网 隐藏边栏 |   抢沙发  3 
文章评分 0 次,平均分 0.0

微信群「斗图」总输,用Python教你做最靓的仔!!!

微信斗图

微信斗图,大家最喜欢的就是发布Gif动图了。它的原理其实很简单,就是一帧一帧的图片拼接在一起,组合而成的。当他们来回切换的速度很快时,就相当于在看电影。
假如有这样一组图片:

微信群「斗图」总输,用Python教你做最靓的仔!!!

如果制作完成后,是这样的:

微信群「斗图」总输,用Python教你做最靓的仔!!!

还是挺有意思的,如果换成你女友的照片,制作后发给她,肯定对你很崇拜。

制作过程

整个制作流程很简单,共分为7步。
这里首先导入需要使用的2个库。
import os
import imageio

1. 获取当前的工作路径

path = os.getcwd()
print(path)
结果如下:

微信群「斗图」总输,用Python教你做最靓的仔!!!

2. 获取当前工作路径下的文件列表

file_list = os.listdir(path)
print(file_list)
结果如下:

微信群「斗图」总输,用Python教你做最靓的仔!!!

3. 复制一个列表

这里介绍的是列表的copy()方法,大家可以自行下去对比学习它与deepcopy()方法的区别。
png_list = file_list.copy()
print(png_list)
结果如下:

微信群「斗图」总输,用Python教你做最靓的仔!!!

4. 只保留结尾都是jpg的文件

如果你的图片既有jpg,又有png,就需要你在这里加一个判断。
for file in file_list:
if file[-3:]!= "jpg":
png_list.remove(file)
print(png_list)
结果如下:

微信群「斗图」总输,用Python教你做最靓的仔!!!

5. 将图片文件中的数字,升序排列

可以看到,我这里文件的数字都是1-7排列好的,升序排列后,数字较小的图片,位于gif动态图的最前面。
jpg_list.sort(key=lambda x: float(x[:-4]))
jpg_list
结果如下:

微信群「斗图」总输,用Python教你做最靓的仔!!!

6. 拼接得到每张图片的绝对路径

for jpg in jpg_list:
image_path = os.path.join(path, jpg)
print(image_path)
结果如下:

微信群「斗图」总输,用Python教你做最靓的仔!!!

7. 获取每张照片的RGB通道值,将7张照片的RGB通道值,保存在列表中

frames = []
for jpg in jpg_list:
image_path = os.path.join(path, jpg)
frames.append(imageio.imread(image_path))
print(len(frames))
结果如下:

微信群「斗图」总输,用Python教你做最靓的仔!!!

8. 将图片保存为gif图,设置了切换时间

gif_path = os.path.join(path, "my_gif.gif")
imageio.mimsave(gif_path, frames, 'GIF', duration=0.2)

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享