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()
这些东西刚开始都不知道干啥,一个个函数搜,一点东西弄了几天。
badapple最后一步,讲黑白图转为字符图,然后输出就行了。的更多相关文章
- matlab将rgb图转为灰度图的原理代码
MyYuanLaiPic = imread('e:/image/matlab/Cluo.jpg');%读取RGB格式的图像 MyFirstGrayPic = rgb2gray(MyYuanLaiPic ...
- QImage Color Convert to Gray 转为灰度图
在Qt中,我们有时需要把QImage类的彩色图片转为灰度图,一开始我想的是用QImage的成员函数convertToFormat(),但是试了好多参数,返现转化的图片都有问题,不是我们想要的灰度图,如 ...
- 普通图片转ascii码字符图
效果图 基本思路 把图片每个像素点的信息拿出来,最重要的是拿到rgb的值 把每个像素点由rgb转成灰度图像,即0-255 给0-255分级,把每个等级的像素点转换成ascii码,完成 实现 第一步:获 ...
- 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)
项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...
- PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]
PGL图学习之图神经网络ERNIESage.UniMP进阶模型[系列八] 原项目链接:fork一下即可:https://aistudio.baidu.com/aistudio/projectdetai ...
- UML 用例图、顺序图、状态图、类图、包图、协作图、流程图
用例图.顺序图.状态图.类图.包图.协作图 面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling La ...
- UML实践详细经典教程----用例图、顺序图、状态图、类图、包图、协作图
面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML ...
- UML学习(类图和序列图等)
visio绘制UML图使用visio 提示此UML形状所在的绘图页不是UML模型图的一部分 请问这个问题怎么解决?新建->选择绘图类型->选择软件与数据库模板->选择UML模型图-& ...
- Java 图片转换为字符图 CharMaps (整理)
/* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...
- (转)UML实践----用例图、类图、对象图、顺序图、协作图、状态图、活动图、组件图、配置图
面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML ...
随机推荐
- JS篇(008)-require 与 import 的区别
答案:两者的加载方式不同.规范不同 第一.两者的加载方式不同,require 是在运行时加载,而 import 是在编译时加载 require('./a')(); // a 模块是一个函数,立即执行 ...
- Nebula Exchange与集群guava版本不一致问题
1.集群版本 Hadoop 3.1.1.3.1.4.0-315 Hive (version 3.1.0.3.1.4.0-315) Spark 2.3.2.3.1.4.0-315 Scala versi ...
- CMD Debug大全
'service' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 先看环境变量配置是否到位,再使用管理员运行cmd
- axios基本配置
点击查看代码 <!-- axios基础用法 --> <script> /** * axios:一款基于promise设计模式封装的ajax库(JQ中的ajax就是最普通的aja ...
- Vue双向绑定原理 从vue2的Object.defineProperty到vue3的proxy
在网上查找资料的时候,看到很多关于Vue双向绑定的文章都直接说是通过Object.defineProperty实现的,但我隐约记得去年看过尤大的视频,记得好像是用proxy实现的,所以又好好找了一下, ...
- 通达OA设计表单的小总结
16px下: 2010-09-09 80px 一般 100px 占5个字符 2010年09月09日 112px 一般120px 对应计算控件30px 占7个字符 2010-09-09时分秒 14 ...
- 港湾云服务器 香港新世界 节点 centos7.7 64 部署java项目
开通云服务器 使用Xshell远程登录 XFTP连接服务器查看文件(这个步骤可有可无) yum安装jdk 在linux上使用yum安装是非常粗暴无脑的,但仍然有需要注意的点,不然会掉坑里.这里说一下步 ...
- 4vue 属性绑定
属性绑定v-bind <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 【Win11】电脑开机内存占用过高
联想拯救者 Y7000P 1.Win+R打开运行输入"MdSched" 重启 2.Windows PowerShell(管理员)->并运行该命令 Disable-MMAg ...
- .NET 6 的 docker 镜像可以有多小
https://blog.csdn.net/sD7O95O/article/details/120135032 Docker Image Size - How to Keep It Small? ht ...