python將圖片轉化爲字符圖

最近看到將圖片轉化爲字符圖的小實驗,我覺得很有趣,所以決定自己實現一下。

步驟和原理如下:

  • 讀取圖片的灰度值矩陣(0-255之間),灰度值矩陣主要反映的是圖片的黑白程度,越黑越接近與0,越白越接近於255

  • 確定用於作畫的字符

  • 根據灰度值確定代替字符,灰度值越小,其代替字符應該筆畫越多(這樣才能看起來顏色更深)

  • 把全部選好的代替字符寫入文本

  • 選擇字符的做法:用256(0-255又256個數)除以可以用於作畫的字符的總長度,然後得到一個字符的灰度值區間。然後灰度值在某個區間是就轉化爲指定的字符。

  • 我從google圖片下載了一張小豬佩奇的圖片,侵刪,然後用它來畫字符畫,結果如下:
    小豬佩奇小豬佩奇字符畫

還是蠻像的!
代碼如下:

# coding: utf-8

import numpy as np
from PIL import Image

def img_to_char(image_path,height):
    '''
    將圖片轉化爲字符
    image_path是圖片的路徑
    height是字符串圖片的高度
    '''

    #讀取圖片
    img = Image.open(image_file)
    img_width, img_height = img.size
    # 假設字符的寬度是高度的3倍
    width = 3* height * img_width // img_height
    img = img.resize((width, height), Image.ANTIALIAS)
    #讀取圖片的灰度值矩陣
    data = np.array(img.convert('L'))
    #設定字符,字符數要是256的因子,這裏取32
    chars = "#RMNHQODBWGPZ*@$C&98?32I1>!:-;. "
    N = len(chars)
    #計算每個字符的區間,//取整
    n = 256 // N
    #result是字符結果
    result = ''
    for i in range(height):
        for j in range(width):
            result += chars[data[i][j] // n]
        result += '\n'
    with open('img.txt', mode='w') as f:
        f.write(result)


if __name__ == '__main__':
    image_file = '10.jpg'
    height = 100
    img_to_char(image_file,height)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章