社区所有版块导航
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

20行代码,如何用Python将 “妹子图” 制成好玩儿的gif动态图?

Python爱好者社区 • 4 年前 • 527 次点击  

以下文章来源于数据分析与统计学之美 

作者黄伟呢


前言

本文有很多超实用的小知识点,你看完这篇文章,不仅仅收获一项技能,你收获的还有很多不同的知识。
斗图一直是群里面的朋友最喜欢的活动,也确实很有意思,但是那都是别人做的。如果我自己想制作一个动态图,怎么办呢?比如说,将自己的男(女)朋友的照片,也做成一个gif动态图,再附带上一些文字,是不是超有趣!
制作之前的原始图片如下:
制作以后的gif动态图如下:
可以看到上述gif图,切换的速度很快,我们也可以适当的放慢这个速度,是不是很有意思。
事实上,我们也可以给图片添加文字,那样这个gif图循环播放的时候,就会有不同的字。出于文章篇幅的原因,给图片添加文字,就留着大家下去思考。
赶紧去微信使用自己制作的gif图吧!

gif图制作流程

那么这样一个gif动态图,是怎么制作的呢?现在我就带着大家一步步剖析。我目前使用的jupyter notebook为大家讲解,所以我会尽量将每个知识点,讲述的很细化。

1)获取当前的工作路径

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

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

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

3)复制一个列表

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

4)移除结尾不是png的文件,只保留结尾都是png的文件

如果你的图片都是jpg结尾的,这里都换成jpg,因为我的图片都是png结尾的。同时这里介绍了列表的remove()方法,具体细节大家还是自行下去百度。



    
for file in file_list:
    if file[-3:]!= "png":
        png_list.remove(file)
print(png_list)
结果如下:

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

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

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

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

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

for png in png_list:
    image_path = os.path.join(path, png)
    frames.append(imageio.imread(image_path))
print(len(frames))
结果如下:

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

关于imageio库的相关用法,大家需要自行下去学习。我这里只能是抛砖引玉,授人以鱼不如授人以渔。
gif_path = os.path.join(path, "my_gif.gif")
imageio.mimsave(gif_path, frames, 'GIF', duration=DURATION)
感谢阅读

推荐阅读:

1真实的上海IT圈:张江男vs漕河泾男

2:真实的北京IT圈:后厂村姑 vs 后厂村花?

3:为什么你的提问没人解答?

4:Python爱好者社区历史文章合集


重磅!Python交流已成立


公众号运营至今,离不开小伙伴们的支持。
为了给小伙伴们提供一个互相交流的技术平台,特地开通了Python交流群。
群里有不少技术大神,不时会分享一些技术要点,更有一些资源收藏爱好者不时分享一些优质的学习资料。(免费,不卖课!)
需要进群的朋友,可长按扫描下方二维码。


▲长按扫码

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/115450