第一個Python小項目:圖片轉換成字符圖片

實現的效果:學習

                                                                                                             
 
須要掌握的知識:
1):Python的基礎知識
2):argparse庫
3):piilow的Image
 
#encoding=utf-8

from PIL import Image
import 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) #輸出字符畫的高度

#調用parse_args()方法進行解析
args = parser.parse_args()

#使用
IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output

#<-----------------處理圖片-------------->

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")

#字符與RGB的對應的映射關係
def get_char(r,g,b,alpha=256):
    if alpha == 0 :
        return ' '
    lenght = len(ascii_char)
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
    unit = (256.0 + 1)/lenght
    return ascii_char[int(gray/unit)]

#若是是本身執行的話,就執行下面的,若是是做爲導入模塊就不執行
if __name__ == '__main__':
    im = Image.open(IMG)
    #這裏是轉換圖片的大小,而後第二個參數表示圖片的質量,一共有4種,低質量Image.NEARSET,雙線性Image.BILINEAR,三次樣條插值Image.BICUBIC,高質量Image.ANTIALIAS
    im = im.resize((WIDTH,HEIGHT),Image.NEAREST)
    txt = ""

    for i in range(HEIGHT):
        for j in range(WIDTH):
            #im.getpixel:根據座標取得RGB對應的r,g,b三個值,這裏的getpixel((i,j))的兩個括號很是重要
            txt += get_char(*im.getpixel((j,i)))
        txt += '\n'

    print txt

#字符輸出到文件
if OUTPUT:
    with open(OUTPUT,'w') as f:
        f.write(txt)
else:
    with open("output.txt",'w') as f:
        f.write(txt)

 

 
總結:
1:argparse命令行參數處理的使用過程
      1):建立解析對象  parser = argparse.ArgumentParser()
      2):在建立的對象中添加你所關注的命令行參數和選項   parser.add_argument()
      3):調用parse.args()方法進行解析
      4):使用
 
2:im = im.resize((WIDTH,HEIGHT),Image.NEAREST) 這裏的resize()是轉換像素的意思,第二個參數表示轉換的質量
 
 
根據實驗樓的項目學習的: https://www.shiyanlou.com/courses/370/labs/1191/document
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 



相關文章
相關標籤/搜索