天天看點

字元畫怎麼在python裡print_教你用Python将圖檔轉化為字元畫,有源代碼

原标題:教你用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

選材的圖檔原圖如下

字元畫怎麼在python裡print_教你用Python将圖檔轉化為字元畫,有源代碼

效果圖如下

字元畫怎麼在python裡print_教你用Python将圖檔轉化為字元畫,有源代碼

全新打卡學習模式

每天30分鐘

30天學會Python程式設計

世界正在獎勵堅持學習的人!傳回搜狐,檢視更多

責任編輯: