我们想要制作的东西是一张图片,或者至少看起来像图片的东西(鸭子类型),这张图片可以在不同的时刻呈现不同的形态,然而必须有一个固定的地址。因为我们是想把它插入到论坛里跟人开玩笑,就像这里一样。
要有固定地址这一点限制了我们只能用服务器端技术来炮制图片。也就是说,基于JS的技术,或者更广泛来讲,基于DHTML技术的工具我们都不能使用。因为我们要的是一个图片地址,而DHTML是在客户端进行的解析。
要使用服务器端技术,首先要求我们有服务器。这里我选择的是新浪云平台SAE上的服务,使用PHP来完成。欢迎大家访问http://omegacoleman.sinaapp.com/。
然而这个问题还有一个潜在需求,就是图像的地址必须是.jpg,.png这类后缀,然而使用PHP建立的无疑是.php后缀。现如今大多数论坛都会禁止插入没有图像后缀的图像,即使是你的php返回了图像数据也一样。在第三节中我会解决这个问题。
使用PHP进行图像处理很简单,这里我们采用GD库进行处理。但在这之前,我们还要修改HTTP头。因为PHP默认返回text/html头,这显然不是我们想要的。
<?php header("content-type:image/jpeg");
这样写可以改变成jpeg网页头,现在它看起来像鸭子了。
然后,我们就可以用GD库进行图像处理了。为了达到刷新改变的效果,我们只需简单的加入一些随机元素,代码如下:
$img = imagecreatefromjpeg('http://omegacoleman-occnimages.stor.sinaapp.com/notepad.jpg'); $color = imagecolorallocate($img, 0, 0, 0); $txt_bleach = "故事的主角黑崎一护是个看似单薄却满身\n". "热血少年,并且拥有能看见灵的体质。一\n". "天晚上,死神朽木露琪亚被他一脚踢到墙\n". "角并满脸惊疑地望着他问“你能看见我?”\n". "时序幕才这样被他正式地踢开……"; $txt_hyouka = "在其他正要展开玫瑰色高中生活的学生当\n". "中,本作的男主角却是一个灰色的节能主\n". "义者,没有必要的事都不会主动去做,因\n". "为不想后悔,被人说他疏离、厌世也没所\n". "谓,因为这就是他的作风。这样的他,因\n". "为姐姐的命令而进入了濒临废社的古籍研\n". "究社,虽然好不容易招到了四名新社员,\n". "却又卷入了三十二年前社长突然逃学的谜\n". "团之中……"; $txt_another = "26年前夜见山北中学的三年三班里,曾经\n". "有一位名叫见崎的学生。她不仅是位运动\n". "天才还是个优等生,个性平易近人广受众\n". "人喜爱的她却在某日突然猝死,极度悲伤\n". "的同班同学们无法接受这件事实,众人决\n". "定到毕业之前仍想像见崎还活著般度过每\n". "一天……"; $txt_gc = "本作的男主角樱满集,17岁的高校二年生\n". ",他的右手却寄宿著特殊的能力王之能力\n". "能从同伴间取出反映人格的物质,并将他\n". "人的能力据为己用。被取出的物质叫做虚\n". "空,除了可以是大剑,也可以是乐器或相\n". "机。虽然集一直隐藏着自己的能力,并尽\n". "量避免为其他人制造麻烦,但当他遇上女\n". "主角后,他的人生便从此转变了……"; $all_txt = array($txt_gc, $txt_another, $txt_hyouka, $txt_bleach); $txt = $all_txt[array_rand($all_txt)]; imagettftext($img, 15, 0, 80, 120, $color, "simhei.ttf", $txt);
这样我们就得到了一个图片数据块$img,其中的文字内容是随机的。
随后我们向客户端输出这个数据块:
imagejpeg($img);
好了,现在它叫起来也像是鸭子了。
我的这个php文件在http://64.omegacoleman.sinaapp.com/piclamp.php,你刷新就可以看出变化。记住上传时把php文件和simhei.ttf(可从网上下载)字体文件放在一起。
这一步相对简单很多,思路很明确——URL重写。为什么选择URL重写呢?因为如果用其他方式跳转至该php都没有办法改变后缀为.jpg。
在SAE中,URL重写十分容易。有两种方法:
一是在SAE管理页面中单击右侧的AppConfig,再点击右侧的URL重写(rewrite),在对话框“重写后规则”中填入后缀为.php的文件,再任选一个不存在的图像文件地址填入“重写前规则”。点击“添加”“确定”,然后再把你在“重写前规则”中输入的地址打在浏览器地址栏中回车,刷新几次,就能看到图像在不断变化。
还有一种方法是直接修改config.yaml,这个在此不做赘述。
此时再把这个URL发在Discuz论坛中,就能不断变化啦。
如果你用的不是SAE,而是Apache,可以使用mod_rewrite.so:
在httpd.conf中将这一行注释解开:
LoadModule rewrite_module modules/mod_rewrite.so
再搜索AllowOverride,将后面的None改成All,重启服务器。
随后修改网站目录下.htaccess(没有就建立一个),加入:
RewriteEngine On
RewriteRule ***.jpg ***.php
大功告成了!