专栏首页日常学python20行代码制作字符画版小黄鸭表情包 | 文末送书抽奖结果

20行代码制作字符画版小黄鸭表情包 | 文末送书抽奖结果

阅读文本大概需要 5 分钟。

前段时间,一只可爱的小黄鸭火起来了,据说是抖音上一位黄衣小姐姐模仿小黄鸭的动作而走红。这只动作呆萌的小黄鸭表情包也跟着火起来了,小黄鸭表情包也由一只变成多只,颜色也变幻莫测。

作为一个合格的程序猿,我们怎么能落后,我们要做出符合程序猿标志的小黄鸭,我们把小黄鸭的动态图变成字符型的小黄鸭动态图。直接上图,一张原版小黄鸭图,一张程序猿标志的字符型小黄鸭。ps:字符画图离远点看可能更有效果哦!

这个程序怎么做呢?不要急,我给你分析下这个程序怎么实现。

程序步骤

实现字符动态图转化只需要 3 步,合久必分,分久必合。

  1. 把原动态图拆分成一帧一帧的图片。
  2. 把拆分的每帧图片转化为字符画。
  3. 把每帧字符画图片组合成动态图。

程序环境

语言:Python 3.6 编辑器:Pycharm

第三方库安装

运行程序前,我们需要安装两个重要的库,第一个是 Imageio,它是一个 Python 库,提供了一个简单的界面来读取和写入各种图像数据,包括动画图像,体积数据和科学格式。 它是跨平台的,可在 Python 2.7 和 3.4+ 上运行,并且易于安装。

用 pip 命令可以快速安装,因工作需要,我电脑装了 Python2.7 和 Python3.6 两个版本,我用数字对不同版本进行了区分,如果你的电脑只安装了一个版本,可以把前面 python3 -m 命令去掉,直接用 pip 后面的命令即可。

python3 -m pip install imageio

需要安装的第二个库是 opencv-python 库,OpenCV 是一个基于 BSD 许可(开源)发行的跨平台计算机视觉库,可以运行在 Linux、Windows、MacOS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了 Python、Ruby、MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。简言之,通过 openCV 可实现计算机图像、视频的编辑。广泛应用于图像识别、运动跟踪、机器视觉等领域。

python3 -m pip install opencv-python

导入编辑器

把上面安装好的两个库在编辑器 Pycharm 的 settings/Interpreter 中安装好并在程序中导入,说明下,opencv-python 这个库这次只用到其中的 cv2 模块,所以只需导入这个模块。

import imageio
import cv2

拆分图片

先定义好原始图片和处理后的图片的保存路径,这个大家运行程序前需要换成你自己需要转化的图片路径和转换后字符画图片的路径和名称。然后用 imageio 中的 mimread 方法读取原动态图,把动态图每帧都拆分成若干张图片。

转化为字符画

应用上面定义好的图片灰度与字符的映射,把上面的每帧图片都转化为字符画,并保存在一个列表中。

串联字符画为动态图

最后把刚才处理好的每帧的字符画通过 imageio 库里的 mimsave 方法组合成动态图,变成字符动态图。

imageio.mimsave(dealPic, A, 'GIF', duration=0.1)   # 把A列表里的字符画组合起来,变成动态图
print('转化完成,请到你保存的路径下查看')

通过这个程序,我们就可以把我们喜欢的图片变成字符画动态图。下面这个用本程序制作的字符画大家知道是谁吗?欢迎在下方小程序的留言区告诉我。

觉得不错,点赞、转发朋友圈都是一种支持。

本文分享自微信公众号 - 日常学python(daily_learn)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • js逆向之另类思路扣代码

    经常js分析的人来说有些网站检测浏览器指纹是很常见的事,但是我们一点一点分析是很费时间,费脑筋的。

    sergiojune
  • 谈下微信小程序的抓取技巧

    今天聊下微信小程序的抓取,其实小程序的抓取不难,主要解决抓包和如何调试小程序这两个问题。如果你运用chrome调试已经比较熟练了的话,就手到擒来。

    sergiojune
  • 爬虫不得不学之 JavaScript 函数对象篇

    今天好像是情人节?所以最适合面向对象,JavaScript 也有对象,我们也可以随时面向对象,方便得很,那怎样才有对象呢?下面告诉你!

    sergiojune
  • iOS你不知道的事--Crash分析

    原文地址:https://www.jianshu.com/p/56f96167a6e9

    iOSSir
  • 围绕区块链重新思考云计算

    区块链有望成为当今高度集中的云计算行业的一个关键颠覆技术。如今,全球各地的初创公司都在围绕区块链重新思考云计算,并表明这是一种从根本上分散托管、管理以及访问计算...

    静一
  • 【LeetCode08】字符串转换整数

    1 )删除掉字符串的空格,这里用到了lstrip()方法,截掉字符串左边的空格或指定字符

    Sam Gor
  • vue3.0 Composition API 上手初体验 普通组件的开发与使用

    通过前面的章节的讲解,我相信大家对于 vue 3.0 的新特性的基本使用,已经没有问题了。但是新的问题来了,组件是怎么玩的呢?

    FungLeo
  • [白话解析] 深入浅出朴素贝叶斯模型原理及应用

    朴素贝叶斯模型是机器学习中经常提到的概念。但是相信很多朋友都是知其然而不知其所以然。本文将尽量使用易懂的方式介绍朴素贝叶斯模型原理,并且通过具体应用场景和源码来...

    罗西的思考
  • React-Native 遇到的错误1. React-Native 部分组件在debug模式下打包在iOS真机上可以显示,但是release模式下打包在iOS真机上不显示2. React-Native

    这段代码在release包的情况是,buttons是空的,是由于if (child.type.name === 'FlowSendButton')这是判断根本不...

    贺贺V5
  • 尼康也在玩VR, 360全景相机即将上市

    VRPinea

扫码关注云+社区

领取腾讯云代金券