点阵字体是把每一个字符都分成16×16,然后用每个点的虚实来表示字符的轮廓。
点阵字体中,汉字是有1616的0,1点阵构成,比如“啊”字,他的点阵如下:

有点看不太清,我用“”代替1,“○”代替0:

这里我们用到了点阵字库,这是一个标准通用字库,如果须要,可以留言找我。

php二进制转字符用python做一些有趣的事二依据汉字生成点阵 HTML

同时,还要理解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()

这样就可以输出一个点阵的汉字“啊”了。