单单只是将静态图转换为字符画,功能貌似太过单一。
于是,小编便想着,既然静态图可以转换为字符画,那么动态图是否也可以呢。
毕竟,动态图不也就是许多静态图拼凑在一起生成的吗?
本次教学中,我将教大家如何简单的实现将动态图也转换为字符画。

以下是具体代码,我都做了详细注释,可以将图片保存下来慢慢看,遇到什么问题也可以私信我:

#-*- coding:utf-8 -*-
from PIL import Image, ImageFont, ImageDraw
import argparse
import os
import imageio
#命令行输入参数处理
parser = argparse.ArgumentParser()
parser.add_argument('file')
parser.add_argument('-d','--duration',type = float, default = 1)#播放时间
#获取参数
args = parser.parse_args()
File = args.file
DURARION = args.duration
#像素对应ascii码#ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
ascii_char = list("MNHQ$OC67+>!:-. ")
#将像素转换为ascii码
def get_char(r,g,b,alpha = 256):if alpha == 0:return ''length = len(ascii_char)gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)unit = (256.0+1)/lengthreturn ascii_char[int(gray/unit)]
#将txt转换为图片
def txt2png(file_name):im = Image.open(file_name).convert('RGB')#gif拆分后的图像,需要转换,否则报错,由于gif分割后保存的是索引颜色raw_width = im.width   raw_height = im.heightwidth = int(raw_width/6)height = int(raw_height/15)im = im.resize((width,height),Image.NEAREST)txt=""colors = []for i in range(height):for j in range(width):pixel = im.getpixel((j,i))colors.append((pixel[0],pixel[1],pixel[2]))if(len(pixel) == 4):txt += get_char(pixel[0],pixel[1],pixel[2],pixel[3])else:txt += get_char(pixel[0],pixel[1],pixel[2])        txt += '\n' colors.append((255,255,255))im_txt = Image.new("RGB",(raw_width,raw_height),(255,255,255))dr = ImageDraw.Draw(im_txt)font=ImageFont.load_default().fontx=y=0font_w,font_h=font.getsize(txt[1])    #获取字体的宽高font_h *= 1.37 #调整后更佳#ImageDraw为每个ascii码进行上色for i in range(len(txt)):if(txt[i]=='\n'):x+=font_hy=-font_wdr.text([y,x],txt[i],colors[i])y+=font_wname = file_name.split('.')[0]+'-txt'+'.png'print(name)im_txt.save(name)
#拆分gif
def gif2png(file_name):im = Image.open(file_name)path = os.getcwd()if(not os.path.exists(path+"/Cache")):os.mkdir(path+"/Cache")os.chdir(path+"/Cache")try:while 1:current = im.tell()name = file_name.split('.')[0]+'-'+str(current)+'.png'im.save(name)#gif分割后保存的是索引颜色print(name)txt2png(name)im.seek(current+1)except:os.chdir(path)
#转换为gif
def png2gif(dir_name):path = os.getcwd()os.chdir(dir_name)dirs = os.listdir()images = []num = 0for d in dirs:if d.split('-')[-1] == 'txt.png':images.append(imageio.imread(d))num += 1os.chdir(path)imageio.mimsave(d.split('-')[0]+'-txt_c.gif',images,duration = DURARION)
if __name__=='__main__':gif2png(File)path = os.getcwd()png2gif(path+"/Cache")

其实上述的编程思想很简单,只需要掌握步骤,你也可以轻松的实现以上功能,大体思想如下:

其中的关键在以下几点:
1、将gif图片拆分

  • 通过生成Cache文件夹进行存储

2、将gif图片合成,其中duration的设定

  • 通过加入参数-d来规定,具体操作如下:
    python ascii-gif.py 1.gif -d 0.1
    意为生成循环周期为0.1秒的gif图片

可能的问题:
window平台下在cmd终端使用pip安装imageio库时,可能会出现UnicodeDecodeError
解决方法:
安装的python路径里面的:\lib\site-packages\pip\compat__init__.py”, line 75中的utf-8改为gbk

