点阵字
完结此动机 开始是点阵字的概念 点阵字体是把每一个字符都分成16×16或24×24个点 然后用每个点的真假来示意字符的轮廓。点阵字体也叫位图字体 个中每个字形都以一组二维像素信息示意。
咱们拿Python print来打印的话 最佳是有现成可用的点阵字库 这样根据其像素信息直接转化为print的字符就也许了。
HZK16字库
HZK即汉字库的首字母缩写 HZK16字库是契合GB2312规范的16×16点阵字库 支柱的汉字有6763个 每个汉字模子须要16×16一共须要256个点来再现 每个点是二进制位也便是2的256次方数据 即32个字节。
那么思路认识了 根据字符串中汉字字符编码 去HZK16字库中猎取点阵信息 拿到信息后根据16*16点阵每个点的数据 print出分歧字符。
留神 运行代码时要正在代码文件住址文件夹内推广HZK16文件 不然是拿没有到点阵数据 HZK16文件鄙人载链接中也许找到
完结多字
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 ■
backgroundSign ○
#backgroundSign .
printPlay(inpt,lineSign,backgroundSign)