protonlabs / icofileloader
用于读取和转换任何.ico图标文件(特别是网站favicon)的高质量PHP包
Requires
- php: >=8.0
- ext-gd: *
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-15 13:33:18 UTC
README
从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文件并执行多次渲染。
fromFile
、fromString
和from
方法将解析一个ico文件,并返回一个表示图标及其包含的images的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); }
内部结构
服务由一个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许可许可。