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 preg_match_all结合str_replace替换内容中所有img
Oct 11 PHP
php 生成随机验证码图片代码
Feb 08 PHP
php防攻击代码升级版
Dec 29 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
yii2 commands模式以及配置crontab定时任务的方法
Aug 19 PHP
详解php伪造Referer请求反盗链资源
Jan 24 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
Oct 08 PHP
PHP设计模式之命令模式示例详解
Dec 20 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+mysql一个名片库程序
2006/10/09 PHP
php在线生成ico文件的代码
2007/10/09 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
php不用正则验证真假身份证
2013/11/06 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
js如何验证密码强度
2020/03/18 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
python取代netcat过程分析
2018/02/10 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
类和结构的区别
2012/08/15 面试题
党员领导干部承诺书
2014/05/28 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
python之基数排序的实现
2021/07/26 Python