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 相关文章推荐
常用表单验证类,有了这个,一般的验证就都齐了。
Dec 06 PHP
php读取xml实例代码
Jan 28 PHP
基于PHP异步执行的常用方式详解
Jun 03 PHP
163的邮件用phpmailer发送(实例详解)
Jun 24 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
Jun 30 PHP
php遍历删除整个目录及文件的方法
Mar 13 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
Laravel框架路由管理简单示例
May 07 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程序内部post数据的方法
2015/03/31 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
Python unittest模块用法实例分析
2018/05/25 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python3.5安装python3-tk详解
2019/04/26 Python
Kali Linux安装ipython2 和 ipython3的方法
2019/07/11 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
总经理助理工作职责
2014/02/06 职场文书
护士自荐信怎么写
2015/03/06 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
教你一步步实现一个简易promise
2021/11/02 Javascript
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL