对鸡你太美的字符画绘制

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

先放上效果图
在这里插入图片描述
在这里插入图片描述

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()
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值