您好,登錄后才能下訂單哦!
這篇文章主要講解了“python畫字符畫的實現原理”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python畫字符畫的實現原理”吧!
1.先看效果
原圖是
字符畫
2.實現原理
其實原理非常簡單,首先,要準備一個字符集
char_set = '''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. '''
其次,要將圖片轉成灰度圖,所謂灰度圖就是黑白照片,這個過程中還要縮小圖片,每張圖片縮小的比例都不盡相同,要根據圖片的實際情況來決定,這樣就得到了一張縮小后的黑白照片
im = Image.open('qq.png')
im = im.resize((80, 50), Image.ANTIALIAS)
im = im.convert('L') # 轉為黑白圖, 每個像素都一個灰度值,從0到255, 0是黑色, 255是白色
im.save('t.jpeg') # 保存圖片只是為了演示黑白照片
看起來有一些丑陋,這張黑白照片一共有80*50個像素,每個像素點都可以通過im.getpixel方法獲得灰度值,這個值的范圍是從0到255,0是黑色,255是白素,中間就是從黑到白的灰色。
接下來要做的事情就是把4000個灰度值轉成字符
def get_char(gray):
if gray >= 240:
return ' '
else:
return char_set[int(gray/((256.0 + 1)/len(char_set)))]
灰度值大于240的,我都轉成空字符串,這樣看著舒服,其余的,按比例映射到字符集上。
強調一點,生成的txt文件不要打開查看,那樣你看不到一個完整的字符畫,在瀏覽器里打開字符畫,這樣才可以看到完整的,如果你把縮小的比例再放大一點,生成的字符畫就會失去很多細節,一般來說,寬80就可以了,高度看情況調整。
3.完整代碼
from PIL import Image
char_set = '''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. '''
im = Image.open('qq.png')
im = im.resize((80, 50), Image.ANTIALIAS)
im = im.convert('L') # 轉為黑白圖, 每個像素都一個灰度值,從0到255, 0是黑色, 255是白色
im.save('t.jpeg')
def get_char(gray):
if gray >= 240:
return ' '
else:
return char_set[int(gray/((256.0 + 1)/len(char_set)))]
text = ''
for i in range(im.height):
for j in range(im.width):
gray = im.getpixel((j, i)) # 返回值可能是一個int, 也可能是一個三元組
if isinstance(gray, tuple):
gray = int(0.2126 * gray[0] + 0.7152 * gray[1] + 0.0722 * gray[2])
text += get_char(gray)
text += '\n'
with open('pic.txt', 'w')as f:
f.write(text)
感謝各位的閱讀,以上就是“python畫字符畫的實現原理”的內容了,經過本文的學習后,相信大家對python畫字符畫的實現原理這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。