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

问题描述

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

favicon

使用转换为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 不接受 -- 作为参数,因此您必须在可能以 ./ 开头的相对路径上添加 - 前缀。 必须在最大图像上调用 PIL 中的
  2. .save,因此,如果您有一个动态图像列表,您可能需要这样的内容:
images.sort(key=lambda x: x.size)
images[-1].save('favicon.ico',sizes=[x.size for x in images],append_images=images)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...