2019年1月30日 星期三

Python print 玩轉點陣字-----2

Python print 玩轉點陣字-----2

import binascii
KEYS = [0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]

def printPlay(textStr,line,background):
    # 初始化16*16的點陣位置,每個漢字需要16*16=256個點來表示,需要32個位元組才能顯示一個漢字
    # 之所以32位元組:256個點每個點是0或1,那麼總共就是2的256次方,一個位元組是2的8次方
    rect_list = [] * 16
    for i in range(16):
        rect_list.append([] * 16)

    for text in textStr:
        #獲取中文的gb2312編碼,一個漢字是由2個位元組編碼組成
        gb2312 = text.encode('gb2312')
        #將二進位編碼資料轉化為十六進位資料
        hex_str = binascii.b2a_hex(gb2312)
        #將資料按unicode轉化為字串
        result = str(hex_str, encoding='utf-8')

        #前兩位元對應漢字的第一個位元組:區碼,每一區記錄94個字元
        area = eval('0x' + result[:2]) - 0xA0
        #後兩位元對應漢字的第二個位元組:位碼,是漢字在其區的位置
        index = eval('0x' + result[2:]) - 0xA0
        #漢字在HZK16中的絕對偏移位置,最後乘32是因為字形檔中的每個漢字字模都需要32位元組
        offset = (94 * (area-1) + (index-1)) * 32

        font_rect = None

        #讀取HZK16漢字形檔檔
        with open("HZK16", "rb") as f:
            #找到目標漢字的偏移位置
            f.seek(offset)
            #從該字模資料中讀取32位元組資料
            font_rect = f.read(32)

        #font_rect的長度是32,此處相當於for k in range(16)
        for k in range(len(font_rect) // 2):
            #每行數據
            row_list = rect_list[k]
            for j in range(2):
                for i in range(8):
                    asc = font_rect[k * 2 + j]
                    #此處&為Python中的按位與運算子
                    flag = asc & KEYS[i]
                    #資料規則獲取字模中資料添加到16行每行中16個位置處每個位置
                    row_list.append(flag)

    #根據獲取到的16*16點陣資訊,列印到控制台
    for row in rect_list:
        for i in row:
            if i:
                #前景字元(即用來表示漢字筆劃的輸出字元)
                print(line, end=' ')
            else:

                # 背景字元(即用來表示背景的輸出字元)
                print(background, end=' ')
        print()

#----------------------------以上是庫的引用和函式定義,下面是代碼正文----------------------
#允許用戶自訂輸入漢字短語
inpt = input("寫你所想:")

#自訂點陣字中筆劃的符號
lineSign = '■'
#備選方案
#lineSign = "□"

#自訂點陣字的背景符號
backgroundSign = '□'
#備選方案
#backgroundSign = "."

#調用之前定義好的函數,列印最終成果
printPlay(inpt,lineSign,backgroundSign)

@aguegu
Latest commit 1bfa928 on 21 Oct 2012



======== RESTART: F:/2018-09勤益科大數值分析/數值分析/PYTHON/Pattern2.py ===========
寫你所想:勤益科大
□ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ 
■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ 
□ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ ■ ■ ■ ■ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ 
□ □ ■ ■ ■ ■ ■ □ □ □ ■ □ □ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ ■ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ 
□ □ □ □ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ 
□ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ □ □ □ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ 
□ ■ □ □ ■ □ □ ■ □ □ ■ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ 
□ ■ □ □ ■ □ □ ■ □ □ ■ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ ■ ■ □ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □ 
□ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ ■ □ □ □ □ ■ ■ ■ ■ □ □ □ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □ 
□ □ □ □ ■ □ □ □ □ □ ■ □ □ ■ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ ■ □ ■ □ □ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ 
□ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ □ □ □ □ ■ □ □ ■ □ □ □ ■ □ □ ■ □ □ □ □ □ ■ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □ 
□ □ □ □ ■ □ □ □ □ □ ■ □ □ ■ □ □ □ □ ■ □ □ ■ □ □ □ ■ □ □ ■ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ 
□ □ ■ ■ ■ ■ ■ □ □ ■ □ □ □ ■ □ □ □ □ ■ □ □ ■ □ □ □ ■ □ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ 
□ □ □ □ ■ □ □ □ □ ■ □ □ □ ■ □ □ □ □ ■ □ □ ■ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ ■ ■ ■ □ 
■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □ 
□ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ 
>>> 

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...