本文以鸡你太美为例子进行图片的字符画绘制。
1.getpixel() 如果图像为多通道,返回图像四元元组RGBA值。
那么什么是多通道图像呢? 一般的彩色图像由R、G、B三种颜色组成,也就是说一幅图片由R、G、B三个通道组成。(ps: Image 类中的split方法能够 提取出RGB图像中的各个颜色通道)
RBGA 中RBG指的是像素点的RGB值,其中的A可以理解为透明度,其中白色为255,黑色为0
2.getpixel 的参数为一个元组,代表像素点的坐标
在后面的代码中可以看到,使用的是(j,i),为什么是这样的呢,在图片中,像素点的(0,0) 坐标为图片的左上角,而随着列的右移,变化的是(x,y) 中的x,随着行的下移,变化的是y。 使用画图软件打开一张图片,也可以很清楚的看出图片像素值的变化情况
3.图像的色彩信息无法被黑白ASCII字符直接模拟,可以使用灰度值将彩色图像转换为高质量的黑白文稿。我们定义彩色向灰度的转换公式为:
GRAY= R* 0.2126 + G*0.7152 + B *0.0722
from PIL import Image
ascii_char = list(r"$@&%B#=-. ")
def get_char(r,b,g,alpha=256):
gray=int(0.2126*r+0.7152*g+0.0722*b)
unit=256/len(ascii_char)
return ascii_char[int(gray//unit)]
def main():
im=Image.open('cxk.jpg')
w,h=50,30
im=im.resize((w,h))
txt=''
for i in range(h):
for j in range(w):
txt+=get_char(*im.getpixel((j,i)))
txt+='\n'
fo = open("test.txt",'w')
fo.write(txt)
fo.close()
print("ok")
if __name__=='__main__':
main()