如何从 .ico 文件中获取更大的图像?
How to get bigger image from .ico file?
我正在尝试使用 php 从网站下载并保存网站图标 (.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 上使用 Preview 清楚地看到它们,但在 php.
内看不到
有什么想法吗?
如何以编程方式访问其他图标大小?
您刚刚回答了自己的问题。当你使用 var_dump(getimagesize('favicon.ico'));
您可以获得图像的 "width="16" height="16""
信息。
如果您在某个目录中有这些 .ico
文件,请使用 php scandir
函数遍历每个图像,使用 getimagesize
函数获取图标尺寸。
经过多次我找到了你的答案;)
您可以使用此 class: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 单独将在输出中:
而且,这个 class 有一个很好的方法来获取单个图像中的所有图标。见:
<?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 格式的网站图标。它会为您调整大小,并为没有网站图标的网站创建唯一的默认图标。
此示例提取维基百科的 32 像素 PNG 图标:
http://api.grabicon.com/icon?domain=wikipedia.org&size=32
这也比自己检索图标快得多,因为它们是根据其他用户的请求缓存的。从头开始提取图标通常需要 4-6 秒才能跟随页面重定向、检查默认位置和元标记等。
完全公开,我是创作者,但我认为这是你需要的,而且是免费的。
https://github.com/lordelph/icofileloader 在 PHP 中比 Nabi 的回答PHP类 link 中提供更多 up-to-date 对处理 .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)。我想把这个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 上使用 Preview 清楚地看到它们,但在 php.
内看不到有什么想法吗?
如何以编程方式访问其他图标大小?
您刚刚回答了自己的问题。当你使用 var_dump(getimagesize('favicon.ico'));
您可以获得图像的 "width="16" height="16""
信息。
如果您在某个目录中有这些 .ico
文件,请使用 php scandir
函数遍历每个图像,使用 getimagesize
函数获取图标尺寸。
经过多次我找到了你的答案;)
您可以使用此 class: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 单独将在输出中:
而且,这个 class 有一个很好的方法来获取单个图像中的所有图标。见:
<?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 格式的网站图标。它会为您调整大小,并为没有网站图标的网站创建唯一的默认图标。
此示例提取维基百科的 32 像素 PNG 图标:
http://api.grabicon.com/icon?domain=wikipedia.org&size=32
这也比自己检索图标快得多,因为它们是根据其他用户的请求缓存的。从头开始提取图标通常需要 4-6 秒才能跟随页面重定向、检查默认位置和元标记等。
完全公开,我是创作者,但我认为这是你需要的,而且是免费的。
https://github.com/lordelph/icofileloader 在 PHP 中比 Nabi 的回答PHP类 link 中提供更多 up-to-date 对处理 .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);
}