#ico #favicon #web

应用 icopng

将 PNG 直接嵌入 ICO 文件

1 个稳定版本

1.0.1 2023年4月26日

#538 in 图像

Unlicense

7KB
76 代码行

icopng | 测试

icopng 将 PNG 存储在 ICO 中,而不转换为带有 alpha 通道的传统位图。由于 PNG 可以压缩并且有工具可以高度优化它们,这可以节省很多空间。嵌入 PNG 数据到 favicon.ico 文件也得到了浏览器的良好支持。

与使用 GIMP、ImageMagick 或 ICOEncoder 相比,由于避免了重新编码,使用优化后的输入 PNG,结果文件可以小一个数量级。例如,对于这个输入图像,icopng 的输出比 GIMP 重新编码的 PNG 小约 30%,比传统的带有 alpha 通道的位图小约 900%。

引擎 嵌入式格式 大小
icopng PNG 1.2KiB
GIMP PNG 1.7KiB
ImageMagick/GIMP BMP 17KiB

用法

以下是将传统位图 ICO 文件转换为 PNG,然后使用此工具将其转换为嵌入 ICO 文件的 PNG 的示例。

# `convert' is from ImageMagick
convert favicon-old.ico favicon.png

# Optional: Shrink the png further
pngquant --skip-if-larger --strip -f --ext .png favicon.png
optipng favicon.png

# Embed into new favicon.ico
icopng favicon.png favicon.ico

为什么不直接使用...?

image::ico::ICOEncoder,或 ico crate

image 和 ico crate 确实 会将 PNG 导出为 ICO 文件(很好!),但它们会重新编码它们,从而失去了 optipng/pngquant 等东西的所有好处。

ImageMagick

像 imagemagick 这样的工具可以从 PNG 转换为 ico,但它们会将它转换为带有 alpha 通道的位图,而不是仅仅将 PNG 放入 ico 容器中,这意味着文件非常大。

GIMP

GIMP 也可以通过将 ICO 作为 ICO 导出并选择“压缩(PNG)”来导出为 ICO 中的 PNG,但这样就无法获得 pngquant/optipng 的好处。

依赖关系

~1.5MB
~24K SLoC