图片来源:《鬼灭之刃》 op 截屏

gif 格式的图片不但自带“能动”属性,还可作为“表情”被收入微信表情包。随手制作 gif 表情包可以算得上是当代沙雕青年的必备技能之一了。

制作 gif 比较流行的方法是:下载一个专门生成表情包的软件、访问一个在线转换的网站并按顺序上传图片或使用 Photoshop 里面的“时间轴”面板。

但只是为了将几张图片“捏”在一起,产生一个能动的效果,上述方法其实都有些大材小用,并且还不是很方便。

如果不是需要很好的压缩算法,我们完全可以在自己的计算机上轻量、快捷地完成“一键式”转换,因此我们仅需要代码帮我们完成:

  • 读取现有图片到内存;

  • 整理内存中的图片信息,符合 gif 格式规范;

  • 输出 gif 图片。

python 丰富的生态为我们提供了一个很方便的解决方案:

  • imageio.imread() 将图片保存为 RGB 点阵于内存中;

  • imageio.mimsave(gif_path, frames, ‘GIF’, duration) 将 frames 中的点阵对象整合,输出 gif 文件到硬盘上。

我对其稍加整理如下:

if __name__ == "__main__":# path initpath = os.path.join(__file__, "..")# read pngsfile_list = os.listdir(path)png_list = file_list.copy()for file in file_list:if file[-4:]!=".png":png_list.remove(file)png_list.sort(key=lambda x: int(x[:-4]))# now all the pngs are in the png_list# and sorted well from min to max# turn pngs into a gif fileframes = []for png in png_list:# get the png file's pathimage_path = os.path.join(path, png)# imageio.imread() to get RGB matrix# frames is a list which stores the pngs in orderframes.append(imageio.imread(image_path))# production pathgif_path = os.path.join(path, "my_gif.gif")imageio.mimsave(gif_path, frames, 'GIF', duration=DURATION)print("done")pass

怎么使用呢?

  • 首先,建一个空的文件夹,把你的 png 图片保存在其中;
  • png 图片命名要以数字命名,顺序越前的图片数字越小;
  • 该文件夹内,新建一个 python file ,保存上述代码于其中;
  • 依靠编辑器或命令行运行这个 .py!
  • 你将看到 my_gif.gif 文件已经出现在你的文件夹中了。


很多时候,由于 gif 多了“时间”这个维度,图片的顺序、创意、内容等多种元素组合在一起,可以带来比一张图片好很多的效果。比如,可以给女朋友做一套“相册”,这可比修图浪漫多了:

还可以给公众号制作个粗糙的头图:

值得注意的是,如果你想使用上述方案,图片大小尽量保持一致。

感谢阅读,公众号:Piper蛋窝。

可以访问我的仓库(阅读原文):
https://github.com/PiperLiu/interesting-python3/tree/master/visual-python/imageio2gif

几行 python 代码合成 gif / 微信表情~与恶意合成软件说再见【文末附代码】相关推荐

  1. python 表情包 gif_几行 python 代码合成 gif / 微信表情~与恶意合成软件说再见【文末附代码】...

    图片来源:<鬼灭之刃> op 截屏 gif 格式的图片不但自带"能动"属性,还可作为"表情"被收入微信表情包.随手制作 gif 表情包可以算得上是当 ...

  2. Qt实现数字音频均衡器[文末附代码]

    Qt实现数字音频均衡器 在实现音频播放器的时候,我们常常需要一个均衡器来调节各个频段的增益,就是我们平常说的调重低音.一个数字均衡器的架构通常都如图所示: 从图中可以看到,这里的数字均衡器实际上就是三 ...

  3. Python 阶段性总结《抽奖系统》(文末附代码地址)

    大家好,今天是python 的阶段性总结,经过前面的学习,我们需要用一个小Demo(抽奖系统)来巩固我们的所学所识: 1.抽奖系统介绍 这是一个通过命令行执行抽奖的操作系统,没有华丽的界面. 1.1 ...

  4. 做python项目需要知道什么_一文带你了解python是什么?能做什么?为什么要学?(文末附学习资源)...

    什么是 Python? Python 是一门流行的编程语言.它由 Guido van Rossum 创建,于 1991 年发布. 它用于:1.Web 开发(服务器端) 2.软件开发 3.数学 4.系统 ...

  5. 基于P2P万信金融-- 万信金融项目之业务大总结(文末附代码地址)

    一.项目介绍 1. 行业简介 P2P金融又叫P2P信贷.其中,P2P是 peer-to-peer 或 person-to-person 的简写,意思是:个人对个 人.P2P金融指个人与个人间的小额借贷 ...

  6. 利用vue数据驱动视图的思想实现走马灯(文末附代码)

    以"猥琐发育,别浪!"为例. 思路: 1.搭建静态页面 2.创建vue实例,展示数据 3.处理字符串(切割+拼接) 4.开始.暂停按钮的点击事件 搭建静态页面 <div id ...

  7. 周志华《Machine Learning》学习笔记(6)--神经网络(文末附代码)

    上篇主要讨论了决策树算法.首先从决策树的基本概念出发,引出决策树基于树形结构进行决策,进一步介绍了构造决策树的递归流程以及其递归终止条件,在递归的过程中,划分属性的选择起到了关键作用,因此紧接着讨论了 ...

  8. 80行代码自己动手写一个表格拆分与合并小工具(文末附工具下载)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 瑶池阿母绮窗开,黄竹歌声动地哀. ...

  9. python程序员专用壁纸_程序员炫技必备:用Python生成马赛克画!(文末附源码)...

    原标题:程序员炫技必备:用Python生成马赛克画!(文末附源码) 源 | Python与数据分析文 | 强哥 大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本 ...

最新文章

  1. 美团App首页实现之Category_HeaderView可翻页实现
  2. 【HDU 4511】小明系列故事——女友的考验(AC自动机+DP)
  3. 基于Schema配置的AOP
  4. 战神4 幕后花絮 概念艺术_Java 9幕后花絮:新功能从何而来?
  5. mysqldump 使用备忘
  6. python中把输出结果写到一个文件中_Python3.6笔记之将程序运行结果输出到文件的方法...
  7. mysql 二进制日志删除_MYSQL 删除二进制日志的 3 个方法
  8. 测试老司机一起聊聊性能测试是怎么一回事?
  9. 蒙特卡罗方法 python 实现2
  10. 不错的Feature设计:提建议并投票
  11. android 弹出软键盘将底部视图顶起问题
  12. oracle导出1000万数据,1000万条数据,最好用什么工具做,是sql,还是oracle,抑或vfp?...
  13. mips的旁路_低功耗设计二之Bypassing(旁路)
  14. Ajax异步请求PHP服务器,无阻塞响应的解决方案
  15. 微信网页开发之授权登录(java实现)
  16. 枚举算法,常用的三种
  17. android电力监控平台,基于Android和电力载波智能楼宇监控系统的制作方法
  18. android ps icon图标制作,PS设计App图标教程
  19. kinect体感绿幕抠像,AR虚拟互动拍照,体感抠像拍照
  20. 飚王硬盘盒怎么样_四款USB 3.0硬盘盒完全拆解_DIY攒机-中关村在线

热门文章

  1. 【Oracle】闪回技术
  2. mysql5.7 datetime 默认值为‘0000-00-00 00:00:00‘值无法创建问题解决
  3. 解决 el-autocomplete 不显示及没数据时闪一下的问题
  4. jsx中如何解决{if…else…}的问题
  5. 谈谈spring-boot不同包结构下,同样的类名冲突导致服务启动失败解决方案
  6. 在React / React Native中使用构造函数与getInitialState有什么区别?
  7. 如何在Java中将毫秒转换为“ X分钟,x秒”?
  8. 通过按Enter阻止用户提交表单
  9. Ros_Topic通信方式
  10. EL与JSTL表达式代码示例