如何利用python實現圖片轉化字符畫

前言:

字符畫:字符畫是一系列字符的組合,我們可以把字符看作是比較大塊的像素,一個字符能表現一種顏色,字符的種類越多,可以表現的顏色也越多,圖片也會更有層次感。

如果我們想要手工繪制出字符畫,首先要有紮實的美術基礎,其次還要花費大量的時間和精力。但是我們可以使用Python,隻需要幾行代碼,就能夠將一張圖片輕而易舉地轉化為一個字符畫。

實例1

效果圖:

理論很簡單,就是對圖片操作,這裡需要用到PIL的python包,裡面有很好用的圖像處理功能。

先打開圖片,把圖像調整大小:

img = Image.open(picPath)
img = img.resize((picW, picH))

然後讀取灰度值,再把灰度值和字符對應起來就行。

from PIL import Image
lstChars = list("$@B%8&WM#*oahkbdpqwmZO0QLaCJUYXzczjhdhsdavunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.") 
def oneChars(r, g, b, alpha = 256):
    global lstChars
    length = len(lstChars)
    gray = int(0.2126 * r + 0.7152 * g + 0.722 * b)
    index =length*gray
    return lstChars[index]
picPath = "C:\Users\Administrator\Desktop\\aaaaa\\aa.png"
picH = 40
picW =  80
img = Image.open(picPath)
img = img.resize((picW, picH))
txt = ""
for y in range(picH):
    for x in range(picW):
        txt += oneChars(img.getpixel((x, y)))
    txt += '\n'

print txt

實例2

下面是源碼:

# -*- coding=utf-8 -*-
from PIL import Image
IMG = 'IMG.jpg'  # 設置圖片文件
WIDTH = 150  # 設置字符畫的寬
HEIGHT = 80  # 設置字符畫的高
OUTPUT = 'T.txt'  # 設置存放字符畫的文本文件
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")  # 設置顯示的字符集
# 將256灰度映射到70個字符上
def get_char(r, g, b, alpha=256):
   # alpha為透明度
   # 判斷 alpha 值,為0表示全透明
   if alpha == 0:
       return ' '
   # 獲取字符集的長度,這裡為 70
   length = len(ascii_char)
   # 將 RGB 值轉為灰度值 gray,灰度值范圍為 0-255
   gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
   # 灰度值范圍為 0-255,而字符集隻有 70
   # 需要進行如下處理才能將灰度值映射到指定的字符上
   # 防止當灰度值為255時,輸出的第70個字符超出列表索引,所以需要將(255+1)
   unit = (255.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):
           # 將 (j,i) 坐標的 RGB 像素轉為字符後添加到 txt 字符串
           txt += get_char(*im.getpixel((j, i)))
       # 遍歷完一行後需要增加換行符
       txt += '\n'
   # 輸出到屏幕
   print(txt)
   with open(OUTPUT, 'w') as f:
       f.write(txt)

直接粘貼即可,隻需要在文件夾中導入一張圖片重命名為IMG.jpg。運行結果會生成一個名為T.txt的文件。

原圖:

生成文件圖:

到此這篇關於如何利用python實現圖片轉化字符畫的文章就介紹到這瞭,更多相關python字符畫內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: