图片转字符画-----做出酷炫的头像
想不想在简历上把自己普普通通的头像变为酷炫牛逼的大佬范?
只要不到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+= #print (txt) #写入文件 with open("image2Ascii.txt",w) as f: f.write(txt) f.close()
上一篇:
IDEA上Java项目控制台中文乱码