chrisjean / php-ico
一个易于使用的库,用于生成有效的 ICO 文件。
Requires
- php: >=5.2.4
- ext-gd: *
This package is not auto-updated.
Last update: 2024-09-14 19:09:25 UTC
README
PHP ICO 提供了一个易于使用的 PHP 类,用于生成有效的 ICO 文件。请注意,这些不仅仅是 BMP、GIF 或 PNG 格式的图像,扩展名为 ico,由该类生成的图像是完整的 ICO 格式图像文件。
该类使用 GD 库从源文件读取图像,并使用纯 PHP 生成 ICO 文件格式。理论上,GD 可以读取的任何图像格式都可以用作生成 ICO 文件的源图像。我用 JPEG、GIF 和 PNG 图像测试了此库,效果很好。如果提供了动画 GIF,则将使用第一帧来生成 ICO 图像。
PHP ICO 库通过 Packagist 在 Composer 中提供,地址为 chrisjean/php-ico
。
ICO 格式详情
创建此类的首要目标是拥有一个简单易用且可靠的方法来生成用于网站 网站小图标 的 ICO 文件。这个目标推动了大部分开发,也是导致结果功能有限制的原因之一。
ICO 文件支持两种不同的编码实际图像数据的方式:Windows BMP 格式和 PNG 格式。由于 PNG 格式是在 Windows Vista 中引入的,而 Windows 的旧版和新版都支持 BMP 编码,因此使用了 BMP 编码方法。
图像使用每像素 32 位进行编码。这允许在生成的图像中包含 alpha 通道信息。32 位图像的支持是在 Windows XP 中添加的。这意味着旧版本的 Windows 很可能无法正确显示 ICO 图像,甚至可能无法显示。生成的图像尚未在 XP 之前的 Windows 版本上进行测试。
用法
以下是一个使用 PHP ICO 库的非常基本的示例
require( dirname( __FILE__ ) . '/class-php-ico.php' ); $source = dirname( __FILE__ ) . '/example.gif'; $destination = dirname( __FILE__ ) . '/example.ico'; $ico_lib = new PHP_ICO( $source ); $ico_lib->save_ico( $destination );
它接受一个名为 example.gif
的源文件,并生成一个名为 example.ico
的输出 ICO 文件。example.ico
将包含与源图像相同大小的单个图像。
ICO 文件格式能够容纳多个图像,每个图像的大小不同。PHP ICO 库通过以下示例展示了 ICO 格式的这一功能
require( dirname( __FILE__ ) . '/class-php-ico.php' ); $source = dirname( __FILE__ ) . '/example.gif'; $destination = dirname( __FILE__ ) . '/example.ico'; $ico_lib = new PHP_ICO( $source, array( array( 32, 32 ), array( 64, 64 ) ) ); $ico_lib->save_ico( $destination );
与上一个示例一样,此示例从 example.gif
源文件生成 example.ico
。在此示例中,向构造函数传递了大小,结果 example.ico
文件包含两个图像:一个 32x32,一个 64x64。由于每个包含的图像都使用相同的源图像,因此每个包含的图像只是将源图像缩放到新的尺寸。
对于 ICO 文件内不同大小的不同源图像,可以创建更好的结果。例如,可以使用高质量图像生成高分辨率图像,并为较小的尺寸使用特定尺寸的较小图像。以下示例展示了如何使用 PHP ICO 库创建此类 ICO 文件
require( dirname( __FILE__ ) . '/class-php-ico.php' ); $destination = dirname( __FILE__ ) . '/example.ico'; $ico_lib = new PHP_ICO(); $ico_lib->add_image( dirname( __FILE__ ) . '/example-small.gif', array( array( 16, 16 ), array( 24, 24 ), array( 32, 32 ) ) ); $ico_lib->add_image( dirname( __FILE__ ) . '/example-medium.gif', array( array( 48, 48 ), array( 96, 96 ) ) ); $ico_lib->add_image( dirname( __FILE__ ) . '/example-large.gif', array( array( 128, 128 ) ) ); $ico_lib->save_ico( $destination );
此示例创建了一个名为 example.ico
的单个 ICO 文件,就像之前的示例一样。不同之处在于,此示例使用了多个源图像来生成最终的 ICO 图像。最终的 ICO 图像包含总共六张图像:来自 example-small.gif
的 16x16、24x24 和 32x32 图像;来自 example-medium.gif
的 48x48 和 96x96 图像;以及来自 example-large.gif
的 128x128 图像。
通过使用此功能,为每个源图像提供特定的大小,您可以生成具有每个提供分辨率的非常高质量的 ICO 文件。
由于 PHP ICO 库是为了生成 favicon 文件而创建的,以下示例展示了如何从一个源图像生成所有所需尺寸的 favicon ICO 文件
require( dirname( __FILE__ ) . '/class-php-ico.php' ); $source = dirname( __FILE__ ) . '/example.gif'; $destination = dirname( __FILE__ ) . '/example.ico'; $sizes = array( array( 16, 16 ), array( 24, 24 ), array( 32, 32 ), array( 48, 48 ), ); $ico_lib = new PHP_ICO( $source, $sizes ); $ico_lib->save_ico( $destination );
我发现 16x16、24x24、32x32 和 48x48 的图像大小涵盖了浏览器和 Windows 尝试用于 favicon 图像的所有大小。不同的大小来自使用 favicon 作为各种浏览器图标、书签以及其他地方。
感谢
我想感谢 iThemes 使这个项目成为可能。此代码最初是为了向 Builder 主题 添加易于使用的 favicon 支持。我询问了我的老板和 iThemes 的所有者 Cory,是否可以分享最终的代码。他给了我绿灯。对每个人都是双赢。 :)
感谢 iThemes。感谢 Cory。