lordelph / icofileloader
高质量PHP包,用于读取和转换任何.ico图标文件,尤其是网站favicon
Requires
- php: >=8.0.0
- ext-gd: *
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-14 20:40:48 UTC
README
此包为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文件并执行多次渲染。
fromFile
、fromString
和from
方法将解析.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许可证授权。