<?php
error_reporting(0);
ob_start();
header(‘Content-Type:
image/png‘);
define(‘IMG_NO‘, "no.png");
#刚开始显示的提示信息
define(‘IMG_BACKGROUND‘,
"background.png");
define(‘IMG_WIDTH‘, 400);
define(‘IMG_HEIGHT‘,
128);
define(‘FONT_NAME‘, "AdobeHeitiStd-Regular.otf");
#字体文件名
define(‘CACHE_PATH‘, rtrim(realpath("./cache"), ‘/‘).‘/‘);
#缓存目录
define(‘CACHE_EXPIRE‘, 60*60); #缓存时间,单位秒
#(!is_dir(CACHE_PATH)
&& is_writable(CACHE_PATH)) || die;
/*
$remote: 远程URL
$local: 本地缓存路径
$expire: 过期时间。为-1时,永久不更新缓存
*/
function load_from_cache($remote,
$local, $expire = CACHE_EXPIRE, $as_path = false) {
#过滤潜在的危险字符
$local =
preg_replace("/[.\/\\\?\*\‘\"\|\:\<\>]/", "_", $local);
$cache = CACHE_PATH.$local;
#查找缓存
if(file_exists($cache) && ($expire = -1 || filemtime($cache) -
time() < $expire))
return $as_path ?
$cache : file_get_contents($cache);
#文件不存在或缓存过期,重新下载
$content =
file_get_contents($remote);
file_put_contents($cache,
$content);
return $as_path ? $cache :
$content;
}
/*
返回客户端信息。
*/
function
client_info() {
$url =
"http://ip.taobao.com/service/getIpInfo.php?ip=";
$ip =
($_SERVER["HTTP_VIA"] && $_SERVER["HTTP_X_FORWARDED_FOR"] ?
$_SERVER["HTTP_X_FORWARDED_FOR"] :
$_SERVER["REMOTE_ADDR"]);
$info = explode(‘"‘,
load_from_cache($url.$ip, $ip, -1));
$string =
$info[7].$info[23].$info[31].$info[47];
return
json_decode(‘"‘.$string.‘"‘);
}
$referer =
$_SERVER[‘HTTP_REFERER‘];
#$referer =
"http://user.qzone.qq.com/123456789/infocenter";
$pattern =
"/http:\/\/user.qzone.qq.com\/(\d+)\/infocenter/";
if(preg_match($pattern,
$referer, $matches)) {
#获取QQ号码
$uin
= $matches[1];
$info = explode(‘"‘,
load_from_cache(
"http://base.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins=".$uin,
$uin));
$avatar = $info[3];
$nickname = iconv("GBK", "UTF-8//IGNORE", $info[5]);
$client = client_info();
#重点来了,生成图片
try{
$im = imagecreatefrompng(IMG_BACKGROUND);
#绘制头像
$avatar_file = load_from_cache($avatar, $uin.".jpg", 60*60*24,
true);
$im_avatar =
imagecreatefromjpeg($avatar_file);
imagecopymerge($im, $im_avatar, 14, 14, 0, 0, 100, 100,
100);
imagedestroy($im_avatar);
#绘制文字
$blue =
imagecolorallocate($im, 0, 0x99, 0xFF);
$white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
$texts = array(
array(12, 148, 40, $white, $uin),
array(18, 125, 70, $blue,
$nickname),
array(16, 125, 100, $blue, $client)
);
foreach($texts as
$key=>$value) {
imagettftext($im, $value[0], 0, $value[1], $value[2], $value[3],
FONT_NAME,
mb_convert_encoding($value[4], "html-entities",
"utf-8")); #解决乱码问题
}
imagepng($im);
imagedestroy($im);
header("Content-Length:
".ob_get_length());
ob_end_flush();
} catch (Exception $e)
{
#die($e->getMessage());
$error =
true;
}
} else {
$error = true;
}
if($error){
header(‘Content-Length: ‘.filesize(IMG_NO));
echo
file_get_contents(IMG_NO);
}
相关文章
- 10-15hypothesis test
- 10-15[QBXT游记]Day3 Test & Day4
- 10-15将CodedUI Test 放到控制台程序中,模拟鼠标键盘操作
- 10-15Web Performance Test: 如果使用Plugin过滤Dependent Request
- 10-15test20190909 Gluttony
- 10-15test.
- 10-15test.
- 10-15不同语言的水仙花性能比较【Test1W】
- 10-15test_bit原子操作
- 10-15test