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()

这些东西刚开始都不知道干啥,一个个函数搜,一点东西弄了几天。

badapple最后一步,讲黑白图转为字符图,然后输出就行了。的更多相关文章

  1. matlab将rgb图转为灰度图的原理代码

    MyYuanLaiPic = imread('e:/image/matlab/Cluo.jpg');%读取RGB格式的图像 MyFirstGrayPic = rgb2gray(MyYuanLaiPic ...

  2. QImage Color Convert to Gray 转为灰度图

    在Qt中,我们有时需要把QImage类的彩色图片转为灰度图,一开始我想的是用QImage的成员函数convertToFormat(),但是试了好多参数,返现转化的图片都有问题,不是我们想要的灰度图,如 ...

  3. 普通图片转ascii码字符图

    效果图 基本思路 把图片每个像素点的信息拿出来,最重要的是拿到rgb的值 把每个像素点由rgb转成灰度图像,即0-255 给0-255分级,把每个等级的像素点转换成ascii码,完成 实现 第一步:获 ...

  4. 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

    项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...

  5. PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]

    PGL图学习之图神经网络ERNIESage.UniMP进阶模型[系列八] 原项目链接:fork一下即可:https://aistudio.baidu.com/aistudio/projectdetai ...

  6. UML 用例图、顺序图、状态图、类图、包图、协作图、流程图

    ​用例图.顺序图.状态图.类图.包图.协作图 面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling La ...

  7. UML实践详细经典教程----用例图、顺序图、状态图、类图、包图、协作图

    面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML ...

  8. UML学习(类图和序列图等)

    visio绘制UML图使用visio 提示此UML形状所在的绘图页不是UML模型图的一部分 请问这个问题怎么解决?新建->选择绘图类型->选择软件与数据库模板->选择UML模型图-& ...

  9. Java 图片转换为字符图 CharMaps (整理)

      /* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...

  10. (转)UML实践----用例图、类图、对象图、顺序图、协作图、状态图、活动图、组件图、配置图

    面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML ...

随机推荐

  1. SQLServer数据库,使用Alter修改表的主外键结构

    1.先创一张测试表,直接在创建时,设置UserId为主键 2.检查表有无主键约束 也可以使用SQL语句查询 SELECT name FROM sys.key_constraintsWHERE type ...

  2. C#定时任务(Timer)

    新建Timer类 using BaseAsset.Data.Infrastructure; using BaseAsset.Data.Repositories; using BaseAsset.Ent ...

  3. 关于zookeeper集群的理解

    一.zookeeper集群节点容错性 1.在集群模式下,建议至少部署3个zk进程,或者部署奇数个zk进程.如果只部署2个zk进程,当其中一个zk进程挂掉后,剩下的一个进程并不能构成一个quorum的大 ...

  4. memoのVIM

    必须给今天看到的vim相关的东西记录一下! vim文档中文化 https://github.com/yianwillis/vimcdoc 速查表 https://github.com/skywind3 ...

  5. memoのMac折腾记录

    memoのMac折腾记录 纯粹是一些零散的学习记录.有错误欢迎指出. 我就是一鼠标党,不会Linux. zsh加载 惭愧,最近才知道bash和zsh是两个不同的终端... 之前看一些mac设置系统环境 ...

  6. js操作网页元素

    二.操作网页元素 1.查找网页元素 给标签设置id属性,一个网页中id的值不能出现重复的 <button id="btn">按钮</button> 2.给按 ...

  7. 1903021126-申文骏-Java第十一周作业-Java中继承、多态及抽象类的使用

    项目 内容 课程班级博客链接 19级信计班(本) 作业要求链接 第十一周作业 博客名称 1903021126-申文骏-Java第十一周作业-Java中继承.多态及抽象类的使用 作业要求 每道题要有题目 ...

  8. 笔记:vue.nextTick()方法的使用详解

    vue.nextTick定义: 在下次DOM更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的DOM. 简单理解:数据更新了,在dom渲染后立即执行该函数 举例 注意:Vue实 ...

  9. Number(数字)

    Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对 ...

  10. JAVA——》微信分账

    做一个推荐分享的功能,场景:每推荐成功奖励推荐人一定的推荐金. 这里,我就用调用了微信支付分账接口.链接:https://pay.weixin.qq.com/wiki/doc/api/allocati ...