图片转化为字符画
发布日期:2021-06-29 16:00:20 浏览次数:2 分类:技术文章

本文共 1227 字,大约阅读时间需要 4 分钟。

我们在使用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, 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!

转载地址:https://coordinate.blog.csdn.net/article/details/79299700 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Python实现2048
下一篇:python字符串令牌解析

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月23日 00时50分29秒