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

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

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

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

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

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

输出 gif 图片。

python 丰富的生态为我们提供了一个很方便的解决方案:imageio.imread() 将图片保存为 RGB 点阵于内存中;

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

我对其稍加整理如下:

if __name__ == "__main__":

# path init

path = os.path.join(__file__, "..")

# read pngs

file_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 file

frames = []

for png in png_list:

# get the png file's path

image_path = os.path.join(path, png)

# imageio.imread() to get RGB matrix

# frames is a list which stores the pngs in order

frames.append(imageio.imread(image_path))

# production path

gif_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蛋窝。

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. 学习python表情包_我用Python一键保存了半佛老师所有的骚气表情包

    本文首发于公众号「Python知识圈」,如需转载,请在公众号联系作者授权. 2019年发现两个有意思而且内容比较硬核的公众号.都是同一个人运营的,我们都叫他半佛老师,现实中的职业是风控,公众号内容涉及 ...

  8. python制作会动的表情包_有趣的python小项目,自动生成有趣的表情包!

    加小编QQ群:832339352即可自动获取大量Python视频教程以及各类PDF! 作为一个数据分析师,应该信奉一句话--"一图胜千言".不过这里要说的并不是数据可视化,而是一款 ...

  9. Python表情包处理教程:如何过滤和替换emoji表情?

    Python表情包处理教程:如何过滤和替换emoji表情? Python是一种高级编程语言,它也是一个非常流行的用于数据分析.机器学习和自然语言处理的工具.在这些领域中使用文字和符号非常重要,但是有时 ...

最新文章

  1. 在MFC中使用AFXBEGINTHREAD的方法
  2. Python小游戏之 - 飞机大战 !
  3. JUC队列-LinkedBlockingDeque(三)
  4. css不支持data image,CSS_CSS中使用image data URI来处理图片的方法,即将图片资源转换为 base64 字 - phpStudy...
  5. linux 分配组命令,linux下一个用户如何分配给多个用户组?求命令,谢了。
  6. python是什么专业学的-Python开发专业学校排名是什么样的
  7. 第二周java基础学习内容
  8. 谷歌浏览器未发送任何数据_将 service worker 引入谷歌搜索
  9. 证件类型与证件号码前端验证
  10. 有关计算机知识竞赛的新闻稿,知识竞赛通讯稿5篇
  11. 理财新技巧之一 玩转国债和企业债回购
  12. Frenet坐标系与Cartesian坐标系互转(一):公式推导
  13. js、jquery操作复选框checkbox总结(单个/多个获取选中值、初始化设置默认选中值、全选反选)
  14. 安规之电气间隙和爬电距离
  15. 30天自制操作系统 导读
  16. 手机淘宝宝贝详情页《问大家》数据爬虫手把手实战,包含动态参数如何生成...
  17. 使用Maven创建Web应用程序项目
  18. 在k8s上安装Jenkins及常见问题
  19. 总结 : 论文--Financial Distress Prediction
  20. 规则引擎Drools详细介绍

热门文章

  1. 【C语言】用指针作为形参完成数据的升序排列
  2. pymongo的使用
  3. 【缓存】redis的基本使用
  4. 算法训练营 重编码_参加编码训练营之前要考虑的7件事
  5. java 调试_我最喜欢的Java调试技术
  6. 组件和高阶组件区别_为什么要对高阶组件使用代码拆分
  7. firstchild.data与childNodes[0].nodeValue意思
  8. Python configparser模块操作代码实例
  9. 女神说不能每张照片P的一样,所以朋友圈开三天可见,用Python一步解决
  10. Effective-Python