上一篇,我写了通过照片生成印刷品。有评论说,可以用汉字试试。于是我研究了汉字的点阵。
点阵就是把每个字符分成1616,然后用每个点的虚点和实点来表示字符的轮廓。在字体上,汉字由16*16的0,1点阵组成,如“A”字。他的点阵如下:
我看不清楚。我用“”代替1,用“”代替0:
这里我们用的是点阵字体,是标准的通用字体。如果需要,可以给我留言。
同时你也要了解一下GB2312的编码。关于编码的介绍,请见http://www.qqxiuzi.cn/zh/hanzi-gb2312-bianma.php.
简单来说,GB2312编码是我国第一个汉字编码国家标准,1980年由国家标准总局发布,1981年5月1日开始使用。GB2312码包含6763个汉字,其中一级汉字3755个,二级汉字3008个。同时,GB2312码包含拉丁字母、希腊字母、日语平假名和片假名字母、俄语西里尔字母等682个全角字符。
我们还需要使用binascii来实现十六进制转换。他有两个方法,b2a_hex:二进制数据的十六进制;a2b_hex:b2a_hex的反函数。
准备工作结束后,开始编码:
rect_list=* 16
对于范围(16):内的I
rect_list.append( * 16)
Text='啊'
gb2312=text.encode('gb2312 ')
hex _ str=binas CII . b2a _ hex(GB 2312)
result=str(十六进制字符串,编码='utf-8 ')
area=eval('0x ' result :2)-0xa 0
index=eval('0x ' result 2:)-0xa 0
偏移量=(94 *(区域-1)(索引-1)) * 32
font_rect=无
带开('。/font/hzk1216/HZK16 ',' rb') as f:
f .查找(偏移)
font_rect=f.read(32)
对于范围内的k(len(font _ rect)//2):
row_list=rect_list
对于范围(2):中的j
对于范围(8):中的I
asc=font_rect
flag=asc键
row_list.append(标志)
对于rect_list:中的行
因为我在:排
如果是i:
打印('',end=' ')
else:
打印('',end=' ')
打印()
打印()
这样就可以输出一个汉字“啊”的点阵。