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实现的生成静态HTML速度快类库
Mar 31 PHP
发一个php简单的伪原创程序,配合商城采集用的
Oct 12 PHP
yii实现图片上传及缩略图生成的方法
Dec 04 PHP
PHP IDE phpstorm 常用快捷键
May 18 PHP
PHP程序中使用adodb连接不同数据库的代码实例
Dec 19 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
Oct 29 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
destoon官方标签大全
2014/06/20 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python字符串常用方法
2018/06/14 Python
浅谈python常用程序算法
2019/03/22 Python
Python2与Python3的区别实例分析
2019/04/11 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
捐款倡议书
2014/04/14 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
硕士生找工作求职信
2014/07/05 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
万能检讨书2000字
2014/10/17 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
Python  lambda匿名函数和三元运算符
2022/04/19 Python