图片转字符画-----做出酷炫的头像

想不想在简历上把自己普普通通的头像变为酷炫牛逼的大佬范?

只要不到50行代码就能实现!!!

下面代码中ascii_char的字符列表,可以自行调整到符合自己满意的程度。

from PIL import Image

IMG='i.png'

WIDTH=90
HEIGHT=45

#ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
#经过调试,以下字符显示效果更好,而且也符合灰度值变化
ascii_char = list("@#&$*ox!i;.")

#将256灰度映射到70个字符上
# 图片格式为RGB的*im.getpixel((j,i)后会得到三个参数r(red),g(green),b(blue);RGBA得到四个参数r,g,b,alpha(透明度,0表示完全透明)
    # im.getpixel((j,i))得到一个由r, g, b, alpha(如果有的话)构成的元祖,加上*号即表示拆分元祖分别赋值引用
def get_char(r,g,b,alpha=256):#alpha透明度
     # 如果是透明的,则输出空格
    if alpha==0:
        return ' '
    length=len(ascii_char)
       # r,g,b转换为灰度值,白色是255,黑色是0
    gray=int(0.2126*r+0.7152*g+0.0722*b)#计算灰度
     # 单元字符的灰度值大小
    unit=(256.0+1)/length
     # 字符从小到大表示灰度值,已知灰度值大小,一个字符表示的灰度值大小,求该灰度值由第几个字符表示,ascii_char[i]
    return ascii_char[int(gray/unit)]
    #通过灰度来区分色块

if __name__=='__main__':
    im=Image.open(IMG)
    im=im.resize((WIDTH,HEIGHT),Image.NEAREST)
     # im.resize(size,filter)
    # 变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一
    # 如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST,速度快
    # ANTIALIAS 抗锯齿,质量最高;BICUBIC 三次样条插;BILINEAR 线性插值法
    txt=""
    for i in range(HEIGHT):
        for j in range(WIDTH):
            txt+=get_char(*im.getpixel((j,i)))
        txt+='\n'

    #print (txt)
    #写入文件
    with open("image2Ascii.txt",'w') as f:
        f.write(txt)
        f.close()

猜你喜欢

转载自blog.csdn.net/weixin_42499361/article/details/81949732