如何在 imagemagick 或其他工具上压缩 ico 文件

How to compress ico file on imagemagick or other

我在 photoshop 中创建了一个 32x32 png 导出为 500 字节。

使用

转换为 ico
magick convert .\favicon.png favicon.ico

变成了5kb
题? imagemagick 中是否有压缩标志或另一种压缩方式 favicon.ico?

我刚刚尝试了@dan-mašek 的建议,它肯定比 ImageMagick 更有效。

对于我正在使用的 PNG,ImageMagick 给了我一个 5.4K .ico 文件,尽管要求它使用 .ico 对嵌入式 PNG 的支持来进行压缩(显然它忽略了你对于 256x256 以下的尺寸),而 Pillow 将其降至 1.8K。

以下是我如何根据多年前编写的现有 PNG 优化 shell 脚本处理我的网站图标:

#!/bin/sh

optimize_png() {
    for X in "$@"; do
        echo "---- Using pngcrush to strip irrelevant chunks from $X ----"
        # Because I don't know if OptiPNG considers them all "metadata"
        pngcrush -ow -q -rem alla -rem cHRM -rem gAMA -rem iCCP -rem sRGB \
            -rem time "$X" | egrep -v '^[ \|]\|'
    done

    echo "---- Using OptiPNG to optimize delta filters ----"
    # ...and strip all "metadata"
    optipng -clobber -o7 -zm1-9 -strip all -- "$@" 2>&1 | grep -v "IDAT size ="

    echo "---- Using AdvanceCOMP to zopfli-optimize DEFLATE ----"
    advpng -z4 "$@"
}

optimize_png 16.png 32.png

python3 << EOF
from PIL import Image

i16 = Image.open('16.png')
i32 = Image.open('32.png')
i32.save('src/favicon.ico', sizes=[(16, 16), (32, 32)], append_images=[i16])
EOF

请注意:

  1. pngcrushadvpng 不将 -- 作为参数,因此您必须在可能以 - 开头的相对路径上添加 ./ 前缀.
  2. PIL 中的
  3. .save 必须在最大的图像上调用,因此,如果您有图像的动态列表,您可能需要这样的东西:
images.sort(key=lambda x: x.size)
images[-1].save('favicon.ico', sizes=[x.size for x in images], append_images=images)