原标題:教你用Python将圖檔轉化為字元畫,有源代碼
1.設計思路
如何把以.png的圖檔以不同字元把它形象的畫出來呢?
我們知道其實一張圖檔是由很多不同像素點所組成的,每種像素點可以表示一種顔色。那麼如果我們用不同的字元來代替各種像素點,是不是就可以将圖檔轉化為字元畫了?沒錯就是要用這個原理。
2.準備工作
為了實作我們本片博文所述的功能,不許得有一個叫做Pillow(PIL)的圖像處理庫
該庫的安裝方式如下
pipinstall pillow
3.代碼實作
#! /usr/bin/python
#coding:utf8
import argparsefrom PIL import Image
defhandle_command:'指令行參數處理'parser = argparse.ArgumentParserparser.add_argument('filename',help = '圖檔的路徑')parser.add_argument('-o','--output',help = '是否輸出檔案')parser.add_argument('--width',type = int,default = 80)parser.add_argument('--heigth',type = int,default = 80)
#擷取指令行參數returnparser.parse_args
args = handle_command
classPtrancefrom(object):'實作将圖檔轉化為字元'def__init__(self,img,width,heigth):self.img = imgself.width = widthself.heigth = heigthself.ascii_char = list("[email protected]%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|1{}[]?-_+~<>i!lI;:,"^`'. ")
defget_char(self,r,b,g,alpha = 256):'将256範圍的灰階值映射到70個字元上'#灰階值為0時對應字元為空格ifalpha == 0:return' '
length = len(self.ascii_char)#灰階值的計算公式gray = int(0.2126*r + 0.7152*g + 0.0722*b)
unit = (256.0+ 1)/lengthreturnself.ascii_char[int(gray/unit)]
defprint_picture(self):'列印圖形'#打開圖檔im = Image.open(self.img)#設定圖檔像素的大小im = im.resize((self.width,self.heigth),Image.NEAREST)
txt = ""
fori inrange(self.heigth):forj inrange(self.width):txt += self.get_char(*im.getpixel((j,i)))txt += 'n'print txt
defwrite_to_file(self):'将生成的字元圖檔寫入到檔案'ifargs.output:with open(args.output,'w') as f:f.write(txt)else:with open('output.txt','w') as f:f.write(txt)pic = Ptrancefrom(args.filename,args.width,args.heigth)pic.print_picture
運作上述腳本
pythonprog3.py--width45 --heigth45 ascii_dora.png
選材的圖檔原圖如下
效果圖如下
全新打卡學習模式
每天30分鐘
30天學會Python程式設計
世界正在獎勵堅持學習的人!傳回搜狐,檢視更多
責任編輯: