问题描述
我在photoshop中创建了一个32x32 png,导出为500bytes。
使用转换为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
请注意:
-
pngcrush
和advpng
不接受--
作为参数,因此您必须在可能以./
开头的相对路径上添加-
前缀。 必须在最大图像上调用 PIL 中的 -
.save
,因此,如果您有一个动态图像列表,您可能需要这样的内容:
images.sort(key=lambda x: x.size)
images[-1].save('favicon.ico',sizes=[x.size for x in images],append_images=images)