shopblocks/php-ico

提供易于使用的功能来生成有效的ICO文件。改编自流行的PHP_ICO库。

v1.1.0 2016-02-26 11:20 UTC

This package is auto-updated.

Last update: 2024-09-10 05:41:05 UTC


README

PHP ICO提供了一个易于使用的PHP类,可以用于生成有效的ICO文件。请注意,这些文件不仅仅是扩展名为ico的BMP、GIF或PNG格式图像,此类生成的图像是完整的ICO格式图像文件。

该类使用GD库从源文件中读取图像,并使用纯PHP生成ICO文件格式。理论上,GD可以读取的任何图像格式都可以用作生成ICO文件的源图像。我已经使用JPEG、GIF和PNG图像测试了此库,效果很好。如果提供动画GIF,将使用第一帧生成ICO图像。

ICO格式详细信息

创建此类的首要目标是提供一个简单易用且可靠的方法来生成ICO文件,用于在网站中使用作为网站图标。这一目标推动了大部分开发,也是导致某些功能限制的原因。

ICO文件支持两种不同的编码实际图像数据的方式:Windows BMP格式和PNG格式。由于PNG格式是在Windows Vista中引入的,并且Windows的旧版本和新版本都支持BMP编码,因此使用了BMP编码方法。

图像使用每像素32位进行编码。这允许在结果图像中包含alpha通道信息。32位图像的支持是在Windows XP中添加的。这意味着旧版本的Windows可能无法正确显示ICO图像,甚至可能无法显示。生成的图像尚未在Windows XP之前的版本上进行测试。

用法

以下是一个使用PHP ICO库的非常基本的示例

require __DIR__ . '/vendor/autoload.php';
$source = __DIR__ . '/example.gif';
$destination = __DIR__ . '/example.ico';
$converter = new Ossobuffo\PhpIco\IcoConverter($source);
$converter->saveIco($destination);

它将名为example.gif的源文件转换为名为example.ico的输出ICO文件。example.ico将包含与源图像相同大小的单个图像。

ICO文件格式可以存储多个图像,每个图像大小不同。PHP ICO库通过以下示例展示了ICO格式的这一特性

require __DIR__ . '/vendor/autoload.php';
$source = __DIR__ . '/example.gif';
$destination = __DIR__ . '/example.ico';
$dimensions = [[16, 16], [24, 24], [32, 32], [64, 64]];
$converter = new Ossobuffo\PhpIco\IcoConverter($source, $dimensions);
$converter->saveIco($destination);

与上一个示例一样,此示例将example.gif源文件转换为example.ico。在此示例中,向构造函数传递了大小,导致example.ico文件包含四个图像:一个是16x16,另一个是24x24,再一个是32x32,最后一个是64x64。由于每个包含的图像都使用相同的源图像,每个包含的图像只是将源图像缩放到新尺寸。

对于ICO文件中包含的不同大小的不同源图像,可以创建更好的结果。例如,您可以使用高质量图像生成高分辨率图像,并为较小尺寸使用量身定制的较小图像。以下示例展示了如何使用PHP ICO库创建此类ICO文件

require __DIR__ . '/vendor/autoload.php';
$destination = __DIR__ . '/example.ico';
$converter = new Ossobuffo\PhpIco\IcoConverter();

$converter->addImage(__DIR__ . '/example-small.gif', [[16, 16], [24, 24], [32, 32]]);
$converter->addImage(__DIR__ . '/example-medium.gif', [[48, 48], [64, 64]]);
$converter->addImage(__DIR__ . '/example-large.gif', [[128, 128]]);

$converter->saveIco($destination);

本示例创建了一个名为 example.ico 的单个ICO文件,与之前的示例相同。不同之处在于,本示例使用了多个源图像来生成最终的ICO图像。最终的ICO图像包含总共六个图像:来自 example-small.gif 的 16x16、24x24 和 32x32 图像;来自 example-medium.gif 的 48x48 和 96x96 图像;以及来自 example-large.gif 的 128x128 图像。

通过使用此功能,为每个源图像提供特定的大小,您可以生成具有非常高质量图像的ICO文件,每个图像都对应于提供的分辨率。

我发现,16x16、24x24、32x32 和 48x48 的图像尺寸涵盖了浏览器和Windows尝试用于favicon图像的所有尺寸。不同尺寸来自使用favicon作为各种浏览器图标、书签以及各种其他地方。

感谢

我要感谢 iThemes 使这个项目成为可能。此代码最初是为了向 Builder主题 添加易于使用的favicon支持而开发的。我向iThemes的所有者兼我的老板 Cory 询问是否可以分享最终代码。他给了我绿灯。对每个人都是个胜利。 :)

感谢iThemes。感谢Cory。