前言:
上一篇做了图片转字符画,感谢大家支持,今天继续转字符画升级版,GIF也转字符画。
效果图:
理论:
- 把动态图转化为一帧一帧的单张图片。
- 把每一帧图片,分别转化为字符图。把转化完成的图片数组,保存到列表里面。
- 把列表转化为动态图。
库:
Imageio是一个Python库提供了一个简单的接口来读取和写入各种图像数据,安装命令:
pip install imageio
cv2模块基本上就是一个针对图像操作的模块,详情请移步:模块cv2的用法,安装命令:
pip install opencv-python
完整源码1:
import imageio as igo
import cv2
pic1 = input("请输入要转化的GIF图名称:")
pic2 = input("请输入GIF图转化后的名称:")
pics=igo.mimread(pic1)
string = '@@@@@@@@@@@@@@@@@'
A = []
for img in pics:
u,v,_ = img.shape
c=img*0+255
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
for i in range(0,u,6):
for j in range(0, v, 6):
pix=gray[i,j]
b,g,r,_=img[i,j]
zifu=string[int(((len(string)-1)*pix)/256)]
cv2.putText(c,zifu,(j,i),cv2.FONT_HERSHEY_COMPLEX,0.3,(int(b),int(g),int(r)),1)
A.append(c)
igo.mimsave(pic2,A,'GIF',duration = 0.1)
完整源码2:
import imageio as igo
import cv2
import numpy as np
pic1 = input("请输入要转化的GIF图名称:")
pic2 = input("请输入GIF图转化后的名称:")
# 读取gif,将每一帧存储在pics数组中
pics = igo.mimread(pic1)
print(np.array(pics).shape)
A = []
# 允许出现的字符数
string = '0000000000000000000000000000000000000000000000000000'
count = len(string)
# 对每一帧的图片进行处理
for img in pics:
u, v, _ = img.shape
c = img * 0 + 255
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
for i in range(0, u, 6):
for j in range(0, v, 6):
pix = gray[i, j]
b, g, r, _ = img[i, j]
zifu = string[int(((count - 1) * pix) / 256)]
cv2.putText(c, zifu, (j, i), cv2.FONT_HERSHEY_COMPLEX, 0.2, (int(b), int(g), int(r), 1))
# 色度处理的图片存储于数组
A.append(c)
# 存储成新的gif
igo.mimsave(pic2, A, 'GIF', duration=0.1)
补充说明:
基本理论和图片转字符画一样,只不过这次是GIF转字符画,GIF可以看做是一帧一帧的静止图像,转化的原理一模一样,单帧转化,再拼成GIF动图。
使用说明:
- 复制上述所有源码。完整源码1,或者完整源码2,都是可单独运行的。
- 将需要字符画的GIF图放置当前文件夹下。
- Run直接运行即可,在控制台输入要转化的GIF图名字,和输出完之后的名字。
- 成功拿到图片。
- 哪里有什么问题,私聊博主即可。
最后:
更多有趣源码,资料,+扣扣群,大家一起分享