十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要講解了“python畫字符畫的實(shí)現(xiàn)原理”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python畫字符畫的實(shí)現(xiàn)原理”吧!
創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為東光企業(yè)提供專業(yè)的做網(wǎng)站、成都網(wǎng)站建設(shè),東光網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
1.先看效果
原圖是
字符畫
2.實(shí)現(xiàn)原理
其實(shí)原理非常簡單,首先,要準(zhǔn)備一個字符集
char_set = '''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. '''
其次,要將圖片轉(zhuǎn)成灰度圖,所謂灰度圖就是黑白照片,這個過程中還要縮小圖片,每張圖片縮小的比例都不盡相同,要根據(jù)圖片的實(shí)際情況來決定,這樣就得到了一張縮小后的黑白照片
im = Image.open('qq.png')
im = im.resize((80, 50), Image.ANTIALIAS)
im = im.convert('L') # 轉(zhuǎn)為黑白圖, 每個像素都一個灰度值,從0到255, 0是黑色, 255是白色
im.save('t.jpeg') # 保存圖片只是為了演示黑白照片
看起來有一些丑陋,這張黑白照片一共有80*50個像素,每個像素點(diǎn)都可以通過im.getpixel方法獲得灰度值,這個值的范圍是從0到255,0是黑色,255是白素,中間就是從黑到白的灰色。
接下來要做的事情就是把4000個灰度值轉(zhuǎn)成字符
def get_char(gray):
if gray >= 240:
return ' '
else:
return char_set[int(gray/((256.0 + 1)/len(char_set)))]
灰度值大于240的,我都轉(zhuǎn)成空字符串,這樣看著舒服,其余的,按比例映射到字符集上。
強(qiáng)調(diào)一點(diǎn),生成的txt文件不要打開查看,那樣你看不到一個完整的字符畫,在瀏覽器里打開字符畫,這樣才可以看到完整的,如果你把縮小的比例再放大一點(diǎn),生成的字符畫就會失去很多細(xì)節(jié),一般來說,寬80就可以了,高度看情況調(diào)整。
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') # 轉(zhuǎn)為黑白圖, 每個像素都一個灰度值,從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畫字符畫的實(shí)現(xiàn)原理”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對python畫字符畫的實(shí)現(xiàn)原理這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!