需下載HZK16字形檔
https://github.com/aguegu/BitmapFont/tree/master/font
HZK16字形檔
HZK即漢字形檔的首字母縮寫,HZK16字形檔是符合GB2312標準的16×16點陣字形檔,支援的漢字有6763個,每個漢字模型需要16×16一共需要256個點來顯示,每個點是二進位位元也就是2的256次方資料,即32個位元組。
import binascii
KEYS = [0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]
# 初始化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)
#拿“贊”字來演示
text = "勤"
#獲取中文的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('■', end=' ')
else:
# 背景字元(即用來表示背景的輸出字元)
print('□', end=' ')
print()
========== RESTART: F:/2018-09勤益科大數值分析/數值分析/PYTHON/Pattern.py ===========
□ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ □ □
■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ □ □ □
□ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ □ □
□ □ ■ ■ ■ ■ ■ □ □ □ ■ □ □ ■ □ □
□ □ □ □ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ □
□ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ □ □
□ ■ □ □ ■ □ □ ■ □ □ ■ □ □ ■ □ □
□ ■ □ □ ■ □ □ ■ □ □ ■ □ □ ■ □ □
□ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ □ □
□ □ □ □ ■ □ □ □ □ □ ■ □ □ ■ □ □
□ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ □ □
□ □ □ □ ■ □ □ □ □ □ ■ □ □ ■ □ □
□ □ ■ ■ ■ ■ ■ □ □ ■ □ □ □ ■ □ □
□ □ □ □ ■ □ □ □ □ ■ □ □ □ ■ □ □
■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ □ □
□ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □
>>>
□ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ ■ ■ □ □ □ □
□ □ □ ■ □ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □
□ □ ■ □ □ ■ □ □ □ ■ □ □ ■ □ □ □
□ □ ■ □ □ ■ □ □ □ ■ □ □ ■ □ □ □
□ □ ■ □ □ ■ □ □ □ ■ □ □ ■ □ □ □
□ □ ■ □ □ ■ □ □ □ ■ □ □ ■ □ □ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
>>>
□ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □
□ □ □ □ ■ ■ ■ □ □ □ □ ■ □ □ □ □
■ ■ ■ ■ ■ □ □ □ ■ □ □ ■ □ □ □ □
□ □ □ □ ■ □ □ □ □ ■ □ ■ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □
■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ □ □ □ □
□ □ □ □ ■ □ □ □ □ ■ □ ■ □ □ □ □
□ □ □ ■ ■ ■ □ □ □ □ □ ■ □ ■ □ □
□ □ □ ■ ■ □ ■ □ □ □ □ ■ ■ ■ ■ □
□ □ ■ □ ■ □ □ ■ ■ ■ ■ ■ □ □ □ □
□ □ ■ □ ■ □ □ □ □ □ □ ■ □ □ □ □
□ ■ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □
■ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □
>>>
□ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
□ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □
□ □ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ ■ □ □ □ □ □ □ □ □ ■ ■ ■ □
□ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
>>>
沒有留言:
張貼留言