test

<?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);
}

test

上一篇:12306自动查询刷新


下一篇:bundle,