PHP读取汉字的点阵数据

   本文给大家详细讲述了使用PHP读取汉字的点阵数据的方法和示例,十分的实用,有需要的小伙伴可以参考下。

  项目中遇到的问题:

  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组成的字符串

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

<?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;
?>

  以上所述就是本文的全部内容了,希望大家能够喜欢。

时间: 2024-08-03 23:27:58

PHP读取汉字的点阵数据的相关文章

PHP读取汉字的点阵数据_php实例

项目中遇到的问题: PHP如何读取汉字的点阵数据?想实现输入一段文字,能得到这一段文字的所有点阵码. 解决方法: 简体中文国标字库7445个字符,其中汉字6773个,包括一级汉字3755个,二级汉字3008个.采用2字节(16位二进制)编码. 区位码:国标GB2312规定,所有的国标汉字与符号组成一个94×94的矩阵.在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94).每个区内有94个位(位号分

用PHP编程读取汉字点阵数据

编程|汉字|数据    背景知识:      简体中文国标字库(1981年订,中国大陆).7445个字符,其中汉字6773个,包括一级汉字3755个,二级汉字3008个.采用2字节(16位二进制)编码.      区位码:国标GB2312规定,所有的国标汉字与符号组成一个94×94的矩阵.在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94).每个区内有94个位(位号分别为01到94)的汉字字符集.

PHP读取汉字点阵数据

汉字|数据 心血来潮,想模仿LCD的显示效果,写了个从点阵字库中提取汉字点阵数据的一段php脚本. 背景知识:简体中文国标字库(1981年订,中国大陆).7445个字符,其中汉字6773个,包括一级汉字3755个,二级汉字3008个.采用2字节(16位二进制)编码. 区位码:国标GB2312规定,所有的国标汉字与符号组成一个94×94的矩阵.在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94).每

Delphi中建立指定大小字体和读取该字体点阵信息的函数

由于要控制硬件,需要把矢量的汉字转化为点阵信息写入eprom或在液晶屏上 显示,因此用Delphi写了如下的函数,可以把指定的一个汉字(两个字符)转化 为点阵信息保存到文件,每个点对应一个位,有文字信息该位为1,否则为0. 目前该函数可以生成指定的大小汉字并读取成点阵字模信息保存到文件. 如ConvertToMatrix(Pchar('北'),6,18,'Font.dat')将生成12*18点阵文件 Font.dat,其中保存汉字'北'的字模.文件格式是从上到下,先行 后列,如下图,第一行保存0

C#如何读取Excel中的数据

#region 读取Excel中的数据 02./// <summary> 03./// 读取Excel中的数据 04./// </summary> 05./// <param name="excelFile">Excel文件名及路径,EG:C:\Users\JK\Desktop\导入测试.xls</param> 06./// <returns>Excel中的数据</returns> 07.private DataT

asp.net读取excel中的数据并绑定在gridview

 这篇文章主要介绍了asp.net读取excel中的数据并绑定在gridview上的方法,需要的朋友可以参考下       前台label,DropDownList,gridview控件 aspx.cs核心代码: 代码如下: using System.Data.OleDb;//需要引入命名 public void Excel_Click(object sender, EventArgs e) { if (this.AttachmentFile.Value == "" &&

C#操作Clipboard读取剪切板中数据实例详解

  本文实例讲述了C#操作Clipboard读取剪切板中数据的方法.分享给大家供大家参考.具体分析如下: 1 自定义一个类,并且保证它的可序列化的:实现ISerializable接口;或者用[Serializable]标记(如果有父类,则父类也需要被标记;可以[NonSerialized()]标记类中不想被序列化的字段) 2 注册自定义数据格式:调用静态方法DataFormats.GetFormat() 3 保存数据到clipboard:利用IdataObject接口,创建一个数据对象,并设置数

【UWP通用应用开发】文件选取器、获取文件属性、写入和读取、保存读取和删除应用数据

读取文件和文件夹名 这一节开始我们将陆续看到UWP通用应用是如何获取到文件及文件夹的属性等信息,以及如何写入和读取数据等,当然了最重要的还是如何保存读取和删除应用的数据. 在Windows上读取文件名.文件夹名 首先我们在XAML中定义一个Button和TextBlock,将读取文件/文件夹名的过程写在前者的click事件中,后者则用来显示文件信息. <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}&

c#-C# 图片转化为点阵数据

问题描述 C# 图片转化为点阵数据 c# 怎样将.bmp图片转成32位点阵数据 在网上找了很久..都是点阵数据转图片的,哪位大神有图片转点阵数据的啊,求指导 解决方案 参考我的程序http://bbs.csdn.net/topics/390114478 虽然这是针对字库的,但是因为字是画上去的,所以稍微修改,可以针对任意图片. 解决方案二: BMP 就是点阵,你还要怎么转? 解决方案三: 就是将图片转换成C语言数组.求大神指导...