php绘制点,在 PHP 中用描点法“绘制”中文

前言:

现在,越来越多的人喜欢上网了,越来越多的人拥有了自己的个人主页。随着各种自动化软件工具的出现,制作网页越来越简单。但,由于特效随处可得,创新的东西,越来越少。说不定,哪天,你会发现某个网站上的计数器和自己的一模一样。网页越做越老练。网页上的东西,也越来越多,越来越丰富。

设问:在网页上,如果我要添加一个计数器:

以前,那就去空间提供商那里要个链接,或其他地方去复制个地址,但这一些,总归是别人做的,好不好,你是没有太多的发言权的,只能一个一个地找。

在网页上,我要将一些信息发布出去:

假如信息是文本,做一个新页面,加个链接;

是数据,做一个新页面,加个链接:

可要是这些数据经常更新,甚至,每小时、每分钟,都可能会改变,你是否愿意守在电脑前,不停修改、上传呢?(咱可不是商业网站,没有人愿意为你而烧钱。)

而留言板、聊天室、论坛,这些,决不是单靠HTML和JAVASCRIPT就能搞定的。

为了实现更多的自动控制,可以使用CGI(Common Gateway Interface)程序来实现这些功能。

软件需求:PHP:GD Library

配置支持PHP的服务器。我用OmniHTTPd Professional

对于计数器和实时数据统计、发布,我们可以用图片来完成。在图片中输出文字。

在PHP中,要创建一个图片,并在上面显示点内容,基本步骤如下:

上面示例,在400×300的图片上,自点(10,10)开始,绘制12磅的"1234567890"。你有没有注意到这张图片的大小是:251字节!你也可以试试其他的输出格式。

图片的大小,与图片中非背景象素点数有关,跟输出多少象素无关。

然而,有一个问题。

你可以用imagestring()输出如下的信息:

imagestring($im,1,0,0,"abcdefghijklmnopqrstuvwxyz0123456789~!@#$%^&*()_+{}|:"<>?[]';,./",$red);

可是,你无法正确输出中文!!!

imagestring($im,1,0,0,"啊",$red);

你看到的,决不是中文!!而是乱码。

PHP默认的字符集是UTF-8,而简体中文是GB2312。

如何解决?!

为了解决这个问题,你可以让PHP加载扩展模块php_iconv.dll(UNIT下的后缀名是.SO),不过,有时候,可能不能正常工作。本来,我要把一段测试代码放上来,可这次,怎么弄都没有成功。为了避免错误,我还是不把它们放上来了。

但,最致命的,如果你的空间服务商关闭了该扩展模块,或者,甚至禁止了加载模块的DL()函数,那,你就只能跟中文BYE-BYE了。

还好,还有其他办法。

可以通过字符映射,将预先转换好的码表中字符输出来。但,你需要一张码表!

或者,手工绘制每一个中文的每一个点!感觉怎么样?!

好,来吧,我们一起来画字!

画字,首先要知道怎么画。

初中的简单函数,学过吧?要画出函数的图形,做过吧?算出某点的坐标,然后连接两相邻点。这种方法,叫描点法。

我们要做的,是尽量多地将点算出来,然后在相应坐标显示出来。

你是否听说过点阵打印机、点阵汉字?

在输出汉字时,它们是用一个个点来表示的。

在某个坐标上显示一个某种颜色的点的函数是:

int imagesetpixel ( resource image, int x, int y, int color)

假定我要在坐标(100,100)处显示一个白色的点,那么,只需如下代码:

也就是说,我们只要获取某个汉字的所有点的信息,我们就能够通过这个函数,输出那个汉字。

在文件chs16.fon里,保存的,是国标区位码表(国家标准信息交换用汉字编码基本字符集GB-2312)。它是汉字的点阵字库。(WIN98系统中,此文件在c:windowscommand下。如果你要把它放在UNIX系统下使用,请注意大小写。如果没有,你可以在文末找到链接。)

它是MSDOS时代的,但,好东西,还是应该拿出来一用的。

从chs16.fon里,我们可以读取汉字的点阵数据。每个汉字,都是由16×16个点构成的。笔划走过的地方,点的值为1,否则为0;每个点占用一个位,每8个点构成一个字节。那么,一个汉字,就需要(16×16÷8=32)字节。

下面这个实例,是为了说明字符点阵的表示方法。

这里,定义了一个8×8的矩阵,显示了一个字母C,白色的方块用0表示,黑色方块用1表示,那么,这八行图形的代码分别是:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值