如何利用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!