Open zuluoaaa opened 2 years ago
不使用公开的字体,而是自己创建一份私有的字体
一个字符串在计算机内是怎么表示的?
答案是数字,用某个数字去代指某个字符串,这个数字即是
我们日常了解的unicode字符集,又或者utf8,gkb……等各种编码。
举个例子,我们用将中文转成unicode字符(比如 “你”这个字符,转换成 unicode 是 “\u4f60”
这是一个16进制字符串,如果我们把它转成10进制,结果是“\u20320” ,再去掉 unicode的统一前缀
“20320”
“你” 在unicode 字符集里面对应的数字是 “20320”
20320的其实是就是索引,
一个简单的理解,即是字符集是一个大数组,数组内的每一项对应一个字符的矢量图形
当我们拿到数字,又明白他属于哪个字符集的,那么就能渲染出正确的字符(常见的乱码错误就是因为字符集不正确导致的)
我们自己在现有的字符集里面新增一些项(即是我们的加密字体),传给前端的时候,将加密字体添加到浏览器的当前字符集,然后在渲染位置使用unicode字符进行渲染,这个unicode字符所对应的就是我们刚刚新增的字符集,
拿到unicode的同时,一并拿到字符集的新增项,将unicode和这些新增项,一一对应起来,才能拿到真实的字符数据
如果是浏览器,那么很简单,因为字体内容本身是无法加密的(否则浏览器无法识别),而且要明文传给前端。
拿到字体内容,通过opentype等工具,对字体进行解压,拿到一个大数组及内每一项所对应的矢量数据
将矢量数据绘制出来,数据量比较少的话,可以人工肉眼去标记每个矢量图形所对应的字符串;
数据量多的话,将绘制出来的矢量图形,调用第三方文字识别API或者文字特征识别库等等,拿到对应字符;
什么是字体加密
不使用公开的字体,而是自己创建一份私有的字体
一些基础的知识
一个字符串在计算机内是怎么表示的?
答案是数字,用某个数字去代指某个字符串,这个数字即是
我们日常了解的unicode字符集,又或者utf8,gkb……等各种编码。
举个例子,我们用将中文转成unicode字符(比如 “你”这个字符,转换成 unicode 是 “\u4f60”
这是一个16进制字符串,如果我们把它转成10进制,结果是“\u20320” ,再去掉 unicode的统一前缀
“20320”
“你” 在unicode 字符集里面对应的数字是 “20320”
20320的其实是就是索引,
一个简单的理解,即是字符集是一个大数组,数组内的每一项对应一个字符的矢量图形
当我们拿到数字,又明白他属于哪个字符集的,那么就能渲染出正确的字符(常见的乱码错误就是因为字符集不正确导致的)
加密原理
我们自己在现有的字符集里面新增一些项(即是我们的加密字体),传给前端的时候,将加密字体添加到浏览器的当前字符集,然后在渲染位置使用unicode字符进行渲染,这个unicode字符所对应的就是我们刚刚新增的字符集,
解密原理
拿到unicode的同时,一并拿到字符集的新增项,将unicode和这些新增项,一一对应起来,才能拿到真实的字符数据
如果是浏览器,那么很简单,因为字体内容本身是无法加密的(否则浏览器无法识别),而且要明文传给前端。
拿到字体内容,通过opentype等工具,对字体进行解压,拿到一个大数组及内每一项所对应的矢量数据
将矢量数据绘制出来,数据量比较少的话,可以人工肉眼去标记每个矢量图形所对应的字符串;
数据量多的话,将绘制出来的矢量图形,调用第三方文字识别API或者文字特征识别库等等,拿到对应字符;