日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Python簡單實現(xiàn)圖片轉(zhuǎn)字符畫的實例項目

瀏覽:28日期:2022-06-21 17:18:17
1. 原理

利用 PIL 庫來獲取圖片并修改大小,利用灰度值轉(zhuǎn)換公式把每一個像素的 RGB 值轉(zhuǎn)為灰度值

gray = int(0.2126*r+0.7152*g+0.0722*b)

再從字符集里獲取對應(yīng)的字符

asciis = list(’M%$@#&WNBRwm8S5A4E3KXFPH69nsxeazgpqbdoctfhkyvuGZYVTUCI2QOD0L7Jjl1ri!^{}[]()/|;:*<>_~-,. ’)

最后將字符連接起來并保存就完成了

2. 開始制作2.1 導(dǎo)入所需的庫

在這個工程中,我們需要的第三方庫是 PIL 庫但我們不用 pip install PIL 來安裝它,而是使用 pip install pillow

pip install pillow

導(dǎo)入庫在導(dǎo)入 PIL 庫時,不能用 import pillow,應(yīng)使用 import PIL

from PIL import Image as Image2.2 獲取圖片路徑和選項

inputfile = input(’inputfile:’)outputfile = input(’outputfile:’)distance = {’y’:’ ’,’’:’ ’,’n’:’’}distance = distance[input(’distance?(Y/n):’)]re = input('resize?:')

字母占用的位置是矩形的,因此生成出來的字符畫會被“擠壓”。我們可以在字母與字母之間添加空格來防止這種情況的發(fā)生。如果圖片太大了,會導(dǎo)致耗費時間過長、亂碼等問題。我們應(yīng)該對圖片進行必要的縮放。在詢問“resize?”時,可以設(shè)置以下幾種回答:

回答方式 作用 “”,啥也不輸入 不縮放 “100”,邊長 輸入單個數(shù)字時,會按比例縮放為較長邊為此長度的矩形 “100,200”,寬和高 縮放為指定寬高的矩形

2.3 圖片獲取

使用 PIL 的 open 函數(shù)打開圖片

image = Image.open(inputfile)

注意:這里的 open 函數(shù)不要和 python 內(nèi)置函數(shù) open 混淆

2.4 調(diào)整圖片大小

獲取圖片大小

w, h = image.size

獲取變量 re 中存儲的大小信息,并用函數(shù) split 分割

nwh = re.split(’,’)for i in range(len(nwh)): nwh[i] = int(nwh[i])

調(diào)整圖片大小

if len(nwh) == 1: #如果項數(shù)為1,表示用戶只輸入了一個數(shù)字。即按比例縮放為較長邊為此長度的矩形 ww = int(nwh[0] / max(w,h) * w) #max函數(shù)獲取較大值 hh = int(nwh[0] / max(w,h) * h) image = image.resize((ww,hh),Image.ANTIALIAS) #改變圖片大小 #第一個參數(shù)放入一個元組,指定寬高 #第二個參數(shù) Image.ANTIALIAS 表示獲取高質(zhì)量圖片else: #項數(shù)不為1,縮放為指定寬高的矩形 image = image.resize((nwh[0],nwh[1]),Image.ANTIALIAS)2.5 轉(zhuǎn)換字符

指定轉(zhuǎn)換的字符集

asciis = list(’M%$@#&WNBRwm8S5A4E3KXFPH69nsxeazgpqbdoctfhkyvuGZYVTUCI2QOD0L7Jjl1ri!^{}[]()/|;:*<>_~-,. ’)#list函數(shù)將字符串轉(zhuǎn)換為列表

定義轉(zhuǎn)換字符的函數(shù)

def getasc(r,g,b,t=100): #t為透明度 if t == 0:return(’ ’) #如果是透明的,則直接返回空值 else:asc = ’’gray = int(0.2126*r+0.7152*g+0.0722*b) #轉(zhuǎn)灰度值asc = asciis[int(len(asciis)/256*(gray))] #獲取字符return(asc)

開始轉(zhuǎn)換字符

for i in range(h): for o in range(w): #按行讀取每一個像素的RGB值p = image.getpixel((o,i))g = getasc(*p) # * 將參數(shù)列表轉(zhuǎn)換為多個項txt = txt + g + distance #連接字符 txt = txt + ’n’ #換行

函數(shù) getpixel 獲取指定位置的 RGB 值,它的第一個參數(shù)為元組,傳入像素位置 (x,y),如果圖片是 JPG 格式的,它會返回含三項的列表 [r,g,b],如果圖片是 PNG 格式的,它會返回含四項的列表 [r,g,b,t],t 是透明度

2.6 保存文本

使用 python 內(nèi)置函數(shù) open 保存文件

with open(outputfile,’w’) as f: # ’w’ 表示寫入 f.write(txt)2.7 效果

================== RESTART: D:Python38-32Filesji2aji2a.py =======================image to ascii=====inputfile:dora.pngoutputfile:dora.txtdistance?(Y/n):yresize?(needn’t:’’, square:side length, restangle:width,height):100

Opening ’dora.png’...Getting...Saving...Seccessfully

原圖:

Python簡單實現(xiàn)圖片轉(zhuǎn)字符畫的實例項目

結(jié)果:

Python簡單實現(xiàn)圖片轉(zhuǎn)字符畫的實例項目

3. 完整代碼

from PIL import Image as Image asciis = list(’M%$@#&WNBRwm8S5A4E3KXFPH69nsxeazgpqbdoctfhkyvuGZYVTUCI2QOD0L7Jjl1ri!^{}[]()/|;:*<>_~-,. ’)#gray = int(0.2126*r+0.7152*g+0.0722*b)def main(): global asciis print(’=====image to ascii=====’)inputfile, outputfile, distance, re = getargs() image = openfile(inputfile) image = resize(image,re) w, h = image.size txt = gettxt(image,w,h,distance) savefile(outputfile,txt) print(’Seccessfully’)def getargs(): inputfile = input(’inputfile:n’) outputfile = input(’outputfile:n’) distance = {’’:’ ’,’y’:’ ’,’n’:’’} distance = distance[input(’distance?(Y/n):n’)] re = input('resize?(needn’t:’’, square:side length, restangle:width,height):n') return(inputfile,outputfile,distance,re)def openfile(inputfile): print('nOpening ’'+inputfile+'’...') image = Image.open(inputfile) return(image)def resize(image,re): if re != ’’:print(’Resizing...’)nwh = re.split(’,’)for i in range(len(nwh)):nwh[i]=int(nwh[i])w, h = image.sizeif len(nwh) == 1: ww = int(nwh[0] / max(w,h) * w) hh = int(nwh[0] / max(w,h) * h) image = image.resize((ww,hh),Image.ANTIALIAS)else: image = image.resize((nwh[0],nwh[1]),Image.ANTIALIAS) return(image)def gettxt(image,w,h,distance):txt = ’’ print(’Getting...’) for i in range(h):for o in range(w): p = image.getpixel((o,i)) txt = txt + getasc(*p) + distancetxt = txt + ’n’ return(txt)def getasc(r,g,b,t=100): if t == 0:return(’ ’) else:asc = ’’gray = int(0.2126*r+0.7152*g+0.0722*b)asc = asciis[int(len(asciis)/256*(gray))]return(asc)def savefile(outputfile,txt): print(’Saving...’)with open(outputfile,’w’) as f:f.write(txt) return()if __name__ == ’__main__’: main()

此代碼在 Python3.8 下調(diào)試通過

4. 后記

我們的圖片轉(zhuǎn)字符畫程序完成了!

要想將它打造成一個真正的命令行工具,可以加入命令行參數(shù)功能,利用 sys 模塊的 argv 函數(shù)獲取命令行參數(shù),利用 getopt 模塊的 getop 函數(shù)解析命令行參數(shù)。

到此這篇關(guān)于Python簡單實現(xiàn)圖片轉(zhuǎn)字符畫的實例項目的文章就介紹到這了,更多相關(guān)Python 圖片轉(zhuǎn)字符畫內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
福利精品一区| 亚洲免费中文| 日韩三级久久| 亚洲伊人影院| 日韩高清在线不卡| 婷婷视频一区二区三区| 免费在线视频一区| 伊人久久亚洲热| 韩日一区二区三区| 日本少妇一区| 国产专区一区| 亚洲一区观看| 中文字幕亚洲精品乱码| 日韩 欧美一区二区三区| 蜜桃免费网站一区二区三区| 日韩免费视频| 欧美特黄一级大片| 私拍精品福利视频在线一区| 国产欧美一区| 九一成人免费视频| 亚洲一区不卡| 亚洲欧美久久久| 亚洲精品97| 欧美大黑bbbbbbbbb在线| 999视频精品| 久久青草久久| 亚洲一本视频| 久久久久久久久丰满| 日韩一区亚洲二区| 亚洲1234区| 日韩精品一卡| 激情久久中文字幕| 日韩午夜一区| 丝袜美腿成人在线| 久久国产精品99国产| 丝瓜av网站精品一区二区| 久久亚洲美女| 婷婷久久免费视频| 欧美在线91| 国产精品v一区二区三区| 久久不见久久见国语| 精品无人区麻豆乱码久久久| 免费一级欧美在线观看视频| 精品在线网站观看| 日韩深夜视频| 久久久蜜桃一区二区人| 91精品高清| 亚洲美女91| 国产毛片一区二区三区| 精品久久福利| 亚洲福利久久| 一区二区视频欧美| 亚洲一区二区三区无吗| 国产高清精品二区| 国产调教精品| а√在线中文在线新版| 狠狠久久婷婷| 日韩精品第二页| 国产伊人久久| 亚洲精品电影| 日本 国产 欧美色综合| 国产欧美一区二区精品久久久| 韩国女主播一区二区三区| 欧美日韩尤物久久| 玖玖精品视频| 国产精品多人| 99精品综合| 奇米色欧美一区二区三区| 精品久久精品| 亚洲欧美不卡| 国产精品久久| 久久国产影院| 亚洲+小说+欧美+激情+另类| 国产精品免费99久久久| 日本免费一区二区三区四区| 在线 亚洲欧美在线综合一区| 少妇高潮一区二区三区99| 四虎国产精品免费观看| 成人免费电影网址| 美女久久网站| 国产精品麻豆成人av电影艾秋 | 亚洲bt欧美bt精品777| 国产高清精品二区| 一级欧洲+日本+国产| 奇米亚洲欧美| 98精品视频| 日韩精品一二三| 国产欧洲在线| 日韩国产欧美视频| 999国产精品视频| 911精品国产| 99久久九九| 麻豆精品在线播放| 9色国产精品| 精品一区二区三区中文字幕| 香蕉久久国产| 六月婷婷综合| 蜜桃视频在线观看一区| 成人亚洲精品| 欧美成人aaa| 亚洲女人av| 亚洲欧洲高清| 国产欧美日韩免费观看| 在线视频精品| 亚洲成人va| 免费一区二区三区在线视频| 中文字幕av一区二区三区四区| 91麻豆国产自产在线观看亚洲| 亚洲五月综合| 国产精品av久久久久久麻豆网| 久久一区国产| 国产日韩在线观看视频| 视频一区视频二区在线观看| 欧美aa在线视频| 男女男精品网站| 国产日产一区| 日韩中文av| 国产午夜精品一区二区三区欧美 | 中文字幕在线官网| 国产亚洲一区二区三区啪| 日韩精品电影| 欧美一级二级三级视频| 亚洲制服一区| 亚洲综合丁香| 欧美精选一区二区三区| 国产v日韩v欧美v| 久久wwww| 91嫩草精品| 一本综合精品| 亚洲女同一区| 97精品中文字幕| 久久精品国产久精国产爱| 日本a口亚洲| 天堂av一区| 午夜久久av| 蜜臀久久99精品久久久久久9| 国产伊人精品| 91tv亚洲精品香蕉国产一区| 日韩av网站在线免费观看| 亚洲在线网站| 国产亚洲网站| 99国产精品| 欧美日韩国产高清电影| 日韩和的一区二在线| 国产精品xxx| 国产精品视频3p| 国产精品美女在线观看直播 | japanese国产精品| 久久久久99| 久久婷婷一区| 日韩av一级| 99精品在线| 精品一区亚洲| 亚洲精华国产欧美| 国产精品日本欧美一区二区三区| 亚洲成人精选| 中文亚洲免费| 亚洲三级精品| 日韩综合一区二区三区| 人人爱人人干婷婷丁香亚洲| 亚洲精品亚洲人成在线观看| 日韩中文字幕区一区有砖一区 | 日本久久成人网| 日韩午夜av| 蜜桃视频一区二区| 亚洲1区在线| 91精品视频一区二区| 日本aⅴ免费视频一区二区三区| 日本精品久久| 国产精品丝袜在线播放| 成人日韩av| 久久久人人人| 亚洲欧美日韩国产一区| 亚洲1区在线| 国产精品一区二区av日韩在线| 麻豆一区二区三| 国产精品一国产精品| 欧美aⅴ一区二区三区视频| 国产一区二区三区黄网站| 国产白浆在线免费观看| 欧美成人综合| 久久国产精品久久久久久电车| 欧美亚洲在线日韩| 欧美特黄一级| 欧美日韩黄网站| 国产调教精品| 国产拍在线视频| 美女av在线免费看| 久久一级电影| 91精品丝袜国产高跟在线| 欧美国产中文高清| 欧美日韩在线网站| 亚洲精品少妇| 精品成人18| 伊人久久婷婷| 国产日韩欧美在线播放不卡| 精品一区不卡| 欧美亚洲激情| 日本欧美一区二区| 色综合五月天|