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 相关文章推荐
一个连接两个不同MYSQL数据库的PHP程序
Oct 09 PHP
PHP form 表单传参明细研究
Jul 17 PHP
php中$this-&amp;gt;含义分析
Nov 29 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
Jan 09 PHP
twig里使用js变量的方法
Feb 05 PHP
php防止sql注入的方法详解
Feb 20 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
PHP微信网页授权的配置文件操作分析
May 29 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中simplexml_load_string函数使用说明
2011/01/01 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
使用Template格式化Python字符串的方法
2019/01/22 Python
Python异常处理知识点总结
2019/02/18 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
python中的yield from语法快速学习
2020/11/06 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
一些网络技术方面的面试题
2014/05/01 面试题
关于Java finally的面试题
2016/04/27 面试题
文字自荐书范文
2014/02/10 职场文书
爱心捐款倡议书
2014/04/14 职场文书
公司离职证明样本
2014/09/13 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers