lordelph/icofileloader

高质量PHP包,用于读取和转换任何.ico图标文件,尤其是网站favicon

3.0.0 2022-08-19 19:02 UTC

This package is not auto-updated.

Last update: 2024-09-14 20:40:48 UTC


README

Software License Build Status Coverage Status Quality Score

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

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

安装

对于最近的PHP版本(8.*),IcoFileLoader可以通过Composer获取

composer require lordelph/icofileloader

PHP 5.6 - 7.x

从5.6开始的早期PHP版本可以使用IcoFileLoader的版本2

composer require lordelph/icofileloader:2.*

PHP 5.4 - 5.5

如果您需要使用php5.4或php5.5,您必须安装v1.*分支

composer require lordelph/icofileloader:1.*

用法

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文件并返回一个表示图标及其包含的图像的Icon实例。

您可以在图标中迭代图像,检查它们,并使用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);
}

内部结构

此服务由一个解析器和一个渲染器组成,您可以在运行时将其注入到服务中以覆盖它们。

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

测试

$ composer test

贡献

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

致谢

  • Paul Dixon - 2017年现代化/更新
  • Diogo Resende。这是从2005年原始库中派生出来的库的原始作者。

还要感谢PHP League的骨架项目,该项目从中派生了此项目的结构。

许可证

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

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