python 小程序--图片转字符画

# -*- 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)

Git猫

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值