如何从.ico文件中获取更大的图像?

时间:2015-01-06 20:24:24

标签: php favicon ico

我正在尝试使用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内。

有什么想法吗?

4 个答案:

答案 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,将分别输出:png-16x16
对于第二个图像32x32,将分别输出:png-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);
?>

单幅图像输出完美:
all icon as single image

答案 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函数浏览每个图像以获取图标大小。