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 相关文章推荐
php 8小时时间差的解决方法小结
Dec 22 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
Jan 03 PHP
php递归方法实现无限分类实例代码
Feb 28 PHP
php自动识别文字编码并转换为目标编码的方法
Aug 08 PHP
php 利用array_slice函数获取随机数组或前几条数据
Sep 30 PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
PHP封装的非对称加密RSA算法示例
May 28 PHP
Laravel配置全局公共函数的方法步骤
May 09 PHP
PHP代码加密的方法总结
Mar 13 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
php写的AES加密解密类分享
2014/06/20 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
2017/07/05 NodeJs
最实用的JS数组函数整理
2017/12/05 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
pandas 条件搜索返回列表的方法
2018/10/30 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
自主实习接收函
2014/01/13 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
2014年妇联工作总结
2014/11/21 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
Python 文字识别
2022/05/11 Python