Lin*_*nas 24 icons imagemagick
我想.ico通过使用ImageMagick动态地(从SVG文件)为我的Windows应用程序创建图标.我怎么做?
Microsoft 列出了图标的各种颜色深度和大小要求.ImageMagick有-depth和-colors选项,但在这种情况下我不确定如何正确使用它们.
另外,它看起来像Vista +支持嵌入到相同的256x256高分辨率图标.ico,可以(应该?必须?)是一个压缩的PNG.如何将Windows XP图标和这个新的Vista图标"加入"到一个.ico文件中?
Rob*_*obV 27
ImageMagick在其文档中有这方面的配方,请参阅FavIcon网页链接缩略图
基本上你运行以下:
convert image.png -bordercolor white -border 0 \
\( -clone 0 -resize 16x16 \) \
\( -clone 0 -resize 32x32 \) \
\( -clone 0 -resize 48x48 \) \
\( -clone 0 -resize 64x64 \) \
-delete 0 -alpha off -colors 256 favicon.ico
Run Code Online (Sandbox Code Playgroud)
您可以根据需要修改此选项以包含更大的分辨率,并更改边框,透明度设置等内容.
看起来ImageMagick似乎不能单独执行此操作,因为它无法以理智的方式处理SVG大小调整(而是仅在栅格化之后调整SVG的大小,从而产生可怕的结果)
通过使用inkscape进行转换,它似乎是可能的,例如,下面的一个衬里应该为您提供一个包含所有图标大小的可用图标:
mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=( "${res[@]/#/temp/$f}" ); resm=( "${resm[@]/%/.png}" ); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp;
Run Code Online (Sandbox Code Playgroud)
但是上面不会在文件中给出8位和4位图标(我认为只有不再支持的旧版Windows才需要这些图标)如果你需要它们应该可以做更多的工作来完成它们.
我一直在为同样的问题而苦苦挣扎。我有一个带有图标图像的 SVG,我需要icon.ico从中创建一个文件。让我描述一下我找到的解决方案:
icon.ico。对此没有明确的指导方针。甚至微软发布的软件也带有不一致的图标分辨率。对此有一个疑问。因此,我认为我们能做的最好的事情就是使用Nirsoft 的 IconsExtract。使用这样的工具,您可以检查流行的现代 Windows 程序的图标中包含的分辨率。
icon.ico。许多答案建议使用Inkscape,但您可以通过以下方式使用ImageMagick执行所有操作(以防万一,我检查结果图像是否与使用 inkscape 相同):
magick.exe convert -size 16x16 -background transparent -depth 8 MyIconImage.svg 16.png
...
magick.exe convert -size 256x256 -background transparent -depth 8 MyIconImage.svg 256.png
Run Code Online (Sandbox Code Playgroud)
但是,如果您仍然想使用 Inkscape,请使用以下命令:
inkscape.exe MyIconImage.svg -w 16 -h 16 -o 16.png
Run Code Online (Sandbox Code Playgroud)
一些答案还建议使用 ImageMagick 的icon:auto-resize命令行参数来避免为每个分辨率创建单独的 PNG 文件。我不建议使用它,因为要获得最佳质量,最好避免调整大小,因为它比分别将 SVG 文件渲染为每个分辨率的准确性要低。
magick.exe convert 16.png 20.png 24.png 32.png 40.png 48.png 64.png 256.png -compress jpeg icon.ico
Run Code Online (Sandbox Code Playgroud)
-compress jpeg用作ImageMagick 中特定问题的解决方法,如以下评论中所述。
您可以icon.ico使用以下命令查看有关创建的文件的详细信息:
magick.exe identify icon.ico
Run Code Online (Sandbox Code Playgroud)
让我提供一个自动执行上述步骤的 powershell 脚本:
# You can download ImageMagick from: https://imagemagick.org/script/download.php
$imageMagick = "$PSScriptRoot/ImageMagick-7.1.0-portable-Q16-x64/magick.exe"
$svgIcon = "MySvgIcon.svg"
$iconResolutions = 16,20,24,32,40,48,64,256
# Create 16.png, ..., 256.png image files
$pngImages = @()
Foreach($r in $iconResolutions) {
& $imageMagick convert -size "${r}x${r}" -background transparent -depth 8 $svgIcon "${r}.png"
$pngImages += "${r}.png"
}
# Combine all PNG image files into an icon.ico file
& $imageMagick convert $pngImages -compress jpeg "icon.ico"
# Remove PNG files
Foreach($image in $pngImages) {
Remove-Item $image
}
Run Code Online (Sandbox Code Playgroud)
我清理了Malcolm的解决方案,修复了一个bug,并使脚本输出tiffs,这样你就可以在osx中运行tiff2icns了.
#! /bin/bash
# converts the passed-in svgs to tiff and ico
if [[ $# -eq 0 ]]; then
echo "Usage: $0 svg1 [svg2 [...]]"
exit 0
fi
temp=$(mktemp -d)
declare -a res=(16 24 32 48 64 128 256 512)
for f in $*; do
mkdir -p $temp/$(dirname $f)
for r in "${res[@]}"; do
inkscape -z -e $temp/${f}${r}.png -w $r -h $r $f
done
resm=( "${res[@]/#/$temp/$f}" )
resm=( "${resm[@]/%/.png}" )
for filetype in ico tiff; do
convert "${resm[@]}" ${f%%.*}.$filetype
done
done
rm -rf $temp
Run Code Online (Sandbox Code Playgroud)
小智 6
magick convert in.jpg -define icon:auto-resize=16,48,256 -compress zip out.ico
Run Code Online (Sandbox Code Playgroud)
http://imagemagick.org/script/command-line-options.php#define
| 归档时间: |
|
| 查看次数: |
8996 次 |
| 最近记录: |