您的位置:首页 > 其它

图片转化为字符画

2018-02-09 16:22 232 查看
我们在使用linux的软件的时候经常会看到这样的字符画。



你千万别认为是像C语言那样一个个字符打上去的^_^!今天我将通过python实现一个图片转化为字符画的小工具。

首先我们需要定义一些字符,我们这里定义了这些字符

ASSIIC_CHAR = list("123q$e@x")


我们希望我们输出的字符是有颜色的,这里我们用到了
colorama
里面的
Fore
,也就是前景色。具体用法如下

COLORS = [Fore.BLACK, Fore.RED, Fore.GREEN, Fore.YELLOW, Fore.BLUE, Fore.MAGENTA, Fore.CYAN, Fore.WHITE]
COLORS_RGB = [(0,0,0), (255,0,0), (0, 255,0), (255,255,0), (0,0,255), (255,0,255), (0,255,255), (255,255,255)]
print(COLORS[i]+"string")


因为这里只有8种颜色,所以我们的字符数量也是8个。

接着我们定义计算颜色距离的函数,也就是描述两种颜色之间的相似程度

def i2(r, g, b):
color_len = []
for i in COLORS_RGB:
temp = (i[0] - r)**2 + (i[1] - g)**2 + (i[2] - b)**2
color_len.append(temp)
return color_len.index(min(color_len))


接着我们定义获取字符的函数

def get_char(r, g, b, a=256):
i = i2(r,
4000
g, b)
return ASSIIC_CHAR[i], i


通过这个函数,我们获得各颜色对应的字符以及各自的位置。

最后在主函数中打开一幅图片,并且对图片大小重新定义,读取重定义后的每个图片的像素,测算像素对应的颜色。

if __name__ == '__main__':
pic = Image.open(IMG)
pic = pic.resize((WIDTH, HEIGHT), Image.NEAREST)
pic.show()
txt = ""
for i in range(HEIGHT):
for j in range(WIDTH):
ch, w = get_char(*pic.getpixel((j, i)))
print(COLORS[w]+ch*3, end='')
txt += ch
print('\n')
txt += '\n'


最后的效果图



项目地址,give me a star O(∩_∩)O!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: