使用python 将一个图片转换成ascii艺术效果

2022-08-05  本文已影响0人  追梦人在路上不断追寻

1. 定义ascii 字符串列表,包含哪些字符串。

ascii_characters_by_surface = "`^\",:;Il!i~+_-?][}{1)(|\\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$"

2.计算像素的明暗。

1_I9c1m1fD54d6skSWRKS16g.png

一个像素将表示为三个整数的元组,其值介于 0 和 255 之间——相当于红色、绿色和蓝色值。

这些值越高,像素越亮。例如,白色像素将表示为 (255, 255, 255)。

因此,我们将三个整数字段相加,以确定像素的亮度。

这也意味着我们可以获得的像素亮度的最大值将是 765——白色像素的亮度

3. 把像素转换成字符串。

现在,我们可以将像素转换为 ASCII 字符。

之后,对于给定的像素,我们可以从 ASCII 字符列表中找到其对应的索引,如下所示:

最后,我们可以通过返回该索引对应的字符将像素转换为字符。

4. 解析图片。

使用Pillow模块加载图像,读取其所有像素,并将它们转换为 (r, g, b) 元组。

将这些像素中的每一个映射到其对应的 ASCII 字符,并为图像的每一行创建一个字符串。

5. 进行图片的转换。

将所有解析内容写入一个文本文件。

from PIL import Image

ascii_characters_by_surface = "`^\",:;Il!i~+_-?][}{1)(|\\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$"


def main():
    image = Image.open('image.jpg')
    # you can first resize the image if needed
    # image = image.resize((width, height))
    ascii_art = convert_to_ascii_art(image)
    save_as_text(ascii_art)


def convert_to_ascii_art(image):
    ascii_art = []
    (width, height) = image.size
    for y in range(0, height - 1):
        line = ''
        for x in range(0, width - 1):
            px = image.getpixel((x, y))
            line += convert_pixel_to_character(px)
        ascii_art.append(line)
    return ascii_art


def convert_pixel_to_character(pixel):
    (r, g, b) = pixel
    pixel_brightness = r + g + b
    max_brightness = 255 * 3
    brightness_weight = len(ascii_characters_by_surface) / max_brightness
    index = int(pixel_brightness * brightness_weight) - 1
    return ascii_characters_by_surface[index]


def save_as_text(ascii_art):
    with open("image.txt", "w") as file:
        for line in ascii_art:
            file.write(line)
            file.write('\n')
        file.close()


if __name__ == '__main__':
    main()

上一篇下一篇

猜你喜欢

热点阅读