badapple最后一步,讲黑白图转为字符图,然后输出就行了。
from PIL import Image import os char_s = list(" .,-'`:!1+*abcdefghijklmnopqrstuvwxyz<>()\/{}[]?234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ%&@#$") # 这个是颜色的深浅,我调的是让空白动,原图越黑越稀疏
# 下面一个函数是讲像素映射成阿斯特码 def get_char(r,g,b,alpha=256): if alpha == 0: return ' ' # 转换字符集的长度做准备 length = len(char_s) # 像素的RGB值转换成灰度值 gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) # 计算每个字符对应的gray值区间宽度 # 因为RGB每个分量取值都在0~255之间,所以灰度值gray最大值为256。假如unit计算的区间宽度小于正常256的值, # 在idx对应字符集中字符的时候就会对应不上,出现报错 unit = (256.0 + 1) / length # gray值对应到char_s中的位置(索引值),注意返回的是[] idx = int(gray / unit) return char_s[idx]
def gettxt(photo_path, save_path): filelist = os.listdir(photo_path) filelist.sort(key=lambda x: int(x[:-4])) # 这个很重要,因为默认的按照字典序打开,按照除了后缀外的int类型排序。 show_heigth = 30 # 打印出来的文本大小 show_width = 90 num = int(0) for item in filelist: num += 1 print('转化到%d张' % num) item = photo_path + item rgb_im = Image.open(item) txt_name = save_path + str(num) + '.txt' newfil = open(txt_name, 'w') im = rgb_im.convert('RGB') im = im.resize((show_width, show_heigth), Image.NEAREST) text = "" for i in range(show_heigth): for j in range(show_width): text += get_char(*im.getpixel((j, i))) text += '\n' newfil.write(text) # newfil.close() def main(): read_path = 'E:\\try apple\\1th\\' save_path = 'E:\\try apple\\2th\\'
# 这样就很简单了,直接输入图片的位置,和要保存到的位置。 gettxt(read_path, save_path) if __name__ == '__main__': main()
接下来输出就行了:
import os import time import threading from playsound import playsound def getmove(photo_path): filelist = os.listdir(photo_path) filelist.sort(key=lambda x: int(x[:-4])) for item in filelist: time.sleep(0.02) # 自己做完才知道并不是直接就音画同步了,要自己一点点调,再用pr一点的调。 # os.system("cls") # 有这个速度会变慢,自己试一下就知道了。 filename = photo_path + item fil = open(filename, 'r') print(fil.read()) fil.close() def play_audio(music_path): playsound(music_path) def main(): read_path = 'E:\\try apple\\2th\\' getmove(read_path)
# 下边这么多是我多线程播放音乐的代码,用到playsound这个,想弄的也可以弄,但是音画不同步,所以我也没用。 same = [] music_path = 'app.mp3' # same.append(threading.Thread(target=getmove, args=(read_path,))) # same.append(threading.Thread(target=play_audio, args=(music_path,))) # for i in same: # # i.setDaemon(True) # i.start() # play_audio(music_path) # while True: # pass if __name__ == '__main__': main()
这些东西刚开始都不知道干啥,一个个函数搜,一点东西弄了几天。