如何在.ico文件中嵌入多个尺寸?


17

我见过.ico图标具有多种尺寸的不同图像,例如。16x16、32x32、48x48、128x128、256x256。在Windows上,给定每种尺寸的现有.ico文件,如何以这种方式创建支持多种尺寸的图标文件?请注意,我希望对200多个文件执行此操作,因此从cmd执行此操作将是理想选择。

Answers:


28

ImageMagick(Windows / Mac / Linux)包含一个称为的命令行工具convert,可用于许多用途,包括将多个图像打包在一个图标中:

convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico

上一个命令获取5个PNG图像,并将它们组合为单个.ico文件。

与其他答案不同,可以在批处理脚本中轻松使用此方法来自动生成多个图标文件。在我的一个项目中,我只有一个矢量图像(SVG),并使用Inkscape生成各种大小的png,然后convert创建一个图标容器。这是一个简化的示例(在bash脚本中):

#!/bin/bash
for size in 16 32 48 128 256; do
    inkscape -z -e $size.png -w $size -h $size icon.svg >/dev/null 2>/dev/null
done
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico

1
伙计,我觉得convert每次学习ImageMagick时,我都会学习一种新方法。感谢您的回答!
Suchipi

你如何做相反的事情?.ico根据包含的大小将转换成多个PNG?
Flimm 2014年

2
@Flimm 为框架中的每个图标convert favicon.ico favicon.png生成favicon-0.pngfavicon-1.png等等。如果您想知道图像的尺寸,请identify在png文件上使用命令。
罗布W

您可以使用自己的imagemagicks convert <icon.png> -resize 64x64代替inkscape
kumarharsh

我添加-dither None了convert命令,因为默认转换为256色为我的图标添加了一些噪音
James Roth

7

更好的ImageMagick命令:

convert in.jpg -define icon:auto-resize=16,48,256 -compress zip out.ico

1
实际上,这是一个很好的答案。使用此命令测试文件是否已实际转换:identify out.ico
kumarharsh

5

您可以在GIMP中免费进行此操作。有这样做的简要说明这里

去引用:

  1. 在Gimp中打开图像
  2. 使您的画布方形
  3. 将图层调整为图片大小
  4. 将图层缩放到.ico文件中的最大尺寸,例如64像素
  5. 复制图层
  6. 将重复图层缩放到下一个尺寸
  7. 继续复制/缩放.ico文件中所需的所有大小
  8. 另存为.ico

在您的情况下,您可以从最大的图像开始,然后按比例缩小每个重复的图像,也可以仅添加新图层,然后将所需的特定图标图像导入该图层。


您如何通过这种方法支持多种颜色深度?
2012年

不能说我必须亲自做,但是这篇文章说GIMP保存后应该为每个图层弹出一个颜色设置对话框。
techturtle 2012年

您必须选择在Gimp 2.8.16中导出,但是多年之后,我可以确定导出ico时会出现一个用于颜色设置的对话框。
Broots Waymb '16

1

这里的接受的答案罗布w ^,具有微不足道的适应,以避免不必键入尺寸(16,32等)不止一次:

#!/bin/bash
files=()
for size in 16 32 48 128 256; do
    inkscape -z -e "$size.png" -w "$size" -h "$size" logo.svg > /dev/null 2> /dev/null
    files+=("$size.png")
done
convert "${files[@]}" -colors 256 favicon.ico
unlink  "${files[@]}"

这里logo.svg表示输入(源)图像,从中我们创建期望的尺寸(较小的文件16.png32.png等),这是我们然后结合到输出(结果)图标文件,favicon.ico。您可以将第3行的尺寸列表更改为例如“ 16 24 32 48 64 72 72 128”,该convert命令将自动进行相应调整,因为此脚本使用了G-Man在其回答中描述的技术来构建一个文件名数组。最后,我们再次使用文件名数组取消链接(删除)在第4行中创建的PNG文件。


我注意到该命令:

convert logo.svg -define icon:auto-resize=16,48,256 -compress zip favicon.ico

