Cravatar 开发者文档

初认头像 Cravatar|API、SDK、各语言图像请求与平台集成(Developer docs & API)

Favicon API 文档

API 概述

该 API 服务用于获取网站的 favicon 图标。不仅限于 WordPress 站点,它会自动检测并返回目标网站的 favicon 图标。如果无法获取到目标网站的 favicon,将返回默认图标。

API 端点

https://cn.cravatar.com/favicon/api/index.php

请求参数

参数名类型必填描述
urlstring是目标网站的 URL
refreshboolean否是否强制刷新缓存

使用示例

基础用法

https://cn.cravatar.com/favicon/api/index.php?url=cravatar.com

强制刷新缓存

https://cn.cravatar.com/favicon/api/index.php?url=cravatar.com&refresh=1

备用域名

响应说明

缓存机制

使用示例代码

HTML 中使用

Markdown 中使用

![favicon](https://cn.cravatar.com/favicon/api/index.php?url=cravatar.com)

注意事项

  1. 请确保提供的 URL 是有效的网址
  2. API 支持 HTTP 和 HTTPS 协议的网站
  3. 建议使用完整的域名,例如使用 example.com 而不是 www.example.com
  4. API 有默认超时设置,如果目标网站响应较慢可能会返回默认图标

错误处理

示例响应头

成功获取并命中缓存时:

Content-Type: image/x-icon
X-Icon-Cache: Hit

使用限制

支持格式

Go 语言图像请求

与自有程序集成页面希望增加 Golang 语言的案例,来自
@okatu-loli ,Go 实现 Cravatar 示例如下,可供参考。

package main

import (
	"crypto/md5"
	"encoding/hex"
	"fmt"
	"net/url"
	"strings"
)

// GetCravatar 返回指定电子邮件地址的 Cravatar URL 或完整的图像标签
func GetCravatar(email string, size int, defaultImage, rating string, imgTag bool, attrs map[string]string) string {
	// 构建基本的 Cravatar URL
	baseURL := "https://cn.cravatar.com/avatar/"
	
	// 清理并对电子邮件地址进行 MD5 哈希处理
	email = strings.TrimSpace(strings.ToLower(email))
	hash := md5.New()
	hash.Write([]byte(email))
	emailHash := hex.EncodeToString(hash.Sum(nil))
	
	// 构建 Cravatar URL
	cravURL := fmt.Sprintf("%s%s?s=%d&d=%s&r=%s", baseURL, emailHash, size, defaultImage, rating)
	
	// 如果 imgTag 为 true,则返回完整的 <img> 标签
	if imgTag {
		imgTagStr := fmt.Sprintf(`<img src="%s"`, cravURL)
		for key, value := range attrs {
			imgTagStr += fmt.Sprintf(` %s="%s"`, key, value)
		}
		imgTagStr += " />"
		return imgTagStr
	}
	
	// 否则,仅返回 URL
	return cravURL
}

func main() {
	email := "someone@somewhere.com"
	size := 40
	defaultImage := "https://www.somewhere.com/homestar.jpg"
	rating := "g"
	imgTag := true
	attrs := map[string]string{"class": "avatar", "alt": "User Avatar"}

	// 获取 Cravatar 图像 URL 或 img 标签
	result := GetCravatar(email, size, defaultImage, rating, imgTag, attrs)
	fmt.Println(result)
}

论坛原贴:https://cravatar.com/forums/topic/24944/

与 Gogs 集成

在conf/app.ini里面[picture]下面加个配置:

GRAVATAR_SOURCE = https://cn.cravatar.com/avatar/

附:按gogs的官方文档,个人自定义配置应该创建custom/conf/app.ini文件,并用这个文件里的配置项来覆盖conf/app.ini的配置。

但不知道是不是我的版本问题,我试了没用,只有在conf/app.ini里面修改才有用。

参考资料:gogs app.ini文件配置项说明

名称描述
AVATAR_UPLOAD_PATH存放用户上传头像的目录
GRAVATAR_SOURCE可以是 gravatar、duoshuo 或任何 URL,例如:http://cn.gravatar.com/avatar/
DISABLE_GRAVATAR激活该选项来仅使用本地头像
ENABLE_FEDERATED_AVATAR激活该选项来启用 Federated 头像服务(http://www.libravatar.org),当Gravatar 被禁用时此选项无法生效

此方法来自 知乎作者:李境界

为 Emlog 集成

目前 emlog 官方最新版已支持 Cravatar 头像,如果是旧版本等情况可以尝试通过以下方式手动集成。

<script>
const avaUrl = 'https://cn.cravatar.com/avatar/'

function alterAva(docName){
    for(let index = 0; index < $(docName).length; index++){

        let t_patt1 = new RegExp("[0-9a-z]{20,}");
        let t_grasrc = $(docName + ":eq("+ index +")").attr("src")

        let t_result =  avaUrl + t_patt1.exec(t_grasrc) + '?s=40';

        $(docName + ":eq("+ index +")").attr("src",t_result)
    }
}

alterAva(".comment-info_img")
alterAva(".avatar img")
</script>

原贴来自: 对于目前 avatar 头像不显示的问题,暂时使用这个方法解决

参考链接 :emlog 头像的说明,以及设置方法(博客 Cravatar 头像设置方法)

Django 图像请求

import hashlib
import urllib
from django import template
from django.utils.safestring import mark_safe
 
register = template.Library()
 
# return only the URL of the cravatar
# TEMPLATE USE:  {{ email|cravatar_url:150 }}
@register.filter
def cravatar_url(email, size=40):
  default = "https://example.com/static/images/defaultavatar.jpg"
  return "https://cn.cravatar.com/avatar/%s?%s" % (hashlib.md5(email.lower()).hexdigest(), urllib.urlencode({'d':default, 's':str(size)}))
 
# return an image tag with the cravatar
# TEMPLATE USE:  {{ email|cravatar:150 }}
@register.filter
def cravatar(email, size=40):
    url = cravatar_url(email, size)
    return mark_safe('<img src="%s" height="%d" width="%d">' % (url, size, size))

Ruby 图像请求

# include MD5 gem, should be part of standard ruby install
require 'digest/md5'
 
# get the email from URL-parameters or what have you and make lowercase
email_address = params[:email].downcase
 
# create the md5 hash
hash = Digest::MD5.hexdigest(email_address)
 
# compile URL which can be used in <img src="RIGHT_HERE"...
image_src = "https://cn.cravatar.com/avatar/#{hash}"

Perl 图像请求

使用 Perl 实现 Cravatar 非常简单,但是您确实需要包含几个外部库。这些可能已经安装在您的计算机上,但如果尚未安装,您将必须下载并安装它们。

让我们首先包含我们将使用的库函数:

use URI::Escape qw(uri_escape);
use Digest::MD5 qw(md5_hex);

接下来,假设您可以使用以下变量:

my $email = 'someone@somewhere.com';
my $default = "https://www.example.com/default.jpg";
my $size = 40;

您可以使用以下 Perl 代码构建您的头像 url:

my $crav_url = "https://cn.cravatar.com/avatar/".md5_hex(lc $email)."?d=".uri_escape($default)."&s=".$size;

img这仅构造 URL,因此在打印输出之前不要忘记将其放入标记中。

Python 图像请求

# import code for encoding urls and generating md5 hashes
import urllib, hashlib
 
# Set your variables here
email = "someone@somewhere.com"
default = "https://www.example.com/default.jpg"
size = 40
 
# construct the url
cravatar_url = "https://cn.cravatar.com/avatar/" + hashlib.md5(email.lower()).hexdigest() + "?"
cravatar_url += urllib.urlencode({'d':default, 's':str(size)})

如果您使用 Python 3,请尝试 libgravatar (调整为 libcravatar 即可)。这是第三方库,不受 Cravatar 官方支持。

Java 图像请求

如果您想要一种使用 Cravatar 的简单方法,请查看Ralf Ebert 的 jgravatar 库(调整为 jcravatar 即可),否则请继续阅读。

Java 中的事情有点复杂。下面的类将为您提供一个静态方法,该方法返回输入字符串的十六进制格式 md5:

import java.util.*;
import java.io.*;
import java.security.*;
public class MD5Util {
  public static String hex(byte[] array) {
      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < array.length; ++i) {
      sb.append(Integer.toHexString((array[i]
          & 0xFF) | 0x100).substring(1,3));        
      }
      return sb.toString();
  }
  public static String md5Hex (String message) {
      try {
      MessageDigest md = 
          MessageDigest.getInstance("MD5");
      return hex (md.digest(message.getBytes("CP1252")));
      } catch (NoSuchAlgorithmException e) {
      } catch (UnsupportedEncodingException e) {
      }
      return null;
  }
}

然后,此类可用于返回电子邮件地址的 MD5 哈希值(确保先小写!),如下所示:

String email = "someone@somewhere.com";
String hash = MD5Util.md5Hex(email);

使用返回的十六进制字符串,您可以构建您的头像 URL。

PHP 图像请求

使用 PHP 实现 Cravatar 非常简单。PHP提供了strtolower()、md5()、 和urlencode()函数,让我们可以轻松创建头像URL。假设以下数据:

$email = "someone@somewhere.com";
$default = "https://www.somewhere.com/homestar.jpg";
$size = 40;

您可以使用以下 php 代码构建您的头像 url:

$crav_url = "https://cn.cravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;

创建头像 URL 后,您可以随时输出:

<img src="<?php echo $crav_url; ?>" alt="" />

实施示例

此功能将允许您使用 PHP 快速轻松地将 Cravatar 插入页面中:

/**
 * Get either a Cravatar URL or complete image tag for a specified email address.
 *
 * @param string $email The email address
 * @param string $s Size in pixels, defaults to 80px [ 1 - 2048 ]
 * @param string $d Default imageset to use [ 404 | mp | identicon | monsterid | wavatar ]
 * @param string $r Maximum rating (inclusive) [ g | pg | r | x ]
 * @param boole $img True to return a complete IMG tag False for just the URL
 * @param array $atts Optional, additional key/value attributes to include in the IMG tag
 * @return String containing either just a URL or a complete image tag
 * @source https://cravatar.com/developer/php-image-requests
 */
function get_cravatar( $email, $s = 80, $d = 'mp', $r = 'g', $img = false, $atts = array() ) {
    $url = 'https://cn.cravatar.com/avatar/';
    $url .= md5( strtolower( trim( $email ) ) );
    $url .= "?s=$s&d=$d&r=$r";
    if ( $img ) {
        $url = '<img src="' . $url . '"';
        foreach ( $atts as $key => $val )
            $url .= ' ' . $key . '="' . $val . '"';
        $url .= ' />';
    }
    return $url;
}

创建哈希值(Hash)

Cravatar上的所有URL都基于电子邮件地址的散列值使用。图像和个人资料都可以通过电子邮件的哈希来访问,它被认为是系统内识别身份的主要方式。为确保一致和准确的哈希值,应采取以下步骤来创建哈希:

  1. 从电子邮件地址中删除前导和尾随空格。
  2. 强制将所有字符转换为小写。
  3. 对最终字符串进行md5哈希处理。

以一个示例来说明,假设我们从 “MyEmailAddress@example.com “(注意尾随的空格,这是我们假设的用户误输入的)开始。如果直接对该字符串进行md5编码,我们会得到以下结果(在PHP中):

echo md5( "MyEmailAddress@example.com " );
// "f9879d71855b5ff21e4963273a886bfc"

现在,如果我们将相同的电子邮件地址通过上述过程运行,你会看到我们得到一个不同的结果(再次在PHP中):

$email = trim( "MyEmailAddress@example.com " ); // "MyEmailAddress@example.com"
$email = strtolower( $email ); // "myemailaddress@example.com"
echo md5( $email );
// "0bc83cb571cd1c50ba6f3e8a78ef1346"

这可以很容易地合并为一行:

echo md5( strtolower( trim( "MyEmailAddress@example.com " ) ) );

生成一致的哈希后,你可以请求图像或个人资料。

为 Drupal 集成

由于国内使用 Drupal 的用户不多,所以并未进行最新版的兼容测试,如果遇到代码异常请通过 Cravatar 支持论坛↗反馈。

您可以很方便的为 Drupal 集成 Cravatar 头像服务:

/**
 * Implements hook_avatar_default_list_alter().
 *
 * 替换 Drupal 的默认头像
 */
function cravatar_module_avatar_default_list_alter(&$defaults) {
  $defaults['gravatar_default'] = 'https://example.com/path/to/cravatar.jpg';
}

/**
 * Implements hook_user_avatar_url_alter().
 *
 * 替换 Gravatar 头像为 Cravatar 头像
 */
function cravatar_module_user_avatar_url_alter(&$url) {
  $sources = array(
    'www.gravatar.com',
    '0.gravatar.com',
    '1.gravatar.com',
    '2.gravatar.com',
    'secure.gravatar.com',
    'cn.gravatar.com',
    'gravatar.com',
  );
  $url = str_replace($sources, 'cn.cravatar.com', $url);
}

/**
 * Implements hook_user_profile_picture_alter().
 *
 * 替换个人资料中的头像上传地址
 */
function cravatar_module_user_profile_picture_alter(&$description) {
  $description = '<a href="https://cravatar.com" target="_blank">您可以在 Cravatar 修改您的资料图片</a>';
}

要使用您的自定义模块和相关的钩子函数,您需要按照以下步骤进行操作:

创建一个新的模块文件夹:在 Drupal 的 modules 目录下创建一个新的文件夹,用于存放您的模块文件。您可以将文件夹命名为 cravatar_module 或任何您喜欢的名称。

创建模块信息文件:在您的模块文件夹中创建一个名为 cravatar_module.info.yml 的文件,并添加以下内容:


name: 'Cravatar Module'
type: module
core_version_requirement: ^8 || ^9
package: Custom
version: 1.0
  1. 创建模块主文件:在您的模块文件夹中创建一个名为 cravatar_module.module 的文件,并将之前提供的钩子函数代码添加到该文件中。
  2. 启用模块:登录到 Drupal 管理后台,转到 “Extend”(扩展)页面,找到您的模块(”Cravatar Module”),然后启用它。

一旦您启用了模块,钩子函数将会生效。根据您的代码,以下是每个钩子函数的作用:

确保您的模块文件夹和文件名正确,并按照上述步骤启用模块后,您的自定义逻辑将生效,并应用于 Drupal 站点中的头像功能。

为 Joomla 集成

由于国内使用 joomla 的用户不多,所以并未进行最新版的兼容测试,如果遇到代码异常请通过 Cravatar 支持论坛↗反馈。

您可以很方便的为 Joomla 集成 Cravatar 头像服务:

defined('_JEXEC') or die;

// 替换 Gravatar 头像为 Cravatar 头像
function get_cravatar_url( $url ) {
    $sources = array(
        'www.gravatar.com',
        '0.gravatar.com',
        '1.gravatar.com',
        '2.gravatar.com',
        'secure.gravatar.com',
        'cn.gravatar.com',
        'gravatar.com',
    );
    return str_replace( $sources, 'cn.cravatar.com', $url );
}
JPluginHelper::importPlugin('user');
$dispatcher = JEventDispatcher::getInstance();
$dispatcher->register('onFetchUserAvatar', 'get_cravatar_url');

// 替换 Joomla 的默认头像
function set_defaults_for_cravatar( $avatar_defaults ) {
    $avatar_defaults['default'] = 'Cravatar 标志';
    return $avatar_defaults;
}
JPluginHelper::importPlugin('user');
$dispatcher = JEventDispatcher::getInstance();
$dispatcher->register('onFetchUserAvatarDefaults', 'set_defaults_for_cravatar');

// 替换个人资料中的头像上传地址
function set_user_profile_picture_for_cravatar() {
    return '<a href="https://cravatar.com" target="_blank">您可以在 Cravatar 修改您的资料图片</a>';
}
JPluginHelper::importPlugin('user');
$dispatcher = JEventDispatcher::getInstance();
$dispatcher->register('onUserProfilePictureDescription', 'set_user_profile_picture_for_cravatar');

Cravatar 官方 SDK(PHP 版本)

这是 WordPress 网站建设必备但是又是 WordPress 系统本身永远都不可能添加的功能,所以需要一个自定义的通用插件解决方案。

Cravatar 开发库,插件,手机应用程序等…

第三方链接、项目和插件,并非由 Cravatar 和文派开源开发、审查或支持。

以上库均为 Gravatar 库,您有需要可自行修改为 Cravatar 初认头像库。

为 Typecho 集成

将以下代码加到 Typecho 站点根目录的 config.inc.php 中即可:

集成代码

/**
 * 替换Gravatar头像为Cravatar头像
 *
 * Cravatar是Gravatar在中国的完美替代方案,您可以在https://cravatar.com更新您的头像
 */
define('__TYPECHO_GRAVATAR_PREFIX__', 'https://cn.cravatar.com/avatar/');

集成主题

如果您使用的 typecho 主题本身已支持 gravatar 头像显示,那么您可以在主题的源代码中搜索如下字段:

www.gravatar.com/avatars
cn.gravatar.com/avatars
gravatar.com/avatars

将其替换为

 cn.cravatar.com/avatars
 cn.cravatar.com/avatars

选其一均可,保存后即可替换完毕,正常使用。

Cravatar 官方 API 文档

基本概念

Cravatar 初认头像服务可以像普通的图片 URL 一样请求,具体格式是:

https://cn.cravatar.com/avatar/HASH
https://cn.cravatar.com/avatar/HASH

其中 HASH 部分是你的电子邮箱的哈希值,此电子邮箱必须在 Cravatar.com / cn.cravatar.com 上注册并绑定头像,否则会尝试返回 Gravatar 头像和 QQ 头像,如果都不存在,则返回默认头像。

电子邮箱的哈希方法

总体一共以下三步:

  1. 去除首尾两边的空格
  2. 所有字母转小写
  3. 计算 MD5 值

以下以 PHP 语言进行演示:

$email   = 'cravatar@feibisi.com';
$address = strtolower( trim( $email ) );
$hash    = md5( $address );

拼接图片请求 URL

依然以 PHP 语言进行演示:

$url = 'https://cn.cravatar.com/avatar/' . $hash;

指定图片格式

我们当前支持四种图片返回格式,分别是:jpg、jpeg、png、gif。

你可以简单的通过向图片访问 URL 拼接文件后缀的方式来访问特定格式的图片,完整的请求 URL 类似如下:

https://cn.cravatar.com/avatar/e1e7ba949ade0936e071132d2edd3b3c.png
https://cn.cravatar.com/avatar/e1e7ba949ade0936e071132d2edd3b3c.png

特别地:在浏览器明确表明支持 webp(Accept 中包含 image/webp)的情况下我们会强制返回 webp 格式,此时用户无法手工指定图片格式。之所以这样设计是因为 webp 已经可以完全取代其他格式,同时其提供了更小的体积,这给予了我们更快的加载速度。

额外的参数

调整头像大小

默认情况下,我们会返回 80×80 尺寸的头像,但是你可以通过 s 或 size 参数来指定要获取的头像大小,完整的 URL 类似如下:

https://cn.cravatar.com/avatar/e1e7ba949ade0936e071132d2edd3b3c?s=400
https://cn.cravatar.com/avatar/e1e7ba949ade0936e071132d2edd3b3c?s=400

以上 URL 将返回一个 400×400 的图像

默认头像

如果你的邮箱哈希无法匹配到任何头像,则返回我们的默认头像:

你可以通过 d 或 default 参数自己指定默认头像:

https://cn.cravatar.com/avatar/245467ef31b6f0addc72b039b922a4?d=https%3A%2F%2Fcravatar.com%2Fwp-content%2Fuploads%2Fsites%2F9%2F2021%2F07%2F4.png
https://cn.cravatar.com/avatar/245467ef31b6f0addc72b039b922a4?d=https%3A%2F%2Fcravatar.com%2Fwp-content%2Fuploads%2Fsites%2F9%2F2021%2F07%2F4.png

需要注意的是,传递的默认头像地址必须经过 URL 编码,在 PHP 中你可以这样写:

urlencode( 'https://cravatar.com/wp-content/uploads/sites/9/2021/07/4.png' );
urlencode( 'https://cravatar.com/wp-content/uploads/sites/9/2021/07/4.png' );

同时默认头像需要满足以下几个条件:

  1. 必须是公开可用的(例如,不能位于内部网、本地开发机器、或是存在防火墙等)。
  2. 必须可以通过标准端口 80 和 443 上的 HTTP 或 HTTPS 进行访问。
  3. 必须具有可识别的图像扩展名(jpg、jpeg、gif、png)
  4. 不得包含查询字符串(如果包含,它将被忽略)

除了允许你自己指定默认头像外,我们还准备了一组内置的默认头像,只需要传入 d=默认头像ID 即可调用:

强制加载默认头像

如果由于某种原因你想强制始终返回默认头像,您可以使用 f 或 forcedefault 参数并将其值设置为 y。

https://cn.cravatar.com/avatar/e1e7ba949ade0936e071132d2edd3b3c?f=y
https://cn.cravatar.com/avatar/e1e7ba949ade0936e071132d2edd3b3c?f=y

指定要显示的头像级别

该选项存在于 Gravatar 中,但 Cravatar 并不提供对该选项的支持。这同样是为了符合中国法律。

组合参数

以上所介绍的所有关于 Cravatar 的参数都可以自由组合,比如你可以提供这样的一个头像URL:

https://cn.cravatar.com/avatar/e1e7ba949ade0936e071132d2edd3b3c.png?s=200&d=retro&f=y
https://cn.cravatar.com/avatar/e1e7ba949ade0936e071132d2edd3b3c.png?s=200&d=retro&f=y

以上头像URL将始终返回格式为 png、尺寸为 200 的 8 位色像素人脸。

为 WordPress 集成

1、注意,以下主题因为使用自有的头像方案,完全屏蔽了 Gravatar,所以也不支持 Cravatar:

  • 7b2
  • 日主题
  • 子比主题

2、对于此类主题、插件仍需适配 Cravatar?请到支持论坛中开贴↗获取帮助。

3、如果您是普通用户不想要改代码,快速使用请安装文派头像(WPAvatar)↗插件。

集成代码

您可以很方便的为 WordPress 集成 Cravatar 头像服务,只需要将以下代码加入您的插件或主题的 functions.php 里即可:


if ( ! function_exists( 'get_cravatar_url' ) ) {
    /**
     * 替换 Gravatar 头像为 Cravatar 头像
     *
     * Cravatar 是 Gravatar 在中国的完美替代方案,您可以在 https://cravatar.com 更新您的头像
     */
    function get_cravatar_url( $url ) {
        $sources = array(
            'www.gravatar.com',
            '0.gravatar.com',
            '1.gravatar.com',
            '2.gravatar.com',
            'secure.gravatar.com',
            'cn.gravatar.com',
            'gravatar.com',
        );
        return str_replace( $sources, 'cn.cravatar.com', $url );
    }
    add_filter( 'um_user_avatar_url_filter', 'get_cravatar_url', 1 );
    add_filter( 'bp_gravatar_url', 'get_cravatar_url', 1 );
    add_filter( 'get_avatar_url', 'get_cravatar_url', 1 );
}
if ( ! function_exists( 'set_defaults_for_cravatar' ) ) {
    /**
     * 替换 WordPress 讨论设置中的默认头像
     */
    function set_defaults_for_cravatar( $avatar_defaults ) {
        $avatar_defaults['gravatar_default'] = 'Cravatar 标志';
        return $avatar_defaults;
    }
    add_filter( 'avatar_defaults', 'set_defaults_for_cravatar', 1 );
}
if ( ! function_exists( 'set_user_profile_picture_for_cravatar' ) ) {
    /**
     * 替换个人资料卡中的头像上传地址
     */
    function set_user_profile_picture_for_cravatar() {
        return '<a href="https://cravatar.com" target="_blank">您可以在 Cravatar 修改您的资料图片</a>';
    }
    add_filter( 'user_profile_picture_description', 'set_user_profile_picture_for_cravatar', 1 );
}

Cravatar 开发指南

Cravatar 完美兼容所有 Gravatar 头像 API 接口,同时如果你未在 Cravatar 设置头像,则会先尝试调用 Gravatar 上的头像数据,其后是 QQ 头像,最后会返回我们为你准备的一组默认头像。

特别地:我们会对所有头像进行人工审核(也包括来自 Gravatar 和 QQ 的头像),所有包含暴恐、色情、政治等违反中国法律的内容都会被屏蔽,并返回默认头像。

我们鼓励所有开发者集成此服务到自己的作品里,为此我们提供了一系列开发文档和 SDK:

为现有的 CMS 集成 Cravatar

为自有产品集成

可用插件目录

在 WordPress 网站中使用 Cravatar

https://wpavatar.com/

在 Flarum 论坛中使用 Cravatar

https://github.com/vlssu/flarum-cravatar

在 Discuz 论坛中使用 Cravatar

待添加…

在 Z-blog 程序中使用 Cravatar

下载 Z-blog_Cravatar_1.0.2_2023-05-07

在 DeDeCMS 中使用 Cravatar

待添加…

在 Emlog 中使用 Cravatar

待添加…