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

Php 如何从.ico文件中获取更大的图像?,php,favicon,ico,Php,Favicon,Ico,我正在尝试使用php从网站下载并保存一个favicon(.ICO)。我想将此ico文件转换为png 如果我理解正确,单个.ICO文件可以存储不同的图像分辨率,如16x16和32x32(就是一个例子)。我的问题是,有没有办法选择要转换的ico文件 目前我可以下载该文件 $image = file_get_contents('http://google.com/favicon.ico'); $saved_file = fopen("favicon.ico", "w"); fwrite($saved_

我正在尝试使用php从网站下载并保存一个favicon(.ICO)。我想将此ico文件转换为png

如果我理解正确,单个.ICO文件可以存储不同的图像分辨率,如16x16和32x32(就是一个例子)。我的问题是,有没有办法选择要转换的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中看不到


有什么想法吗?

我如何以编程方式访问其他图标尺寸

你刚才回答了你自己的问题。当您使用
var_dump(getimagesize('favicon.ico'))时
您可以获取图像的信息


如果在某个目录中有这些
.ico
文件,请使用php
scandir
函数查看每个图像,该函数使用
getimagesize
函数获取图标大小

我多次找到你的答案;)
您可以使用该类:

示例代码:

<?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);
?>

输出完美如单个图像:

您可以使用免费的grabicon.com服务检索所需大小的png格式的图标。它为您处理大小调整,并为没有favicon的站点创建唯一的默认图标

此示例使用Wikipedia的32像素PNG favicon:

http://api.grabicon.com/icon?domain=wikipedia.org&size=32
这也比自己检索图标快得多,因为它们是从其他用户的请求中缓存的。从零开始拖动图标通常需要4-6秒来跟踪页面重定向、检查默认位置和元标记等

完全公开,我是创建者,但我认为这是您需要的,而且是免费的。

提供了比Nabi答案中的PHPclasses链接更多的最新支持来处理PHP中的.ico文件

以下示例将提取图标中的所有图像:

$icon = $loader->fromFile('/path/to/icon.ico');
foreach ($icon as $idx=>$image) {
     $im=$loader->renderImage($image);

     $filename=sprintf('img%d-%dx%d.png', $idx, $image->width, $image->height);
     imagepng($im, $filename);

     printf("rendered %s as %s\n", $icon->getDescription(), $filename);
}

php没有原生的.ico支持。您要么从头开始编写解析器,要么使用外部库/工具来完成。事实上,php无论如何都没有本机映像支持。还有imagick和gd,它们都是外部lib,恰好有php绑定。为什么不使用字体图标为什么不使用最佳答案标志?不,我认为方法是如何访问单个
.ico
文件中的不同图像。(我们知道.ico文件是一个多图像文件)Grabicon.com现在收费。