signpostmarv / php-ico
一个易于使用的库,用于生成有效的ICO文件。
Requires
- php: >=5.2.4
- ext-gd: *
This package is auto-updated.
Last update: 2024-09-24 05:56:12 UTC
README
PHP ICO提供了一个易于使用的PHP类,用于生成有效的ICO文件。请注意,这些文件不仅仅是具有.ico扩展名的BMP、GIF或PNG格式的图片,该类生成的图片是完全有效的ICO格式图片文件。
该类使用GD库从源文件中读取图片,并使用纯PHP生成ICO文件格式。理论上,GD可以读取的任何图像格式都可以用作生成ICO文件的源图像。我使用JPEG、GIF和PNG图像测试了此库,结果非常好。如果提供动画GIF,则将使用第一帧来生成ICO图像。
PHP ICO库通过Composer在Packagist上提供,地址为chrisjean/php-ico
。
ICO格式详细信息
创建此类的首要目标是提供一个简单易用且可靠的方法来生成ICO文件,用于在网站中使用网站图标。这一目标推动了大部分开发,也是结果功能中一些限制的原因。
ICO文件支持两种不同的编码实际图像数据的方式:Windows BMP格式和PNG格式。由于Windows Vista引入了对PNG格式的支持,并且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。