我正在尝试使用php从网站下载并保存一个favicon(.ICO)。我想将此ico文件转换为png。
如果我理解正确,单个.ICO文件可以存储不同的图像分辨率,如16x16和32x32(google's favicon就是这个例子)。我的问题是,有没有办法选择转换哪个ico文件?
目前我可以下载文件
$image = file_get_contents('http://google.com/favicon.ico');
$saved_file = fopen("favicon.ico", "w");
fwrite($saved_file, $image);
fclose($saved_file);
此代码下载并保存名为favicon.ico
的文件。
然后当我运行这行代码时
var_dump(getimagesize('favicon.ico'));
我得到了这个输出
array(6) {
[0]=>
int(16)
[1]=>
int(16)
[2]=>
int(17)
[3]=>
string(22) "width="16" height="16""
["bits"]=>
int(32)
["mime"]=>
string(24) "image/vnd.microsoft.icon"
}
所以我的问题是,我如何以编程方式访问其他图标大小?我可以清楚地看到他们使用我的Mac上的预览,但不是在PHP内。
有什么想法吗?
答案 0 :(得分:2)
经过多次,我找到了答案;)
您可以使用此课程:http://www.phpclasses.org/package/2369-PHP-Extract-graphics-from-ico-files-into-PNG-images.html
示例代码:
<?php
include 'class.ico.php';
$ico = new Ico('http://google.com/favicon.ico');
$im = $ico->GetIcon(0); //For get first image
//$im = $ico->GetIcon(1); //For get second image
//$TotalIcons = $ico->TotalIcons(); //for get total numbers of images in icon
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
输出:
对于第一张图像16x16,将分别输出:
对于第二个图像32x32,将分别输出:
而且,这个类有一个很好的方法来获取单个图像中的所有图标。见:
<?php
include 'class.icothumb.php';
$ico = new IcoThumb('http://google.com/favicon.ico');
$ico->max_size = 128;
$ico->use_diferent_depths = false;
$ico->GetThumb(4);
?>
单幅图像输出完美:
答案 1 :(得分:0)
您可以使用免费的grabicon.com服务以您请求的大小检索png格式的favicons。它会为您调整大小,并为没有favicon的网站创建唯一的默认图标。
此示例提取维基百科的32像素PNG图标:
http://api.grabicon.com/icon?domain=wikipedia.org&size=32
这比自己检索图标要快得多,因为它们是从其他用户的请求缓存的。从头开始拉图标通常需要4-6秒来跟踪页面重定向,检查默认位置和元标记等。
完全披露,我是创作者,但我认为这是你需要的,而且它是免费的。
答案 2 :(得分:0)
https://github.com/lordelph/icofileloader为PHP中处理.ico文件提供了比Nabi答案中PHPclasses链接更多的最新支持
这是一个提取图标中所有图像的示例:
php bin/console cache:clear --env=prod --no-debug
答案 3 :(得分:-1)
如何以编程方式访问其他图标大小?
你回答了自己的问题。当你使用var_dump(getimagesize('favicon.ico'));
时
您可以获得图像的"width="16" height="16""
信息。
如果您在某个目录中有这些.ico
个文件,请使用使用scandir
函数的php getimagesize
函数浏览每个图像以获取图标大小。