服务器端动态输出图像

摘要

本文记录了服务器端(php,java)直接输出图像的一种方法。可用于论坛签名实时显示IP及时间。

java版效果:

Servlet输出IP到图像
Servlet输出IP到图像

php版图像效果:
IP

Key Words: 动态输出图像, IP输出到图像,

引言

今天整理虚拟主机空间里的文件时,发现根目录有一个ip.php文件,一时忘了是啥,一看内容才发现是早些时候写的php输出图像的小程序片段。
最早是在Dospy.com塞班论坛的用户[变号]的论坛签名上看到过。(2012年)可以在[这里]查看论坛签名效果。好吧其实就是一个图像:
IP

PHP版

于是可能在去年某个时候,我上塞班论坛时看到了变号君的签名,就想着用php试试能不能实现。
下面是当时通过搜索互联网,写出来的代码:

出处已不可考,或许是我从网上东拼西凑出来的。直接看代码也挺直观的。
缺点:文件名是.php后缀,而不是图像的后缀。

2016-01-28更新:
使用.htaccess的URL重写规则,使得访问ip.png实际上是访问ip.php

第一步:开启Apache服务器的重写模块

打开 Apache 的配置文件 httpd.conf 文件,找到下面一行:
#LoadModule rewrite_module modules/mod_rewrite.so
去掉#号注释。

第二步:新建.htaccess文件

Linux可以直接新建,Windows需要使用记事本的另存为,类型选择所有文件,一般编码选择UTF8(不能直接重命名)。

第三步:编写伪静态规则

^ip\.png$^脱帽符号表示匹配开头, \.点号使用反斜杠转义 $美元符号表示匹配结尾。 [L]表示停止处理接下来的规则

参见

用.htaccess文件实现URL重写

Java版

正好目前在学Java Web, 于是今天我打算用java来也试试实现一下。
用JSP的Servlet 匹配(mapping) URL 这样就可以是任意文件名了。
首先我们需要设置输出类型是图像,然后创建一幅图像,把IP及日期画在图像上,最后输出图像即可。(下方右上角可以选择新窗口看代码)

在浏览器输入 http://localhost:8080/Project-Name/ip.png 就能看到效果了。

类名使用了注解配置URL mapping,就不用到web.xml里配置了。先使用预定义的宽高创建了图像,然后设置画笔的字体,这样之后就可以计算字符串在这个字体下的像素大小了。生成重新透明背景的图像,使用相同的字体设置画笔,再设置颜色,把字符串画上图像,最后输出图像。

参考

见代码中注释的链接。


“服务器端动态输出图像”的7个回复

Loading...
  1. 这个在静态、动态验证码的应用倒是相当广泛。
    在php里header定位到某个图像也可以实现随机图片。
    不知道伪静态和header一块用会有啥效果,准备试试……

  2. 貌似我曾也用PHP试过给QQ空间插的图片做动态改变。记得是得加载PHP的什么GD画图的库。
    我想到一个,现在浏览器支持SVG图像,所以我想,可以支持用代码输出XML代码浏览器解析成失量图像,对于你此文的输出IP、时间这类内容真是再合适不过了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注