对鸡你太美的字符画绘制

本文以鸡你太美为例子进行图片的字符画绘制。

先放上效果图
在这里插入图片描述
对鸡你太美的字符画绘制_第1张图片

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()

你可能感兴趣的:(python)