想不想在简历上把自己普普通通的头像变为酷炫牛逼的大佬范?
只要不到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()