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

2016-01-29 13:42 43 1 收藏

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

【 tulaoshi.com - PHP 】

前言:
现在,越来越多的人喜欢上网了,越来越多的人拥有了自己的个人主页。随着各种自动化软件工具的出现,制作网页越来越简单。但,由于特效随处可得,创新的东西,越来越少。说不定,哪天,你会发现某个网站上的计数器和自己的一模一样。网页越做越老练。网页上的东西,也越来越多,越来越丰富。
设问: 在网页上,如果我要添加一个计数器:
以前,那就去空间提供商那里要个链接,或其他地方去复制个地址,但这一些,总归是别人做的,好不好,你是没有太多的发言权的,只能一个一个地找。 在网页上,我要将一些信息发布出去:
假如信息是文本,做一个新页面,加个链接;
是数据,做一个新页面,加个链接:
可要是这些数据经常更新,甚至,每小时、每分钟,都可能会改变,你是否愿意守在电脑前,不停修改、上传呢?(咱可不是商业网站,没有人愿意为你而烧钱。)
而留言板、聊天室、论坛,这些,决不是单靠HTML和JAVASCRIPT就能搞定的。

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

软件需求:
PHP:GD Library
配置支持PHP的服务器。我用OmniHTTPd Professional

对于计数器和实时数据统计、发布,我们可以用图片来完成。在图片中输出文字。
在PHP中,要创建一个图片,并在上面显示点内容,基本步骤如下:

<?php
//http头,告诉浏览器,这是一个GIF图片
header ("Content-type: image/gif");
// 要画画,先要有花布不是?创建一个400×300调色板图像
$im = imagecreate (400, 300);
$black = imagecolorallocate ($im, 0, 0, 0);
// 默认黑色背景。
//(默认,是指第一个定义的颜色。如果在此行代码前面定义了另一个颜色,那么,最先定义的那个,就是默认背景颜色。)
$red = imagecolorallocate ($im, 255, 0, 0);
//红色。如果这两行交换,你会发现背景是红色,文字是黑色。
$string="1234567890";
// 要绘制的字符
imagestring ($im,12,10,10,$string,$red);
//在(10,10)开始绘制字符串
imagepng ($im);
// 以png格式输出,也可以用imagejpeg($im);或magegif($im);但后者,如果GD版本高于1.6,就不能用了。
imagedestroy ($im);
// 结束,清除所有占用的内存资源
?


上面示例,在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了。
还好,还有其他办法。
可以通过字符映射,将预先转换好的码表中字符输出来。但,你需要一张码表!
或者,手工绘制每一个中文的每一个点!感觉怎么样?!

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

画字,首先要知道怎么画。
初中的简单函数,学过吧?要画出函数的图形,做过吧?算出某点的坐标,然后连接两相邻点。这种方法,叫描点法。
我们要做的,是尽量多地将点算出来,然后在相应坐标显示出来。
你是否听说过点阵打印机、点阵汉字?
在输出汉字时,它们是用一个个点来表示的。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)

在某个坐标上显示一个某种颜色的点的函数是:
int imagesetpixel ( resource image, int x, int y, int color)
假定我要在坐标(100,100)处显示一个白色的点,那么,只需如下代码:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)

<?php
header ("Content-type: image/gif");
$image = imagecreate (400, 300);
$black = imagecolorallocate ($image, 0, 0, 0);
$white = imagecolorallocate ($image, 255, 255, 255); // 定义白色
imagesetpixel ( $image, 100, 100, $white);
imagepng ($image);
imagedestroy ($image);
?

来源:http://www.tulaoshi.com/n/20160129/1491194.html

延伸阅读
标签: Web开发
当参数值为英文是可以正确写入数据库,但为中文是就不行,如何解决这个中文乱码的问题呢? 下面一步步教你如果解决php与ajax开发过程中,提交中文参数乱码的问题。 出现的原因是因为参数传递的格式问题. 因为英文在参数传递转换两边格式一样所以没问题. 而中文状态下的解析会出现构造组合问题.出现类似繁体的乱玛. 可以这样解决: ...
标签: Painter
在Painter中想要为图片部分替换颜色,除了可以用魔术棒选取,还可以利用颜色选取形成新的通道,转为选区,重新定义这个颜色。这个技巧在photoshop中可能大家已经很熟悉了,就是color range的命令,painter同样可以做到…… 1.打开Channels(通道面板)的三角隐藏菜单,选择New from color range(从色彩范围获得新通道)。 2.在弹出...
在开始编写代码之前,先添加对Outlook8.0objectlibrary的引用。 代码如下: OptionExplicit DimAppAsObject DimItmAsObject SetApp=CreateObject("Outlook.Application") SetItm=App.CreateItem(0) WithItm .Subject="AtipfromvbCodeMagician" .To="newvb@21cn.com" .Body="VB编程...
标签: PHP
  前几天我在oso论坛上问有没有这个源程序,没人回复。终于下定决心移植一个这样的函数,感谢网友Keyes提供移植用的Delphi源代码。其调用方式为$txt=big5togb($txt)。     (注:源代码中的include "data_big5.php";这个文件在就是一个数组,在http://caocao.oso.com.cn/data_big5.zip,请编辑下载到oso上...
标签: PHP
  我使用的是FPDF(www.fpdf.org),下载了fpdf类库后,还要使用下面的中文类库才能支持中文,但只能使用一种中文字体(华文仿宋)。为此我烦恼了很长时间,现在终于搞定了,将TrueType字体转化为pt1字体使用: 下面是在FPDF上找的一个中文类库: <?php require('fpdf.php'); $Big5_widths=array(' '=250,'!'=250,'"'=408,'#'=668,'$...

经验教程

895

收藏

35
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部