如何强制 imagemagick 将 PNG 存储在 ICO 中

How to force imagemagick to store PNG inside ICO

将 1.4k (96x96) png 转换为 ico 时,生成的文件为 37k。

$ magick convert jsiu.dev.black-96.png jsiu.dev.black-96.ico

$ ls -lh
-rw-r--r--  1 js  staff    37K Aug  9 22:19 jsiu.dev.black-96.ico
-rw-r--r--@ 1 js  staff   1.4K Aug  8 17:49 jsiu.dev.black-96.png

相比之下:3.8k (256x256) png 生成 5.1k ico 文件。

-rw-r--r--  1 js  staff   5.1K Aug  8 18:06 jsiu.dev.black-256.ico
-rw-r--r--@ 1 js  staff   3.8K Aug  8 18:05 jsiu.dev.black-256.png

不确定 1.3k 的开销是否过多,但至少不像 96x96 版本那样大小是 26.4 倍。

经过一些测试,如果图像小于 256x256,magick 似乎总是在 ICO 中使用 BMP。有没有办法强制 magick 将 PNG 存储在 ICO 中?

以下是 96x96 PNG:

以下为 256x256 PNG:

附加测试:

magick jsiu.dev.white-96.png -compress none jsiu.dev.white-96.ico
magick jsiu.dev.white-96.png -compress zip jsiu.dev.white-96.ico
magick jsiu.dev.white-96.png -strip jsiu.dev.white-96.ico
magick jsiu.dev.white-96.png -define png:color-type=6 jsiu.dev.white-96.ico

它们的尺寸都一样:

-rw-r--r--  1 js  staff  38078 Aug 12 04:52 jsiu.dev.white-96.ico

我没有收到任何积极的反馈,所以我最终使用 golang 创建了我自己的命令行工具。它使用 png 创建 ico 文件而不进行任何转换,

https://github.com/J-Siu/go-png2ico