获取gravatar图像

jerry thinkphp 2015年11月19日 收藏
wordpress的头像系统一直用的是全球通用头像gravatar。我想在自己的项目中用这个头像系统。翻了一遍wordpress之后简单的修改得到了自己想要的gravatar函数 get_avatar_src。这函数返回所要求的头像地址。部分功能还没有实现, 可以根据自己的需求再改一改....
/**
 * 返回用户的avatar头像地址
 *
 * @param unknown $id_or_email
 *            用户ID或邮箱地址
 * @param string $size
 *            大小
 * @param string $default
 *            默认头像
 * @param string $alt            
 * @return string
 */
function get_avatar_src($id_or_email, $size = '96', $default = '') {
    if (! is_numeric ( $size ))
        $size = '96';
    
    $email = '';
    if (is_numeric ( $id_or_email )) {
        // id传入的时候处理
    } else {
        // 否则传给$email
        $email = $id_or_email;
    }
    
    // 默认头像
    if (empty ( $default )) {
        $avatar_default = ''; // get_option('avatar_default'); //获取默认设置
        if (empty ( $avatar_default )) // 如果没有设置,则定义默认
            $default = 'mystery';
        else
            $default = $avatar_default;
    }
    
    if (! empty ( $email )) // 如果不为空, 生成hash代码
        $email_hash = md5 ( strtolower ( trim ( $email ) ) );
        
    if (! empty ( $email )) { // 如果邮箱不为空,则使用邮箱地址生成链接
        $host = sprintf ( "http://%d.gravatar.com", (hexdec ( $email_hash ) % 2) );
    } else // 否则使用默认地址
        $host = 'http://0.gravatar.com';
    
    $host = str_replace ( array (
            "www.gravatar.com",
            "0.gravatar.com",
            "1.gravatar.com",
            "2.gravatar.com" 
    ), "gravatar.duoshuo.com", $host );
    
    
    if ('mystery' == $default)
        $default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com')
    elseif ('blank' == $default)
        // 如果为空(blank), 则获取空白图像
        $default = $email ? 'blank' : ''; // includes_url( 'images/blank.gif' );
    elseif (! empty ( $email ) && 'gravatar_default' == $default)
        // 如果邮箱已有, 清空默认头像
        $default = '';
    elseif ('gravatar_default' == $default)
        $default = "$host/avatar/?s={$size}";
    elseif (empty ( $email ))
        $default = "$host/avatar/?d=$default&s={$size}";
    
    if (! empty ( $email )) {
        
        
        $out = "$host/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&d=' . urlencode ( $default );
        
        $out = str_replace ( '&', '&', strip_whitespace ( $out ) );
    } else {
        $out = $default;
    }
    
    return $out;
}