python 图片转字符画

虽然我PHP教程还没写完呢,我昨天试图写来着,后来又没写。:cry:

我女朋友不知道为啥又生气了,昨天早上还好着呢,中午就生气了,到现在我还不知道为什么。:cry:

没关系,我长大了,听一首不可撤销的 启程 压压惊。 :cry:

我想我今天应该做点什么?起床洗头发,想啊想啊,做这个 python 图片转字符画。

简单介绍一部分,后面贴代码和效果图。

  • 需要 PIL 库

pip install pil 安装了半天安装不了,但是 pip search pil 确实搜索到了,找了半天,好像 pillow 和 pil 是一个东西。

Pillow 是 PIL的对Python3支持的另外一个分支,当然他对Python2也兼容,由于PIL安装起来比较烦,而使用pip可以很轻松的安装Pillow,所以我选择Pillow使用,但是其核心还是PIL库的。

  • 灰度值

灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像

可以使用灰度值公式将像素的 RGB 值映射到灰度值:

gray = int(0.2126*r+0.7152*g+0.0722*b)

下面是完整的代码:

# -*- coding: utf-8 -*-
# by opqnext.com, 2017.02.08
from PIL import Image
import argparse

# 接收参数
parser = argparse.ArgumentParser()

parser.add_argument('file')
parser.add_argument('-o', '--output')
parser.add_argument('--width', type=int, default=80)
parser.add_argument('--height', type=int, default=80)

args = parser.parse_args()

IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!;:,\"^`'.")

def get_char(r, b, g, alpha=256):
    if alpha == 0:
        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)]

if __name__ == '__main__':
    im = Image.open(IMG)
    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'

    print txt

然后截取一张效果图,一目了然,你在做的东西是什么?

python 图片转字符画_第1张图片
pillow.png

魔镜啊,魔镜呐,你说...

你可能感兴趣的:(python 图片转字符画)