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 相关文章推荐
《APMServ 5.1.2》使用图解
Oct 23 PHP
轻松修复Discuz!数据库
May 03 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
php返回json数据函数实例
Oct 09 PHP
php中spl_autoload详解
Oct 17 PHP
PHP原生函数一定好吗?
Dec 08 PHP
php中session与cookie的比较
Jan 27 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
php实现银联商务公众号+服务窗支付的示例代码
Oct 12 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
PHP 文章中的远程图片采集到本地的代码
2009/07/30 PHP
PHP文件操作实现代码分享
2011/09/01 PHP
php创建、获取cookie及基础要点分析
2015/01/26 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
javascript 节点遍历函数
2010/03/28 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python使用zip将list转为json的方法
2018/12/31 Python
python 实现目录复制的三种小结
2019/12/04 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
运动会开幕式主持词
2014/03/28 职场文书
节水口号标语
2014/06/19 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
质量主管工作职责
2014/09/26 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
销售内勤岗位职责
2015/02/10 职场文书
追悼会家属答谢词
2015/09/29 职场文书
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记
Selenium浏览器自动化如何上传文件
2022/04/06 Python
java版 简单三子棋游戏
2022/05/04 Java/Android