python 讲图转换成字符串图
通过多线程实现多张图片同时转化成字符图
效果图如下:
用到的:
- Python pillow
from PIL import Image
import argparse
from threading import Thread
import os
ascii_char = list("$@B%8&WM#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
#根据rgb 计算灰度值
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)/length
return ascii_char[int(gray/unit)]
def start_writeChar(imagePath,toFilePath):
im = Image.open(imagePath)
#图片等比缩放到 高50 自己可以调整
yw,yh = im.size
bl = yw/yh
im = im.resize((50, int(50*bl)), Image.NEAREST)
width , height = im.size
txt = ""
for i in range(height):
for j in range(width):
txt += get_char(*im.getpixel((j, i)))
txt += '\n'
# 字符画输出到文件
if toFilePath:
with open(toFilePath, 'w') as f:
f.write(txt)
print(toFilePath + "导出成功")
return
print(toFilePath +"导出失败")
if __name__ == "__main__":
imagePath = r"D:\work\图片转字符图\image"
toPath = r"D:\work\图片转字符图\chartxt"
filenameList = os.listdir(imagePath)
#os.path.splitext(fileName) 将文件名和后缀分开
for fileName in filenameList:
targetTxt = os.path.splitext(fileName)[0]
targetTxt = targetTxt + ".txt"
tr = Thread(target=start_writeChar,args=(os.path.join(imagePath,fileName),os.path.join(toPath,targetTxt)))
tr.start()
通过自己改进的网上的小案例,感谢网友提供想法和资源