PHP读取汉字的点阵数据


Posted in PHP onJune 22, 2015

项目中遇到的问题:

PHP如何读取汉字的点阵数据?想实现输入一段文字,能得到这一段文字的所有点阵码。

解决方法:

简体中文国标字库7445个字符,其中汉字6773个,包括一级汉字3755个,二级汉字3008个。采用2字节(16位二进制)编码。

区位码:国标GB2312规定,所有的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个”区”,每一列称为一个”位”,因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的”区位码”。在汉字的区位码中,高两位为区号,低两位为位号。由此可见,区位码与汉字或符号之间是一一对应的。

内码:汉字的内码是指在计算机中表示汉字的编码。机内码与区位码稍有区别。目前,对于国内大多数的计算机系统,一个汉字的内码占两个字节,分别称为高位字节与低位字节,且这两位字节与区位码的关系如下: 内码高位=区码+A0H(H表示十六进制) 内码低位=位码+A0H 例如,汉字”啊”的区位码为”1601″,区码和位码分别用十六进制表示即为”1001H”,则它的内码为”B0A1H”。其中B0H为内码的高位字节,A1H为内码的低位字节。

返回由0和1组成的字符串

<?php
/**
* 读取汉字点阵数据
*
*/

$str = "中华人民共和国";

$font_file_name = "simsun12.fon"; // 点阵字库文件名
$font_width = 12; // 单字宽度
$font_height = 12; // 单字高度
$start_offset = 0; // 偏移

$fp = fopen($font_file_name, "rb");

$offset_size = $font_width * $font_height / 8;
$string_size = $font_width * $font_height;
$dot_string = "";

for ($i = 0; $i < strlen($str); $i ++)
{
if (ord($str{$i}) > 160)
{
// 先求区位码,然后再计算其在区位码二维表中的位置,进而得出此字符在文件中的偏移
$offset = ((ord($str{$i}) - 0xa1) * 94 + ord($str{$i + 1}) - 0xa1) * $offset_size;
$i ++;
}
else
{
$offset = (ord($str{$i}) + 156 - 1) * $offset_size;
}

// 读取其点阵数据
fseek($fp, $start_offset + $offset, SEEK_SET);
$bindot = fread($fp, $offset_size);

for ($j = 0; $j < $offset_size; $j ++)
{
// 将二进制点阵数据转化为字符串
$dot_string .= sprintf("%08b", ord($bindot{$j}));
}
}

fclose($fp);

echo $dot_string;
?>

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
数据库相关问题
Oct 09 PHP
php+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
Apr 09 PHP
php实现单链表的实例代码
Mar 22 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
php读取文件内容的三种可行方法示例介绍
Feb 08 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
Yii2实现ajax上传图片插件用法
Apr 28 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
Aug 03 PHP
php读取der格式证书乱码解决方法
Jun 22 #PHP
PHP aes (ecb)解密后乱码问题
Jun 22 #PHP
php实现对象克隆的方法
Jun 20 #PHP
php判断对象是派生自哪个类的方法
Jun 20 #PHP
php类的扩展和继承用法实例
Jun 20 #PHP
php传值赋值和传地址赋值用法实例分析
Jun 20 #PHP
php多重接口的实现方法
Jun 20 #PHP
You might like
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
Python解析多帧dicom数据详解
2020/01/13 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
博士学位自我鉴定范文
2013/12/26 职场文书
颁奖典礼主持词
2014/03/25 职场文书
初一新生军训方案
2014/05/22 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
群众路线专项整治方案
2014/10/27 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL