首頁 > 軟體

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

2022-06-24 22:01:09

前言:

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

如果我們想要手工繪製出字元畫,首先要有紮實的美術基礎,其次還要花費大量的時間和精力。但是我們可以使用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:UsersAdministratorDesktop\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字元畫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com