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 相关文章推荐
对Session和Cookie的区分与解释
Mar 16 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Mar 31 PHP
php给每个段落添加空格的方法
Mar 20 PHP
PHP回溯法解决0-1背包问题实例分析
Mar 23 PHP
PHP学习笔记(二):变量详解
Apr 17 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
smarty的section嵌套循环用法示例
May 28 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
PDO::lastInsertId讲解
Jan 29 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数学运算
2011/12/30 PHP
PHP队列用法实例
2014/11/05 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
django 环境变量配置过程详解
2019/08/06 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
Python可以用来做什么
2020/11/23 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
空指针到底是什么
2012/08/07 面试题
《假如》教学反思
2014/04/17 职场文书
作文批改评语大全
2014/04/23 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS