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 相关文章推荐
基于文本的访客签到簿
Oct 09 PHP
用PHP产生动态的影像图
Oct 09 PHP
怎样在UNIX系统下安装MySQL
Oct 09 PHP
PHP 图片水印类代码
Aug 27 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
ThinkPHP连接数据库及主从数据库的设置教程
Aug 22 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
php实现html标签闭合检测与修复方法
Jul 09 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
PHP使用pdo实现事务处理操作示例
Sep 05 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
php中处理模拟rewrite 效果
2006/12/09 PHP
php修改数组键名的方法示例
2017/04/15 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
决策树的python实现方法
2014/11/18 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
python代码中怎么换行
2020/06/17 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
英语专业个人求职自荐信
2013/09/21 职场文书
代办委托书怎么写
2014/08/01 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
母亲节主题班会
2015/08/14 职场文书
2016继续教育研修日志
2015/11/13 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
团组织关系介绍信
2019/06/24 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
MongoDB支持的数据类型
2022/04/11 MongoDB
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers