python 圖片轉(zhuǎn)字符畫

雖然我PHP教程還沒寫完呢,我昨天試圖寫來著,后來又沒寫。:cry:

我女朋友不知道為啥又生氣了,昨天早上還好著呢,中午就生氣了,到現(xiàn)在我還不知道為什么。:cry:

沒關(guān)系,我長大了,聽一首不可撤銷的 啟程 壓壓驚。 :cry:

我想我今天應(yīng)該做點(diǎn)什么?起床洗頭發(fā),想啊想啊,做這個(gè) python 圖片轉(zhuǎn)字符畫。

簡單介紹一部分,后面貼代碼和效果圖。

  • 需要 PIL 庫

pip install pil 安裝了半天安裝不了,但是 pip search pil 確實(shí)搜索到了,找了半天,好像 pillow 和 pil 是一個(gè)東西。

Pillow 是 PIL的對Python3支持的另外一個(gè)分支,當(dāng)然他對Python2也兼容,由于PIL安裝起來比較煩,而使用pip可以很輕松的安裝Pillow,所以我選擇Pillow使用,但是其核心還是PIL庫的。

  • 灰度值

灰度值:指黑白圖像中點(diǎn)的顏色深度,范圍一般從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

# 接收參數(shù)
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

然后截取一張效果圖,一目了然,你在做的東西是什么?

pillow.png

魔鏡啊,魔鏡吶,你說...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容