利用Python 實現圖片轉字符畫
前言
相信大傢在網上經常看到有人秀出各種各樣的字符畫,對於這個五彩斑斕的世界來說,我們日常看到的都是一些高清的彩色的圖片,偶爾來個粗糙的黑白的字符畫,還是比較解乏的。喜歡記得收藏、關註、點贊。
字符畫的原理
這種字符畫的原理也比較簡單,我們可以把每個字符看成是一個大的像素,一個字符可以代表一種顏色,字符各類越多,可體現的顏色越多,字符畫就更有層次感。
灰度值和RGB
灰度值是指黑白圖像中點的顏色的深度,它的范圍是0-255,白色為255,黑色為0,其他顏色介於兩者之間。
RGB 是紅綠藍三顏色,通過不同的疊加可得到其他顏色。
要將圖片轉字符畫,需要先定義一個字符集,用來和灰度值做映射,將圖片每個像素的 RGB 值轉換為一個灰度值,將其對應的字符輸出就得到字符畫。
RGB 轉灰度值,有個轉換學公式:
gray = (2126 * r + 7152 * g + 722 * b) / 10000
代碼實戰
我隨意選擇瞭一張圖片:
我的目標是轉化成下面這樣:
根據以上轉換原理,我們直接上代碼:
from PIL import Image char = list('M3NB6Q#OC?7>!:–;. ') def get_char(r, g, b, alpha=256): if alpha == 0: return ' ' grey = (2126 * r + 7152 * g + 722 * b) / 10000 char_idx = int((grey / (alpha + 1.0)) * len(char)) return char[char_idx] def write_file(out_file_name, content): with open(out_file_name, 'w') as f: f.write(content) def main(file_name="input.jpg", width=100, height=80, out_file_name='output.txt'): text = '' im = Image.open(file_name) im = im.resize((width, height), Image.NEAREST) for i in range(height): for j in range(width): text += get_char(*im.getpixel((j, i))) text += '\n' print(text) write_file(out_file_name, text) if __name__ == '__main__': main('dance.png')
程序的思路:
- 定義一個字符數組,這個數組裡面的字符可以隨意寫。
- 解析圖片,將圖片裡面的每個像素點解析成 RGB 值。
- 根據我們上面的公式,將每個像素點轉換成字符數組裡面的一個字符。
- 將所有像素點對應的字符拼接起來,就完成瞭轉換。
總結
圖片轉字符畫,轉換的原理和思路還是比較簡單的,實現也不復雜,大傢可以動手試試看!
到此這篇關於利用Python 實現圖片轉字符畫的文章就介紹到這瞭,更多相關Python圖片轉字符畫內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!