python學習---50行代碼實現圖片轉字符畫1
轉自:https://blog.csdn.net/mm1030533738/article/details/78447714
項目鏈接: https://www.shiyanlou.com/courses/370/labs/1191/document
from PIL import Image #從PIL模塊中引入Image這個類
import argparse #引入argparse這個模塊(argparse庫是用來管理命令行參數輸入的)
parser = argparse.ArgumentParser() #創建一個解析對象
parser.add_argument(‘file‘) #添加命令行參數和或選項:輸入文件
parser.add_argument(‘-o‘,‘--output‘) #輸出文件
parser.add_argument(‘--width‘, type = int, default = 80) #輸出字符畫寬
parser.add_argument(‘--height‘, type = int, default = 80) #輸出字符畫高
args = parser.parse_args() #解析
IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
#定義一個ascii的列表,讓圖片上的灰度與字符相對應
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!1I;:,\"^`‘.")
#將256灰度映射到70個字符上
def get_char(r,g,b,alpha = 256): #這個調用跟im.getpixel函數有關,這個函數是根據圖片的橫縱坐標,把圖片解析成
#r,g,b,alpha(灰度)
if alpha == 0: #如果灰度是0,則說明這裏沒有圖片
return ‘ ‘
length = len(ascii_char) #計算這些字符的長度
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) #把這些圖片的RGB值轉換成灰度值
unit = (256.0 + 1)/length
return ascii_char[int(gray/unit)] #選出了灰度與哪個字符相對應
if __name__ == ‘__main__‘: #如果是本程序調用,則執行以下程序
im = Image.open(IMG)
im = im.resize((WIDTH,HEIGHT), Image.NEAREST) #更改圖片的顯示比例
txt = ""
for i in range(HEIGHT):
for j in range(WIDTH):
txt += get_char(*im.getpixel((j,i))) #把圖片按照橫縱坐標解析成RGBAlpha這幾個參數,然後調用get_char
#函數,把對應的圖片轉換成灰度值,把對應值的字符存入txt中
txt += ‘\n‘
print(txt) #在界面打印txt文件
if OUTPUT:
with open(OUTPUT,‘w‘) as f: #文件輸出
f.write(txt)
else:
with open("xx.txt",‘w‘) as f: #文件輸出
f.write(txt)
python學習---50行代碼實現圖片轉字符畫1