原图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c66c05225abfad6f240ea34f48a3007e.png)
字符画
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d130d2497755172c0fb02484ab102df9.png)
源码
'''
一张彩色的图片,有很多种颜色,要怎么把彩色转换成只有黑白色的字符画?
答案:先转换成灰度图
灰度值:指黑白图像中点的颜色深度,范围一般从 0 到 255,白色为255,黑色为 0,故黑白图片也称灰度图像
我们可以使用灰度值公式将像素的 RGB 值映射到灰度值:
gray = 0.2126 * r + 0.7152 * g + 0.0722 * b
任何一个 RGB 像素点都可以映射成一个 0~255 之间的整数。
PS:建议字符列表从左到右 由简至繁
我们可以定义一个字符列表,然后根据彩色像素点转换成的灰度值在 0~255 之间的相对位置,将灰度值替换成我们定义的字符列表中相对位置上的字符。
'''
from PIL import Image
def pixelToChar(image, charCount, charWord):
image = image.convert("L")
char = ''
for height in range(0, image.size[1]):
for width in range(0, image.size[0]):
gray = image.getpixel((width, height))
char = char + charWord[int(((charCount) * gray) / 256)]
char = char + '\r\n'
return char
if __name__ == '__main__':
picturePath = input(u'输入你的图片的存储路径:')
picturePath = picturePath.strip()
charPictureName = picturePath.split('/')[-1].split('.')[0] + 'ToCharPicture.txt'
charWord = input(u'''输入你想要填充图片的字符(建议输入的字符从左到右逐渐简化):''')
charWord = charWord.strip() + ' '
charCount = len(charWord)
txtPath = input(u'输入字符画的保存路径:')
txtPath = txtPath.strip()
if len(txtPath) == 0:
pass
else:
if not txtPath[-1].__eq__('/'):
txtPath = txtPath + '/'
txtPath = txtPath + charPictureName
pictureOpen = open(picturePath, 'rb')
image = Image.open(pictureOpen)
if image.size[0] > 1000 or image.size[1] > 1000:
print("\033[37;41m 照片尺寸太大,裁剪中...\033[0m")
if image.size[0] >= image.size[1]:
k = image.size[0] / 1000
image = image.resize((int(image.size[0] / k), int(image.size[1] / k)))
if image.size[1] > image.size[0]:
k = image.size[1] / 1000
image = image.resize((int(image.size[0] / k), int(image.size[1] / k)))
print("\033[37;41m 裁剪完成\033[0m")
txtWriter = open(txtPath, 'w')
txtWriter.write(pixelToChar(image, charCount, charWord))
txtWriter.close
print("\033[37;41m Done!\033[0m")