(相当于user400747的答案中提出的一种)实际上缩放了位图图像(质量下降),并且图层背景失去了透明度。


1
(1)您实质上已经复制了别人的答案。如果您这样做了,仅此而已(是的,人们有时会这样做),我会标记您的答案为删除。我没有这样做,因为您做了一点改进。但是,每当您复制他人的作品时,都应通过姓名和链接到您引用的信息来确认原始作者。(2)请不要在未解释您的意思的情况下说“这更灵活”之类的话。…(续)
斯科特,

(续)…(3)除非有充分的理由不这么做,否则您应始终引用shell变量,并且您确定自己知道自己在做什么。实际上,在我见过的所有使用shell变量而不引用它们的脚本的示例中,您的脚本(例如Rob W的脚本)可能是最糟糕的示例。但是,还是最好引用这些变量。(4)为什么用unlink而不是更常见rm
斯科特,

1

Windows批处理文件,它将创建多个大小的.PNG并将它们合并为一个.ICO文件:

@echo off

set inkScape="C:\SOFTWARE\GRAPHIC\INKSCAPE\inkscape.exe"
set imageMagick="C:\SOFTWARE\DEVELOPER\IMAGEMAGICK\magick.exe"
set fileName=favicon
set importType=svg
set exportType=png
set exportDpi=300
set imageSizes=(16 24 32 48 57 60 64 70 72 76 96 114 120 128 144 150 152 180 192 196 256 300 320 400 450 460 480 512 600)

for %%s in %imageSizes% do (
 %inkScape% -z -f %~dp0%fileName%.%importType% -w %%s -h %%s -e %~dp0%fileName%-%%sx%%s.%exportType% -d %exportDpi%
 echo CREATED: %fileName%-%%sx%%s.%exportType%
 set e=%fileName%-%%sx%%s.%exportType%
 call :concat (e)
)

%imageMagick% %exportFileNames%"%~dp0%fileName%.ico"
echo MERGED IN: %fileName%.ico

pause goto :eof


:concat (e) (
 set exportFileNames=%exportFileNames%"%~dp0%e%" 
)

如果不需要.PNG文件,则可以通过删除(或删除)它们,del FILE或者将所有PNG保存在可以删除的目录中(之后%imageMagick% %exportFileNames%"%~dp0%fileName%.ico")。

希望它能帮助到别人。:)


0

我认为Axialis IconMaker是解决图标问题的最佳解决方案。有30天的试用期可能会为您解决问题。

我使用Axialis已经有很多年了,在许多项目中使用过,我可以证明它是一款非常有价值的产品。您不需要30天!哈!


0

您必须使用第三方图标编辑程序,因为MSPaint每个文件仅支持一个图标。有一对夫妇线程在这里与图标编辑器,一些免费的,一些商业建议。

确定图标编辑器后,添加图标格式的方法将有所不同,但通常是相似的(单击按钮或选择菜单项以添加新格式)。大多数程序允许您在添加图标格式/大小时导入图标文件,但是大多数程序也允许您通过调整现有大小来创建新的格式/大小。

如果您选择在添加新格式/大小时使用现有创建选项,请确保使用现有最大图标格式创建它们,因为它将为调整大小算法提供最多的数据。另外,在创建XP / Vista图标时,请确保使用透明的版本,因为大多数程序都不擅长从头开始创建Alpha通道。


我需要对200多个图标执行此操作。这些图标编辑器中的任何一个都可以批量运行吗?
Suchipi 2012年

1
我不记得曾经见过具有批处理模式的图标编辑器。您可以尝试在批处理模式下使用图像编辑器,但是我不确定是否有任何图像编辑器具有多格式图标支持(至少不是从命令行/批处理模式起)。如果有的话,那就是ImageMagick。另外,您应该将体积和批处理方式要求添加到问题中。
Synetech

0

您可以尝试Matthias Benkmann的png2ico。它是免费的,可以将多个大小的png打包到一个ico文件中。


但是,它有一些有趣的限制:Width must be multiple of 8 and <256. Height must be <256.
弗朗索瓦·博塔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.