点阵字体是把每一个字符都分成16×16,然后用每个点的虚实来表示字符的轮廓。点阵字体中,汉字是有1616的0,1点阵构成,比如“啊”字,他的点阵如下:
有点看不太清,我用“”代替1,“○”代替0:
这里我们用到了点阵字库,这是一个标准通用字库,如果须要,可以留言找我。
同时,还要理解GB2312的编码,关于编码的先容,请看http://www.qqxiuzi.cn/zh/hanzi-gb2312-bianma.php
大略来说,GB2312编码是第一个汉字编码国家标准,由中国国家标准总局1980年发布,1981年5月1日开始利用。GB2312编码共收录汉字6763个,个中一级汉字3755个,二级汉字3008个。同时,GB2312编码收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。
我们还须要利用binascii来实现16进制转换,他有两个方法,b2a_hex:二进制数据的十六进制;a2b_hex:b2a_hex的逆向函数。
准备事情完毕,开始上代码:
rect_list = [] 16
for i in range(16):
rect_list.append([] 16)
text = '啊'
gb2312 = text.encode('gb2312')
hex_str = binascii.b2a_hex(gb2312)
result = str(hex_str, encoding='utf-8')
area = eval('0x' + result[:2]) - 0xA0
index = eval('0x' + result[2:]) - 0xA0
offset = (94 (area-1) + (index-1)) 32
font_rect = None
with open(\"大众./font/hzk1216/HZK16\"大众, \"大众rb\"大众) as f:
f.seek(offset)
font_rect = f.read(32)
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]
flag = asc & KEYS[i]
row_list.append(flag)
for row in rect_list:
for i in row:
if i:
print('',end=' ')
else:
print('○',end=' ')
print()
print()
这样就可以输出一个点阵的汉字“啊”了。