在python中将亮度数字转换为ASCII字符



我正在做编程项目ASCII艺术在python。到目前为止,我设法将RGB元组转换为单个亮度数字。下一步是将数字转换为ASCII字符。我被困住了,因为我不知道下一步该做什么。我必须为每个数字选择ASCII字符,数字的范围在0,255。我想得到一些提示,我该如何做这件事。

这是我到目前为止的代码。

from PIL import Image
im = Image.open("IMG_3021.jpg")
#print(im.size)
#im.show()
def load_pixel():
im = Image.open("IMG_3021.jpg")
x = list(im.getdata())
pixel = [int(sum(i)/3) for i in x]
for i in iter(pixel):
print(i)
# return pixel

#    for pixel in iter(x):
#        x = sum(pixel)//3
#        x = (x * len(pixel_ascii_map)) // 255
#        ascii_val = pixel_ascii_map[x]
#        print(ascii_val)
print(load_pixel())
from PIL import Image
pixel_ascii_map = "`^",:;Il!i~+_-?][}{1)(|\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$"
def load_pixel():
im = Image.open("IMG_3021.jpg")
x = list(im.getdata())
for pixel in iter(x):
x = sum(pixel) // 3 # integer division
ascii_val = pixel_ascii_map[x]
print(ascii_val)

注意你的ascii映射没有足够的长度(像素的范围是0-255)。因此,为了防止它,你可以重新调整x的值,以保持在地图范围内:

from PIL import Image
pixel_ascii_map = "`^",:;Il!i~+_-?][}{1)(|\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$"
def load_pixel():
im = Image.open("IMG_3021.jpg")
x = list(im.getdata())
for pixel in iter(x):
x = sum(pixel) // 3 # integer division
x = (x * len(pixel_ascii_map)) // 255 # rescaling
ascii_val = pixel_ascii_map[x]
print(ascii_val)

注意,通过做sum(pixel) // 3,你实际上是灰度化你的图像,所以你会失去任何颜色信息。

最新更新