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. python 处理CAD文件

    注意:如下的两个脚本都是我自己亲自试过的,可以运行得到结果!可以直接运行!可以直接运行! 网上的中文api能找到的不够全,工作中有用到部分功能,自己从中文英文资料里面找到一些,这里做一些总结. 画图a ...

  2. 计蒜客(Stone Game)01背包

    题意:在集合中挑一些数,形成一个集合S,剩下的数形成另一个集合P,使得S>= P ,并且对于S中任意元素ai,S-ai<=P 问有多少种方案. 题目链接:https://nanti.jis ...

  3. MarkDown学习笔记1

    # MarkDown学习(一级标题)## 标题(二级)### 三级标题#### 四级标题## 字体*Hello,World!斜体***Hello,World!加粗*****Hello,World!加粗 ...

  4. 如何保证RabbitMQ的消息不会丢失?怎么保证RabbitMQ的可靠性?

    生产者: 原因: 由于网络原因导致消息发送失败,消息队列没有接收到生产者发送的消息,但生产者认为消息发送成功. 解决办法: transaction模式:事务模式:开启事务,发送消息,成功提交事务,失败 ...

  5. 什么是spring框架

    一bai.概念:1. spring是开源的轻量级框架2 spring核心主要两部分:(1)aop:面向切面编程,扩展功能不是修改源代码实现(2)ioc:控制反转,- 比如有一个类,在类里面有方法(不是 ...

  6. DevOps Gitlab环境部署

    DevOps 介绍 目录 DevOps 介绍 一.DevOps 介绍 1.1.1 DevOps 介绍 1.1.2 CI/CD简介 1.1.2 Gitlab安装与使用 一.DevOps 介绍 1.1.1 ...

  7. vscode的下载,安装以及中文配置

    VScode是开发Go应用的基础编辑器,是Microsoft(微软的产品),可以运行在Windows.Linux.Mac Os X上使用,默认提供Go语言语法高亮,安装Go语言插件后,就可以智能提示, ...

  8. Python turtle print TaiChi

    import turtle turtle.pensize(20) turtle.pencolor("black") turtle.penup() turtle.goto(0,300 ...

  9. 用python提取txt文件中的特定信息并写入Excel

    这个是用 excel里面的 去掉空格最后导出的一个list: 原本是有空格的 后面是抵消了中间的空格. 然后 这里侧重说一下什么是split()函数 语法:str.split(str="&q ...

  10. Spring-IoC中Set和构造器注入

    新建Maven工程 修改pom文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project x ...