虽然我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
然后截取一张效果图,一目了然,你在做的东西是什么?
魔镜啊,魔镜呐,你说...