前言:
實例1
實例2
前言:字符畫:字符畫是一系列字符的組合,我們可以把字符看作是比較大塊的像素,一個字符能表現一種顏色,字符的種類越多,可以表現的顏色也越多,圖片也會更有層次感。
如果我們想要手工繪制出字符畫,首先要有扎實的美術基礎,其次還要花費大量的時間和精力。但是我們可以使用Python,只需要幾行代碼,就能夠將一張圖片輕而易舉地轉化為一個字符畫。
實例1效果圖:
理論很簡單,就是對圖片操作,這裡需要用到PIL的python包,裡面有很好用的圖像處理功能。
先打開圖片,把圖像調整大小:
img = Image.open(picPath)img = img.resize((picW, picH))
然後讀取灰度值,再把灰度值和字符對應起來就行。
from PIL import ImagelstChars = list("[email protected]%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 = 40picW = 80img = 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 ImageIMG = 'IMG.jpg' # 設置圖片文件WIDTH = 150 # 設置字符畫的寬HEIGHT = 80 # 設置字符畫的高OUTPUT = 'T.txt' # 設置存放字符畫的文本文件ascii_char = list("[email protected]%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字符畫內容請搜索軟件開發網以前的文章或繼續浏覽下面的相關文章希望大家以後多多支持軟件開發網!