您好,欢迎来到95分类目录!站长微信:vip3632094
当前位置:95分类目录 » 站长资讯 » 35dir专区 » 文章详细 订阅RssFeed

增加95分类目录后台网站截图获取目标站logo本地化(没有logo获取ico)

来源:本站原创 浏览:309次 时间:2025-06-01
简介:增加95分类目录后台网站截图获取目标站logo本地化(没有logo获取ico)



找到/themes/system/website.html



添加获取logo按钮








网站截图:





改为





网站截图:



<输入名称=“web_pic” type=“text” class=“ipt” id=“web_pic” size=“50” maxlength=“100” value=“{#$row.web_pic#}” />













接着找到/system



新建文件get_logo.php



将下面代码加入里面



<?php

// 设置响应头

header('Content-Type: application/json');

接收URL参数

$url = isset($_POST['url']) ?trim($_POST['url']) : '';

if (empty($url)) {

echo json_encode(['status' => 'error', 'message' => '网站URL不能为空']);





// 确保URL格式正确

if (!preg_match('/^(https?://)/', $url)) {

$url = 'http://' . $url;

}

try {

// 创建保存目录

$upload_dir = 'uploads/logos/';

if (!file_exists($upload_dir)) {

mkdir($upload_dir, 0777, true);

}

生成唯一文件名(使用域名作为基础)

$domain = parse_url($url, PHP_URL_HOST);

$filename = preg_replace('/[^a-zA-Z0-9]/', '_', $domain) .'_' .时间();

// 设置HTTP请求上下文

$context = stream_context_create([

'http' => [

'timeout' => 10,

'user_agent' => 'Mozilla/5.0 (Windows NT 10.0;Win64 的;x64) AppleWebKit/537.36(KHTML,如 Gecko) Chrome/91.0.4472.124 Safari/537.36'

]

]);

获取网站HTML内容

$html = @file_get_contents($url, false, $context);

if ($html === false) {

echo json_encode(['status' => 'error', 'message' => '无法访问网站']);





存储可能的徽标 URL

$logo_candidates = [];



1.首先尝试查找SVG格式的logo (最高优先级)

$svg_patterns = [

// SVG图片标签

'/]+src=[“']([^”']*(?::) logo|brand)[^“']*.svg)[”'][^>]*>/i',

// SVG内联对象

'/]+data=[“']([^”']*(?:logo|brand)[^“']*.svg)[”'][^>]*>/i',

// 具有logo或brand类的SVG图像

'/]+class=[“'][^”']*(?:logo|brand)[^“']*[^>]+src=[”']([^“']+.svg)[”'][^>]*>/i',

//常见SVG logo路径

'/]+rel=[“'](?:icon|shortcut icon)[”'][^>]+href=[“']([^”']+.svg)[“'][^>]*>/i'

];



foreach ($svg_patterns as $pattern) {

if (preg_match_all($pattern, $html, $matches)) {

$logo_candidates = array_merge($logo_candidates, $matches[1]);

}

}



// 添加常见SVG logo路径

$common_svg_paths = [

'/logo.svg',

'/images/logo.svg',

'/img/logo.svg',

'/assets/logo.svg',

'/assets/images/logo.svg',

'/static/logo.svg',

'/static/images/logo.svg',

'/icons/logo.svg',

'/brand/logo.svg'

];



foreach ($common_svg_paths as $path) {

$logo_candidates[] = rtrim($url, '/') . $path;

}



//阿拉伯数字。尝试查找og:image元标签(通常是较大的品牌图像)

if (preg_match('/]+property=[“']og:image[”'][^>]+content=[“']([^”']+)[“'][^>]*>/i', $html, $matches)) {

$logo_candidates[] = $matches[1];

}



3.查找带有logo关键词的图片

$pattern = '/]+src=[“']([^”']*(?:logo|brand)[^“']*.(?:p ng|jpg|jpeg|gif))[”'][^>]*>/i';

if (preg_match_all($pattern, $html, $matches)) {

$logo_candidates = array_merge($logo_candidates, $matches[1]);

}



4.查找通用的 logo类名

$pattern = '/]+class=[“'][^”']*(?:logo|brand)[^“']*[”'][^>]+src=[“']([^”']+)[“'][^>]*>/i';

if (preg_match_all($pattern, $html, $matches)) {

$logo_candidates = array_merge($logo_candidates, $matches[1]);

}



5.尝试常见的logo路径

$common_paths = [

'/logo.png',

'/images/logo.png',

'/img/logo.png',

'/assets/logo.png',

'/assets/images/logo.png',

'/static/logo.png',

'/static/images/logo.png',

];



foreach ($common_paths as $path) {

$logo_candidates[] = rtrim($url, '/') . $path;

}



6.查找apple-touch-icon(通常比favicon大)

$pattern = '/]+rel=[“']apple-touch-icon[”'][^>]+href=[“']([^”']+)[“'][^>]*>/i';

if (preg_match($pattern, $html, $matches)) {

$logo_candidates[] = $matches[1];

}



7.最后才查找常规favicon链接

$pattern = '/]+rel=[“'](?:shortcut icon|icon)[”'][^>]+href=[“']([^”']+)[“'][^>]*>/i';

if (preg_match($pattern, $html, $matches)) {

$logo_candidates[] = $matches[1];

}



8.标准favicon.ico位置作为最后选择

$logo_candidates[] = rtrim($url, '/') 。'/favicon.ico';

去重

$logo_candidates = array_unique($logo_candidates);



尝试下载每个候选logo

$logo_found = false;

$logo_info = 空;

$logo_content = 空;

$logo_extension = 空;



foreach ($logo_candidates as $logo_url) {

// 处理相对URL

if (!preg_match('/^(https?://)/', $logo_url)) {

if (substr($logo_url, 0, 1) === '/') {

$parsed_url = parse_url($url);

$logo_url = $parsed_url['scheme'] .'://' .$parsed_url['host'] .$logo_url;

} else {

$logo_url = rtrim($url, '/') .'/' .$logo_url;

}

}



// 尝试获取图片内容

$logo_content = @file_get_contents($logo_url, false, $context);

if ($logo_content !== false) {

// 检查是否是SVG

$is_svg = false;

if (stripos($logo_url, '.svg') !== false ||

strpos($logo_content, '
strpos($logo_content, '<?xml') !== false) {

// 验证SVG内容

if (strpos($logo_content, '
$is_svg = true;

$logo_extension = 'svg';

// SVG尺寸通常在SVG标签中定义

$svg_width = $svg_height = 0;

if (preg_match('/]+width=[“'](.*?)[“']/', $logo_content, $width_match)) { $svg_width = preg_replace('/[^0-9.]/', '', $width_match[1]);}

if (preg_match('/]+height=[“'](.*?)[“']/', $logo_content, $height_match)) {

$svg_height = preg_replace('/[^0-9.]/', '', $height_match[1]);

}

// 如果没有明确尺寸,设为默认值

if (empty($svg_width) || empty($svg_height)) {

// 提取viewBox信息

if (preg_match('/]+viewBox=[“'](.*?)[“']/', $logo_content, $viewbox_match)) {

$viewbox = explode(' ', trim($viewbox_match[1]));if (count($viewbox) == 4) {

$svg_width = $viewbox[2];

$svg_height = $viewbox[3];

}

}

// 如果仍然没有尺寸,设置默认值

if (empty($svg_width) || empty($svg_height)) {

$svg_width = 100;

$svg_height = 100;

}

}

$logo_found = 真;

$logo_info = [ 'width' => $svg_width,

'height' => $svg_height, 'mime' => 'image/svg+xml',

'url' => $logo_url,

'is_svg' => true

];

破;SVG是最优选择,直接结束搜索

}

} // 如果不是SVG,检查其他图片类型

if (!$is_svg) {

$temp_file = tempnam(sys_get_temp_dir(), 'logo');

file_put_contents($temp_file, $logo_content);

$img_info = @getimagesize($temp_file);

unlink($temp_file);



if ($img_info !== false) { // 设置文件扩展名

$mime_to_ext = [

'image/jpeg' => 'jpg',

'image/png' => 'png', 'image/gif' => 'gif',

'image/x-icon' => 'ico',

'image/vnd.microsoft.icon' => 'ico'

];

$logo_extension = isset($mime_to_ext[$img_info['mime']])

? $mime_to_ext[$img_info['mime']] : 'png';

// 优先选择大于48x48的非ico图片

if ($logo_extension != 'ico' && $img_info[0] >= 48 && $img_info[1] >= 48) {

$logo_found = true;

$logo_info = [

'width' => $img_info[0],

'height' => $img_info[1], 'mime' => $img_info['mime'],

'url' => $logo_url,

'is_svg' => false

]; break; // 找到合适的大图,停止搜索 }

// 如果还没有找到任何图片,先记住这个 if (!$logo_found) { $logo_found = true;

$logo_info = [

'width' => $img_info[0],

'height' => $img_info[1],

'mime' => $img_info['mime'],

'url' => $logo_url,

'is_svg' => false

];

不中断循环,继续寻找更好的选项

}

}

}

}





} if (!$logo_found || !$logo_content) {

echo json_encode(['status' => 'error', 'message' => '无法获取网站LOGO']);







保存图片到本地

$save_path = $upload_dir .$filename .'.' .$logo_扩展;

if (file_put_contents($save_path, $logo_content)) {

// 构建响应信息

$response = [

'status' => 'success',

'logo_path' => $save_path,

'width' => $logo_info['width'],

'height' => $logo_info['height'],

'is_svg' => $logo_info['is_svg'],

'source_url' => $logo_info['url']

];



} SVG标记

if ($logo_info['is_svg']) {

$response['format'] = 'SVG矢量图';





回声 json_encode($response);

} else {

echo json_encode(['status' => 'error', 'message' => '无法保存LOGO到服务器']);



} catch (异常 $e) {

echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);

}

?>



注意:如没有自己创建/system/uploads/logos目录请手动添加,权限775


© 版权声明

💬 文章评论

正在加载评论统计...

发表评论

0/1000字符
正在加载评论...
🆕最新收录 📚数据归档 🔥TOP排行 🚫黑名单 不通过 📊数据公示 🗺️站点地图

95分类目录 - 专业的网站分类目录平台,精心收录 网站目录VIP优质网站站长资讯

关键词:网站目录 · 网站收录 · 分类目录 · 网站推荐 · 优质网站 · 免费收录

Monitor your Domain Rating with FrogDR
Copyright © 2026 95dir.com All Rights Reserved · 鄂ICP备2024062716号-1 · Processed in 0.030249 second(s), 27 Queries, Gzip Enabled
当前在线 ...| 总访客 ...| 🐧交流群
百度统计