图片转化为字符画

我们在使用linux的软件的时候经常会看到这样的字符画。

图片转化为字符画_第1张图片

你千万别认为是像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'

最后的效果图

图片转化为字符画_第2张图片

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

你可能感兴趣的:(python,python小项目)