如何将方形SVG转换为全尺寸ICO?


24

我已在InkScape中绘制了一个图标,并希望将其导出到ICO文件,该文件将包含所有合理分辨率(16x16、32x32,... 256x256等)的子画面。如何做到这一点(无需使用庞大而昂贵的软件,如Photoshop,CorelDraw等)?


2
快速搜索告诉我,甚至无法从InkScape中导出单个ICO,但是对于如何使用其他免费软件(例如GIMP)实现此目的,有很多建议。您检查了这些选项吗?如果他们没有为您工作,您能说为什么不吗?
usr2564301 2016年

@RadLexus我尝试的是许多在线工具,据我所知,所有这些工具都意味着创建单一大小的ICOn。
伊万

5
因此,您想知道如何创建多种尺寸的ICO吗?尝试以下Stack Overflow答案中的选项:stackoverflow.com/questions/4354617/…(同样,通过一个简单的Google查询找到...)。
usr2564301 2016年

1
有一个Inkscape扩展名,它似乎可以导出为ico文件,但是我现在没有时间尝试它是否有效。
Paolo Gibellini 2016年

如果您发现以下任何一项可以回答您的问题,请将其标记为已接受的答案。
DᴀʀᴛʜVᴀᴅᴇʀ

Answers:


24

您可以立即使用ImageMagick

convert -density 384 icon.svg -define icon:auto-resize icon.ico

3
为什么这么密度?
naught101 '18

1
我不知道,我只是从其他地方复制粘贴了此内容。
heltonbiker

@ naught101是密度标志的文档-尽管,这似乎是一个相当不必要的步骤,除非您要对图像尺寸,dpi及其中间图像光栅化做一些非常具体的事情。imagemagick.org/script/command-line-options.php#density
CreationTribe

7
使用convert -background none icon.svg -define icon:auto-resize icon.ico保持透明背景。
罗伯特·休姆

2
magick convert -background none icon.svg -define icon:auto-resize icon.ico为我工作。
进入intotecho

15

命令行解决方案:

1)使用InkScape将SVG导出为PNG

2)使用ImageMagick将此PNG图像调整为所需大小:

magick convert master.png -resize 16x16 16.png
magick convert master.png -resize 32x32 32.png
magick convert master.png -resize 48x48 48.png

3)将PNG图像转换为ICO:

magick convert 16.png 32.png 48.png icon.ico

4)确保您的ICO包含所有内容:

identify icon.ico
icon.ico[1] ICO 16x16 16x16+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 32x32 32x32+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 48x48 48x48+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000

您也可以使用简单的批处理或Shell文件来简化工作。
保罗·吉贝里尼

3
直接从SVG导出许多png大小而不是调整已经光栅化的PNG的大小会更好(即使稍微复杂一点)吗?
heltonbiker

1
以防万一其他人感到好奇,“ ...”不是字面意思。它表示要加载到favicon.ico文件中的其他png文件大小。
Nostalg.io 18/09/14

@ Nostalg.io很好,谢谢!我编辑了答案。
philippe_b

5

Bash版本...

#!/bin/bash

set -ex

svg=$1

size=(16 32 24 48 72 96 144 152 192 196)

echo Making bitmaps from your svg...

for i in ${size[@]}; do
  inkscape $svg --export-png="favicon-$i.png" -w$i -h$i --without-gui
done

echo Compressing...

## Replace with your favorite (e.g. pngquant)
# optipng -o7 favicon-*.png
pngquant -f --ext .png favicon-*.png --posterize 4 --speed 1

echo Converting to favicon.ico...

convert $(ls -v favicon-*.png) favicon.ico

## Clean-up maybe?
# rm favicon-*.png

echo Done

用法: ./favicon.sh your-square-svg-file.svg

需要:来自软件包管理器的inkscape imagemagick optipng(可选)。

我发现为bash shell重新创建它更容易,因为Win10和Inkscape并不相处。这已经在Windows Subsystem for Linux上进行了测试,但也可以在Mac上运行。

使用此参考来选择我关心的尺寸:https : //github.com/audreyr/favicon-cheat-sheetsize根据您的特定需求调整阵列。


4

我建议这种方法:

1)创建一个脚本以将SVG导出到任何所需的大小。我已经编码了这个.bat脚本来帮助我创建一个Android图标

@echo off
set file="%~f1"
set path=%~dp1
set inkscape="C:\Program Files\Inkscape\inkscape.exe"

echo Le icone saranno salvate in %path%
echo Produzione icone applicative

echo %file% --export-png="%path%/ic32.png" -w32 -h32 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic48.png" -w48 -h48 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic72.png" -w72 -h72 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic96.png" -w96 -h96 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic144.png" -w144 -h144 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic192.png" -w192 -h192 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic512.png" -w512 -h512 > %~dp1/commands.txt
%inkscape% --shell < %~dp1/commands.txt
erase "%~dp1/commands.txt"

echo Procedura terminata

注意

  • 定义的%inkscape% var应该适合您的Inkscape安装路径
  • 该脚本将所有导出命令回显到临时文件,以更好地管理inkscape进程。“ shell” cli参数使用单个实例接受更多命令,而不是每个命令生成一个实例。

使用此参数,Inkscape将进入交互式命令行外壳模式。在这种模式下,您可以在提示符下键入命令,然后Inkscape将执行命令,而不必为每个命令运行新的Inkscape副本。此功能对脚本和服务器使用最有用:它没有添加任何新功能,但可以提高重复调用Inkscape来执行命令行任务(例如导出或转换)的任何脚本的速度和内存要求。Shell模式下的每个命令必须是完整有效的Inkscape命令行,但不能包含Inkscape程序名称,例如“ file.svg --export-pdf = file.pdf”。(请参阅inkscape手册

2)在上述脚本中添加philippe-b答案中所述的转换语法,该转换语法将所有生成的PNG合并到单个ICO文件中

3)(可选)删除所有导出的PNG,因为不再需要它们


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.