如何用Python将图片转为字符画
作者:GSGundam 发布时间:2022-06-15 09:26:06
标签:Python,字符画
今天打算玩个好玩的,也是基于一个优秀的图像处理库——PIL,使用ascii字符把图片转为黑白字符画。
首先有个问题,就是模拟灰度,这里有个公式:
1 | Gray = 0.2126 × R + 0.7152 × G + 0.0722 × B |
这样就好办了。当然,RGB模式下,256x256x256的颜色范围虽然被转换成了256的灰度范围,字符还是不好一一对应。我们可以使用一个字符对应多个灰度的方式来解决。
记得要先安装PIL库,其中:
如果是Python 2,运行 pip install PIL
。
如果是Python 3,运行 pip install pillow
。
接下来直接上代码吧:
from PIL import Image
#设置显示的字符集
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
WIDTH = 130
HEIGHT = 50
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 = (255.0 + 1)/length
return ascii_char[int(gray/unit)]
if __name__ == '__main__':
img = "E:/WindowsDocuments/G7/Desktop/1.png"
im = Image.open(img)
im = im.resize((WIDTH,HEIGHT), Image.NEAREST)
txt = ""
for i in range(HEIGHT):
for j in range(WIDTH):
txt += get_char(*im.getpixel((j,i)))
txt += '\n'
print(txt)
如果想要输出到文件,可以在定义的部分,加上想要保存的文件名 OUTPUT = 'output.txt'
,然后在最后写进去:
with open(OUTPUT, 'w') as f:
f.write(txt)
最后,我们得到了这个:
来源:https://www.gsgundam.com/archive/2022-07-10-how-to-draw-image-ascii-python-pil/


猜你喜欢
- Google Talk是一个功能很简洁的即时通讯工具,尤其是它的文字输入区域,不同于其他IM,除了一个文字输入区域外没有任何其他操作。但是用
- 其实和爬取普通数据本质一样,不过我们直接爬取数据会直接返回,爬取图片需要处理成二进制数据保存成图片格式(.jpg,.png等)的数据文本。现
- Windows•安装lxml最好的安装方式是通过wheel文件来安装,http://www.lfd.uci.edu/~gohlke/pyth
- 偶然将想到的一个如何判断鼠标从哪个方向进入一个容器的问题。首先想到的是给容器的四个边添加几块,然后看鼠标进入的时候哪个块先监听到鼠标事件。不
- 导航是网页设计的重点,我们在设计一个网站的时候,常常从导航入手,不夸张的说,导航的设计甚至决定了整个网站的风格。这就需要我们平常多留心收集优
- 接上篇微信小程序后端搭建:分享:Laravel 微信小程序后端搭建后端搭建好后第一件事就是用户登录认证,简单实现微信小程序登录认证1.use
- 1 各种疫苗梳理截至2022年3月,中国已经向120多个国家和国际组织提供了超过21亿剂疫苗,占中国以外全球疫苗使用总量的1/3。1.1 灭
- 跨域当我们遇到请求后台接口遇到 Access-Control-Allow-Origin 时,那说明跨域了。跨域是因为浏览器的同源策略所导致,
- 事件的概念事件:指的是文档或者浏览器窗口中发生的一些特定交互瞬间。我们可以通过 * (或者处理程序)来预定事件,以便事件发生的时候执行相应的
- 安装部分所需文件在最下方提供STEP1双击mysql-installer-web-community-8.0.18.0.msi进行按钮如果出
- 一:绑定方法:其特点是调用方本身自动作为第一个参数传入1.绑定到对象的方法:调用方是一个对象,该对象自动传入2.方法绑定到类:调用方是类,类
- 看代码吧~name = r"\u6697\u88d4\u5251\u9b54"print(name.encode(
- 问题:如何在报表中每隔N行显示一条粗线如何为报表增加一个行号列?回答:1、在设计模式里打开该报表,在报表主体里面加一个TextBox,把Na
- 俗话说‘人生苦短,我有Python',但是如果初学Python的过程中碰到包和Python版本的问题估计会让你再苦一会,我在学习Py
- 在linux服务器lvs负载均衡、双机热备应用中经常用到mysql双机热备,安装和配置过程如下:一、 安装MYSQL# cp mysql-s
- Pygal可用来生成可缩放的矢量图形文件,对于需要在尺寸不同的屏幕上显示的图表,这很有用,可以自动缩放,自适应观看者的屏幕1、Pygal模块
- 三种方法利用indexOf判断新数组underscore.js中实际上也是使用的类似的indexOf //传入数组 function uni
- 我们都有过函数调用的经历,那么call调用类实例的过程就跟函数很相似。类的用法很多人都知道了,类实例又是什么呢?可以把类看成一个设计图,类实
- <!doctype><html><head><title>新闻图片轮换类</title
- 一、介绍正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配;由于Nmap内嵌的服务与版本探测是使用的Perl正则