騰訊提供公開頭像介面:
https://q1.qlogo.cn/g?b=qq&nk=QQ號&s=100
b=qq:業務類型(QQ)nk:QQ 號碼s:尺寸代碼(40/64/100/140/640 等)&t= 時間戳可防快取,確保更新即時生效。<img> 標籤(支援動圖)<?php
$qq = '123456789';
echo '<img src="https://q1.qlogo.cn/g?b=qq&nk=' . $qq . '&s=100&t=' . time() . '">';
?>
<?php
$qq = '552452006';
$src = 'https://q1.qlogo.cn/g?b=qq&nk=' . $qq . '&s=100&t=' . time();
header('Content-Type: image/png');
$img = imagecreatefromstring(file_get_contents($src));
imagepng($img);
imagedestroy($img);
?>
imagecreatefromstring 僅支援靜態圖,**動態 GIF 會轉為靜態第一幀**;佔用伺服器頻寬與 CPU。<?php
function getQQAvatar($qq, $size = 100) {
$cacheDir = __DIR__ . '/cache/avatar/';
$file = $cacheDir . $qq . '_' . $size . '.png';
if (file_exists($file) && (time() - filemtime($file) < 86400)) {
return $file; // 24 小時快取
}
$url = "https://q1.qlogo.cn/g?b=qq&nk={$qq}&s={$size}";
$data = @file_get_contents($url);
if ($data && strlen($data) > 100) { // 簡易有效性檢查
@file_put_contents($file, $data);
return $file;
}
return __DIR__ . '/assets/default_avatar.png'; // 預設頭像
}
// 使用
$avatarPath = getQQAvatar('123456789');
header('Content-Type: image/png');
readfile($avatarPath);
?>
| 場景 | 建議方法 |
|---|---|
| 部落格留言、論壇頭像 | 方法一(簡單、支援動圖) |
| 後台管理、需權限控管、高可用性 | 方法二 + 本地快取 |
| 大流量站點 | CDN 代理 + 非同步預熱快取 |