# -*- coding:utf-8 -*-
# author: tongwandou time:2018/8/22
import os
from PIL import Image, ImageFont, ImageDraw
# ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
# ascii_char = list("!@#$%^&*()_+")
ascii_char = list("$@B%8&WM#*oahkbdpqwmZ$@%8&#*ocvun$@%8&#*o\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
# ascii_char = list("$@%8&#*oahkbdpqwmzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
# ascii_char = list("QWERTYUIOPASDFGHJK、LZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890!!@#$%^&*()_+-=~`")
# 将256灰度映射到70个字符上
def get_char(r, g, b, alpha=256):
if alpha == 192: # 如果背景为白色则不填充字符
return ' '
length = len(ascii_char)
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
unit = (256.0 + 1)/length
return ascii_char[int(gray/unit)]
# 字符化
def image_to_chr(im):
w, h = im.size
WIDTH, HEIGHT = 100, 100 * h // w
im = im.resize((WIDTH, HEIGHT), Image.NEAREST)
txt = ""
for i in range(HEIGHT):
for j in range(WIDTH):
txt += ' ' + get_char(*im.getpixel((j, i)))
txt += '\n'
return txt, WIDTH, HEIGHT
# 画图
def draw(txt, WIDTH, HEIGHT):
im = Image.new("RGB", (WIDTH*10, HEIGHT*13), (255, 255, 255)) # 修改输出的图像大小WIDTH*10, HEIGHT*13)
dr = ImageDraw.Draw(im)
font = ImageFont.truetype(os.path.join("fonts", "simsun.ttc"), 10)
dr.text((10, 10), txt, font=font, fill="#000000")
im.show()
im.save("new.png")
if __name__ == '__main__':
im = Image.open('Git猫.jpg')
txt, WIDTH, HEIGHT = image_to_chr(im)
draw(txt, WIDTH, HEIGHT)