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

您的位置:首頁技術文章
文章詳情頁

Python簡單實現圖片轉字符畫的實例項目

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

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

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

再從字符集里獲取對應的字符

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

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

2. 開始制作2.1 導入所需的庫

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

pip install pillow

導入庫在導入 PIL 庫時,不能用 import pillow,應使用 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?:')

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

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

2.3 圖片獲取

使用 PIL 的 open 函數打開圖片

image = Image.open(inputfile)

注意:這里的 open 函數不要和 python 內置函數 open 混淆

2.4 調整圖片大小

獲取圖片大小

w, h = image.size

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

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

調整圖片大小

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

指定轉換的字符集

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

定義轉換字符的函數

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) #轉灰度值asc = asciis[int(len(asciis)/256*(gray))] #獲取字符return(asc)

開始轉換字符

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

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

2.6 保存文本

使用 python 內置函數 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簡單實現圖片轉字符畫的實例項目

結果:

Python簡單實現圖片轉字符畫的實例項目

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 下調試通過

4. 后記

我們的圖片轉字符畫程序完成了!

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

到此這篇關于Python簡單實現圖片轉字符畫的實例項目的文章就介紹到這了,更多相關Python 圖片轉字符畫內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
老牛影视一区二区三区| 欧美一区免费| 国产日产精品一区二区三区四区的观看方式| 亚洲a在线视频| 久久精品一本| 色一区二区三区| 美女精品久久| www.com.cn成人| 国产一区二区亚洲| 狠狠久久婷婷| 日韩精品一区二区三区中文| 一本综合精品| 亚洲精品伊人| 久久99蜜桃| 成人羞羞视频播放网站| 亚洲免费一区二区| 亚洲欧美日本视频在线观看| 六月丁香综合| 日本不卡不码高清免费观看| 国产精品流白浆在线观看| 精品视频久久| 国产成人精品免费视| 久久精品欧美一区| 五月精品视频| 日本午夜精品| 日韩高清成人在线| 国产精品theporn| 黑森林国产精品av| 中文字幕一区二区三区四区久久| 红桃视频国产一区| 亚洲97av| 美女精品一区二区| 日本免费久久| 国产精品日本| 亚洲二区在线| 欧美日韩中文| 欧美日韩 国产精品| 精品视频在线一区二区在线| 久久久久国产| 日韩**一区毛片| 精品国产成人| 欧美女激情福利| 日本精品国产| 欧美三区四区| 亚洲综合色婷婷在线观看| 国产精品一国产精品k频道56| 国产日韩一区二区三免费高清| 黄页网站一区| 亚洲精品美女91| 精品视频高潮| 国产精品嫩草99av在线| 中文字幕一区日韩精品| 久久精品国产久精国产| 亚洲高清影视| 欧美经典一区| 亚洲欧美网站| 久久精品五月| 激情六月综合| 亚洲高清久久| 久久激情av| 免费不卡中文字幕在线| 日日摸夜夜添夜夜添国产精品| 动漫av一区| 亚洲精品麻豆| 99久久精品费精品国产| 视频一区日韩| 国产一区二区三区四区二区| 美女黄网久久| 捆绑调教日本一区二区三区| 日韩一区二区三区四区五区| 麻豆mv在线观看| 日本在线成人| 精品一区亚洲| 精品国产乱码| 日本不卡一二三区黄网| 免费久久精品| 日韩成人精品一区| 国产视频一区二区在线播放| 日韩不卡在线| 国产日韩欧美一区二区三区| 欧洲av一区二区| 日本亚洲视频| 欧美日韩水蜜桃| 精品久久亚洲| 国产精品主播| 亚洲精品麻豆| 狠狠久久婷婷| 久久天堂成人| 在线人成日本视频| 国产精品一区二区三区av麻| 粉嫩av一区二区三区四区五区| 国产精品日本| 久久精品中文| 超碰99在线| 麻豆91在线播放| 日韩高清中文字幕一区| 久久激情婷婷| 高清一区二区| 精品视频免费| 久久爱www.| 91免费精品国偷自产在线在线| 国产亚洲午夜| 日韩一区二区免费看| 久久久五月天| 日韩在线不卡| 中文字幕在线看片| 精品欠久久久中文字幕加勒比| 不卡中文一二三区| 天堂中文在线播放| 国产欧美一区二区三区国产幕精品 | 欧美一级久久| 五月激激激综合网色播| 午夜亚洲一区| 99热精品在线| 99热精品在线| 亚洲激情黄色| 伊人久久亚洲美女图片| 日韩免费高清| 国产一区二区三区不卡视频网站| 1000部精品久久久久久久久| 少妇久久久久| 欧美二三四区| 精品国产乱码久久久久久1区2匹| 久久精品国产在热久久| 欧美精品成人| 精品国产精品久久一区免费式| av亚洲一区二区三区| 婷婷精品进入| 欧美女激情福利| 在线亚洲自拍| 中文字幕av亚洲精品一部二部| 亚洲精品麻豆| 91成人小视频| 欧美激情在线精品一区二区三区| 麻豆精品av| 国产v日韩v欧美v| 久久久久国产精品一区二区| 岛国av在线网站| 日韩精品欧美| 亚洲香蕉视频| 你懂的亚洲视频| 国产一区福利| 91精品国产成人观看| 国产韩日影视精品| 香蕉精品999视频一区二区| 六月丁香综合| 91精品国产经典在线观看| 国产黄色精品| 黄色在线观看www| 免费视频一区三区| 天堂av在线一区| 好吊日精品视频| 欧美日韩色图| 欧美中文字幕| 久久国内精品| 久久男人av资源站| 捆绑调教日本一区二区三区| 精品一区在线| 国产精品mm| 卡一精品卡二卡三网站乱码| 四虎8848精品成人免费网站| 久久九九99| 中文不卡在线| 久久av国产紧身裤| 日韩高清成人| 久久夜色精品| 麻豆国产欧美一区二区三区| 国产一区一一区高清不卡| 五月天久久777| 国产欧美一区二区三区国产幕精品| 亚洲国产欧美日本视频| 久久不射中文字幕| 国产精成人品2018| 亚洲激情另类| 国产精品亚洲成在人线| 日韩国产欧美在线播放| 国产情侣久久| 欧美亚洲激情| 日韩国产在线一| 在线天堂中文资源最新版| 中文字幕一区二区三区在线视频| 国产成人久久精品一区二区三区| 久久高清精品| 欧美日本三区| 亚洲精品网址| 午夜在线精品| 精品一区av| 国产日韩欧美| 久久精品国产www456c0m| 色狠狠一区二区三区| 四虎成人av| 亚洲人成亚洲精品| 亚洲美女久久精品| 日韩高清不卡在线| 国产一区久久| 久久久久伊人| 蜜桃视频一区二区| 成人污污视频| 亚洲精品影视| 日韩电影免费在线观看|