protonlabs/icofileloader

用于读取和转换任何.ico图标文件(特别是网站favicon)的高质量PHP包

v2.1.0 2022-08-15 08:58 UTC

This package is auto-updated.

Last update: 2024-09-15 13:33:18 UTC


README

Software License Build Status Coverage Status Quality Score

https://github.com/lordelph/icofileloader分支以使其与较新版本的PHP兼容

此包提供了一种在PHP应用程序中加载和转换.ico文件的方法。除了用于渲染的gd之外,没有其他依赖项。

该包具有单元测试,用于验证对1位、4位、8位、24位和32位.ico文件以及包含嵌入PNG文件的新版.ico文件的支持。

安装

IcoFileLoader可通过Composer获得

composer require lordelph/icofileloader

用法

IcoFileService类提供了一个一次性方法extractIcon。这对于只需要从一个.ico文件中获取一个图像的大多数用例来说应该很合适。

它返回一个图像资源,您可以使用GD函数进一步操作它,例如使用imagepng将其保存到文件中

例如,以下是如何从一个ico文件中提取32x32的透明图像的示例

$loader = new Elphin\IcoFileLoader\IcoFileService;
$im = $loader->extractIcon('/path/to/icon.ico', 32, 32);

//$im is a GD image resource, so we could, for example, save this as a PNG
imagepng($im, '/path/to/output.png');

使用背景颜色渲染

您可以选择不保留图标中的alpha通道,而是使用以下方式用背景颜色进行渲染 - 将所需颜色作为渲染器选项传递,如下所示

$im = $loader->extractIcon('/path/to/icon.ico', 32, 32, ['background'=>'#FFFFFF']);

提取任何尺寸的图标

extractIcon方法将尝试在图标中找到与您请求的尺寸完全匹配的图像,并在最高颜色深度下找到它。如果找不到,它将调整图标中最佳质量图像的大小。因此,您可以请求所需的任何尺寸...

$im = $loader->extractIcon('/path/to/icon.ico', 100, 100);

从URL提取图标

只要您已安装PHP fopen封装器,您就可以将URL传递给extractIcon

$im = $loader->extractIcon('https://assets-cdn.github.com/favicon.ico', 16, 16);

从二进制数据提取图标

如果您已经有一个作为二进制字符串存储的ico文件,extractIcon也可以很好地处理它

$data = file_get_contents('/path/to/icon.ico');
$im = $loader->extractIcon($data, 16, 16);

低级方法

如果您想做的不仅仅是从一个图标中提取单个图像,您可以使用IcoFileService的更低级方法来检查.ico文件并执行多次渲染。

fromFilefromStringfrom方法将解析一个ico文件,并返回一个表示图标及其包含的imagesIcon实例。

您可以对图标中的图像进行迭代,检查它们,并使用renderImage进行渲染

例如,以下是提取图标中的所有图像并将其保存为单独文件的示例。

$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", $image->getDescription(), $filename);
}

内部结构

服务由一个parser和一个renderer组成,您可以在运行时将其注入到服务中,如果您想覆盖它们的话。

当前的GdRenderer通过为基于BMP的图标图像绘制单个像素来工作。这不会非常快。PHP 7.2将支持BMP图像,当它发布时,我会添加一个利用这一功能的渲染器。

测试

$ composer test

贡献

请参阅CONTRIBUTING以获取详细信息。

鸣谢

  • Paul Dixon - 2017年现代化/更新
  • Diogo Resende。此库的原始作者,该库是在2005年由此库派生出来的。

还要感谢PHP League的skeleton项目,本项目结构从中派生而来。

许可

MIT许可(MIT)。请参阅许可文件以获取更多信息。

注意:这是基于2005年由Diogo Resende编写的某些类。虽然这些最初是在PHPClasses网站上以GPL许可提供的,但Diogo友好地同意允许它们以MIT许可许可。