使用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()