一、介紹
字符畫,是一系列字符的組合,我們可以把每個字符看成是一個大的像素,一個字符可以代表一種顏色,字符各類越多,可體現的顏色越多,字符畫就更有層次感,
灰度值,指黑白影像中點的顏色的深度,范圍是0-255,白色為255,黑色為0,
RGB,是紅綠藍三顏色,通過不同的疊加可得到其他顏色,
圖片轉字符畫原理,先定義一個字符集用來和灰度值做映射,將圖片每個像素的RGB值轉換為一個灰度值,將其對應的字符輸出就得到字符畫,
RGB轉灰度值,有個心理學公式,在網上搜一下我們使用下面這個公式
gray = (2126 * r + 7152 * g + 722 * b) / 10000
二、實作
2.1 準備
# 1. 我們用到的是Python3,確保有Python3的環境
python3 -V
# 2. 安裝Python圖象處理庫pillow(PIL)
pip install --upgrade pip
pip install pillow
2.2 代碼
ascii.py
#!/usr/bin/python3
#coding: utf-8
from PIL import Image
# ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
ascii_char = list('MNHQ$OC?7>!:–;. ')
def get_char(r, g, b, alpha=256):
if alpha == 0:
return ' '
# 這是一個優化,將浮點運算轉成整型運算
gray = (2126 * r + 7152 * g + 722 * b) / 10000
# 為什么是1.0 因為alpha、gray是整型運算的時候按整型算如果小于1的話按0算
char_idx = int((gray / (alpha + 1.0)) * len(ascii_char))
return ascii_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="test.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('dora.png')
2.3 測驗
# 1. 準備圖片dora.png
# 2. 執行命令
python3 ascii.py

MMH$$$NM
MQ7777> $N OM
O7777777 C 77OM
C77777777 > Q: $777M
77777777$>Q 7O$O Q$
M?777777N N O H .N >N?>
777777N :N: >QQQQ H
N77777 MN .:????
M77777? ;:???QQQQ! H
H7777H ! !HO;
C7777 QQQQQHNNHNM$> : O
C7777 QQQQQQQQQQQQQQQQQQQQQO ?
$7777 QQQQQQQQQQQQQQQQQQQQ$ M
M7777 CQHNC?$MHQQQQQQQQQQM –
?777 ?77777777?QQQQQQQ? M
M777N $777777777MQQQH– ?
?777! .777777777QQH !
C777 ?O777777N! :
?77?– .!QQMMMMMH$M
O777NNQQQQQ Q–QCMNM
NQQNQ7777H Q;;;; M
77777777C O;;;C ?
777777777O > H??
?777777Q! ;HO: ;H MC:N
H7O$777$ : ?M M
M777777H ? N Q
?77777? : ; Q
QQQMH777777C .?Q?: H M
QQQM$7777777Q Q7?
M77777777777QQ?NO777H M
M7777777777777777$MM N ;
M N77777777777OM
C7777777HM
77777QM
7QM
;
O
M$?OM
三、總結
- 2202/5/24 學習python的基礎應用及pillow庫的使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/481304.html
標籤:Python
