1. 程式人生 > >python學習---50行代碼實現圖片轉字符畫1

python學習---50行代碼實現圖片轉字符畫1

灰度值 調用 pix parser from $@ bsp csdn 列表

轉自: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