Convert SVG file to macOS icon (icns) format
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh -x | |
set -e | |
SIZES=" | |
16,16x16 | |
32,16x16@2x | |
32,32x32 | |
64,32x32@2x | |
128,128x128 | |
256,128x128@2x | |
256,256x256 | |
512,256x256@2x | |
512,512x512 | |
1024,512x512@2x | |
" | |
for SVG in "$@"; do | |
BASE=$(basename "$SVG" | sed 's/\.[^\.]*$//') | |
ICONSET="$BASE.iconset" | |
mkdir -p "$ICONSET" | |
for PARAMS in $SIZES; do | |
SIZE=$(echo $PARAMS | cut -d, -f1) | |
LABEL=$(echo $PARAMS | cut -d, -f2) | |
svg2png -w $SIZE -h $SIZE -i "$SVG" -o "$ICONSET"/icon_$LABEL.png | |
done | |
iconutil -c icns "$ICONSET" | |
rm -rf "$ICONSET" | |
done |
Current version installed via homebrew no longer uses -o
either. Both filenames are simple arguments:
svg2png -w $SIZE -h $SIZE "$SVG" "$ICONSET"/icon_$LABEL.png
Loop over a directory of SVGs with the fixes mentioned above, while ignoring errors:
#!/bin/sh -x
set -e
SIZES="
16,16x16
32,16x16@2x
32,32x32
64,32x32@2x
128,128x128
256,128x128@2x
256,256x256
512,256x256@2x
512,512x512
1024,512x512@2x
"
FILES=/Zafiro-icons-master/apps/scalable/*
for SVG in $FILES
do
echo "Processing $f file..."
# take action on each file. $f store current file name
BASE=$(basename "$SVG" | sed 's/\.[^\.]*$//')
ICONSET="$BASE.iconset"
mkdir -p "/icons/$ICONSET"
for PARAMS in $SIZES; do
SIZE=$(echo $PARAMS | cut -d, -f1)
LABEL=$(echo $PARAMS | cut -d, -f2)
svg2png -w $SIZE -h $SIZE "$SVG" "/icons/$ICONSET"/icon_$LABEL.png || true
done
iconutil -c icns "/icons/$ICONSET" || true
rm -rf "$ICONSET"
done
Dependecies? Where do I get svg2png
and iconutil
?
I think I did brew install svg2png
or similar. It's been a while but Google should find current answers.
Thank you for this! It works as expected and generates icns files with transparent background. 👍🏻
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Not sure which version of
svg2png
was used here but the latest one doesn't have the-i
flag. Instead it needs to be an argument i.e.