前言
最初是在实验楼看到的一个小实验
原文是需要通过命令行运行程序
这里改为直接运行,需要固定一些参数
运行平台: windows
python版本: python3.6
ide: sublime text
1、实验准备
pillow库的安装
1
|
pip install pillow
|
2、实验原理
字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色,字符的种类越多,可以表现的颜色也越多,图片也会更有层次感。
最终显示的是黑白色的字符画,那么彩色的图片怎么转换成黑白的呢?这里就需要了解灰度值的概念了。
<span style="font-size:16px;">灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像。</span>
我们利用下面的公式将像素的rgb值转换成灰度值:
<span style="color:#ff0000;">gray = 0.2126 * r + 0.7152 * g + 0.0722 * b</span>
用不同的字符代表不同的灰度值,字符的种类和数量可以根据自己需要的效果进行调整,最好从前往后可以看到明显的变化,最后一个字符为空格符最佳:
ascii_char = list("$@b%8&wm#*oahkbdpqwmzo0qlcjuyxzcvunxrjft/\|()1{}[]?-_+~<>i!li;:,\"^`'. ")
3、完整代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#-*- coding:utf-8 -*-
from pil import image
img = 'd:\code\python\\test1\\ascii_dora.png'
width = 60
height = 45
ascii_char = list ( "$@b%8&wm#*oahkbdpqwmzo0qlcjuyxzcvunxrjft/\|()1{}[]?-_+~<>i!li;:,\"^`'. " )
#将256灰度映射到70个字符上
def get_char(r,g,b,alpha = 256 ): #alpha透明度
if alpha = = 0 :
return ' '
length = len (ascii_char)
gray = int ( 0.2126 * r + 0.7152 * g + 0.0722 * b) #计算灰度
unit = ( 256.0 + 1 ) / length
return ascii_char[ int (gray / unit)] #不同的灰度对应着不同的字符
#通过灰度来区分色块
if __name__ = = '__main__' :
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)
#写入文件
with open ( "output.txt" , 'w' ) as f:
f.write(txt)
|
4、结果
总结
到此这篇关于python实现图片转字符画的文章就介绍到这了,更多相关python图片转字符画内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/qq_20464153/article/details/79777823