inc.php ** 中文显示点阵输出 version 1.0 ** 只提供简单的操作:输出默认大小的纯中文字符串到图片的坐标(0,0)上 ** 更多功能,请见下一版本。 * ****************************************/ function draw($image,$string,$color) { $fp=fopen("chs16.fon","rb");//二进制方式读点阵字库chs16.fon if (!feof($fp))//如果文件指针到了文件末尾,退出,不要忘记关闭文件 { while($string)//当字符串不为0 { $qh=ord(substr($string,0,1))-0xa0; $wh=ord(substr($string,1,2))-0xa0; /* 这两行代码,其实是获取一个中文的机内码。 substr($string,0,1);是从$string中获取第一个字节,然后,通过ord();将这个字符转换为整数。(由于PHP不支持无符号整数,所以没有这一步转换的话,你就只能得到一个0。)在转换为整数之后,就能进行计算了。机内码减去0xa0(10100000),就得到了区位码。 substr($string,1,2);是获取$string中的第二个字节。*/ $offset=(94*($qh-1)+($wh-1))*32; /*得到了汉字的区位值后,就开始计算偏移量了。*/ fseek($fp,$offset,SEEK_SET); /*在字库文件$fp中,将文件指针定位到偏移量。*/ $buffer=preg_split('//', fread($fp,32), -1, PREG_SPLIT_NO_EMPTY); /* fread($fp,32);是从$fp中读取32个字节数据,然后通过preg_split();分配到数组$buffer中。preg_split();是一个支持正则表达的函数。关于正则表达式,我正在学习中。为什么这样用,我也不知道。PHP手册里有本实例。*/ for($i=0;$i<16;$i++) //点阵的行数:16 列数也应该是16 for($j=0;$j<2;$j++) //因为是两个字节,那么,就要一个一个地画了 for($k=0;$k<8;$k++) //每个字节,都有8个点的数据 &nbs上一页 [1] [2] [3] [4] [5] [6] 下一页 |