美文网首页
使用python 将一个图片转换成ascii艺术效果

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

作者: 追梦人在路上不断追寻 | 来源:发表于2022-08-05 23:31 被阅读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()
    
    

    相关文章

      网友评论

          本文标题:使用python 将一个图片转换成ascii艺术效果

          本文链接:https://www.haomeiwen.com/subject/wcjmwrtx.html