简单实现将GIF图片转换为字符画相关推荐

  1. 简单使用python将图片转换为字符画

    将图片转换为字符码的形式相信大家都有见过. 记得小编以前看到这些的时候是极其羡慕的,也很渴望能够实现这项功能. 然后将一副画转换为这样的字符画,发给周围的朋友炫耀. NH HN–: !;;– –;;; ...

  2. python笔记手写照片_Python笔记-将图片转换为字符画

    [功能] 将jpg图片转换为字母画字符画( python 3.7版本下调试成功) [特点] 1.图片可默认位置,或者手工输入指定图片名 2.输出字符画高度可以设置,默认为60行 图片转字符画程序.jp ...

  3. sql数字转换为字符_Python|图片转换为字符画^_^

    我们很清楚什么是图片,无外乎png.jpg等格式的文件,例如这个? 但什么是字符画呢?先看一下官方介绍: 字符画,一种由字母.标点.汉字或其他字符组成的图画.简单的字符画是利用字符的形状代替图画的线条 ...

  4. Python将图片转换为字符画

    最近在学习Python,看到网上用Python将图片转换成字符画便来学习一下 题目意思是,程序读入一个图片,以txt格式输出图片对应的字符画,如图所示: 以下是Python代码: # coding:u ...

  5. python将图片转为字符画_Python将图片转换为字符画的方法

    最近在学习python,看到网上用python将图片转换成字符画便来学习一下 题目意思是,程序读入一个图片,以txt格式输出图片对应的字符画,如图所示: 以下是python代码: # coding:u ...

  6. python把图片转为字符画_Python 实现图片转换为字符画

    主要使用 pillow 如果没有安装 使用 pillow install pillow 安装一下 看代码: from PIL import Image import argparse #字符画所用的字 ...

  7. python实践:图片转换为字符画

    # -*- codeing = utf-8 -*- # @Time : 2022/10/25 15:54 # @Author : Xing # @File : ascii_one.py # @Soft ...

  8. c语言将一幅画转换为字符画,C#将图片转换成字符画

    先看一下效果图 在Main方法中调用(首先要添加程序集System.Drawing,然后引入命名空间System.Drawing) ConvertToChar(new Bitmap(@"D: ...

  9. c语言将图像转换成字符画,25行Java代码将普通图片转换为字符画图片和文本的实现...

    本文主要介绍了25行Java代码将普通图片转换为字符画图片和文本的实现,分享给大家,具体如下: 原图 生成字符画文本(像素转换字符显示后,打开字符画显示相当于原图的好几倍大,不要用记事本打开,建议用n ...

  10. python将图片转换为字符_python如何将图片转换为字符图片

    简介 一个简单的python程序,将图片转换为字符图片. (为了简便,很多参数写死了,自己看着改吧. (←∀←)) 正文 原图(侵删) 结果图 源码 [更多细节]-->戳这里 #-*- codi ...

最新文章

  1. Java实现红包随机金额算法
  2. 生态伙伴 | Canva上线飞书应用目录,帮你零门槛轻松做出大师级设计!
  3. dede php 循环,织梦怎么循环调用多级子栏目如二级栏目下三级栏目
  4. java面试题十八 switch一个考题
  5. 用matlab求解工作时间调度问题,置换流水车间调度问题的MATLAB求解.doc
  6. 第一篇 你好,我叫Flask
  7. AJAX TabContainer 样式设置
  8. Java I/O 全面详解
  9. 记录:uniapp微信小程序通过高德api获取当前详细的地理位置信息
  10. 含论文答辩PPT任务书源码等基于SSM框架演唱会网上订票系统
  11. FAT32格式文件系统创建TXT
  12. css 改变图片的背景色,css3实现背景图片颜色修改的多种方式
  13. 软件能力成熟度模型(Capabilitymaturity model,CMM)
  14. 泽风大过:改过自新;坎为水:坦然面对
  15. Zookeeper 在Windows下的安装过程及测试
  16. 微信小程序的冥冥中拥有的小细节
  17. 从appstore快速安装Xcode 8.0_如何解决xcode8安装慢的问题
  18. 【结构生物学】基于AI辅助的结构蛋白质组学研究细胞内的蛋白质复合体
  19. M6的服务器是什么型号,M6螺栓(螺栓型号为M6×16是什么意思?)
  20. pygame入门小游戏(外星人入侵(2):为窗口设计背景颜色以及背景图片)

热门文章

  1. win7音量图标不见了怎么办
  2. 置换流水车间调度问题的matlab求解,置换流水车间调度问题的几种智能算法
  3. android parcel分析,android – 从Intent检索时Parcel崩溃
  4. Cannot load facet,unknow facet type web
  5. 【系统教程】Windows 11开机后任务栏假死、无响应等问题
  6. 自学iOS开发系列----UI(视图编程入门:UITabBarController)
  7. 理解无线电波极化与天线极化
  8. 质量码——工业互联网平台入口
  9. led大屏按实际尺寸设计画面_led显示屏尺寸大小的计算方式
  10. 第5章 域内横向移动分析及防御