135 lines
5.3 KiB
Bash
Executable File
135 lines
5.3 KiB
Bash
Executable File
# scripts/generate_icons.sh
|
|
|
|
#!/bin/bash
|
|
|
|
# Argument 1: Path to magick executable
|
|
MAGICK_BIN="$1"
|
|
|
|
# Fallback if not provided
|
|
if [ -z "$MAGICK_BIN" ]; then
|
|
MAGICK_BIN="magick"
|
|
fi
|
|
|
|
# Assumes running from Project Root
|
|
SOURCE="assets/icon_source.png"
|
|
OUT_DIR="assets/icons"
|
|
|
|
if [ ! -f "$SOURCE" ]; then
|
|
echo "Error: Source image '$SOURCE' not found in $(pwd)"
|
|
exit 1
|
|
fi
|
|
|
|
# Verify magick works
|
|
"$MAGICK_BIN" -version >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: ImageMagick tool '$MAGICK_BIN' not found or not working."
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$OUT_DIR"
|
|
|
|
# macOS
|
|
ICONSET="$OUT_DIR/icon.iconset"
|
|
mkdir -p "$ICONSET"
|
|
|
|
"$MAGICK_BIN" "$SOURCE" -scale 16x16 "$ICONSET/icon_16x16.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 32x32 "$ICONSET/icon_16x16@2x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 32x32 "$ICONSET/icon_32x32.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 64x64 "$ICONSET/icon_32x32@2x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 128x128 "$ICONSET/icon_128x128.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 256x256 "$ICONSET/icon_128x128@2x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 256x256 "$ICONSET/icon_256x256.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 512x512 "$ICONSET/icon_256x256@2x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 512x512 "$ICONSET/icon_512x512.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 1024x1024 "$ICONSET/icon_512x512@2x.png"
|
|
|
|
iconutil -c icns "$ICONSET" -o "$OUT_DIR/app_icon.icns"
|
|
rm -rf "$ICONSET"
|
|
|
|
# Windows
|
|
"$MAGICK_BIN" "$SOURCE" \
|
|
\( -clone 0 -scale 256x256 \) \
|
|
\( -clone 0 -scale 128x128 \) \
|
|
\( -clone 0 -scale 64x64 \) \
|
|
\( -clone 0 -scale 48x48 \) \
|
|
\( -clone 0 -scale 32x32 \) \
|
|
\( -clone 0 -scale 16x16 \) \
|
|
-delete 0 -alpha off -colors 256 "$OUT_DIR/app_icon.ico"
|
|
|
|
# Android
|
|
ANDROID_DIR="$OUT_DIR/android/res"
|
|
|
|
mkdir -p "$ANDROID_DIR/mipmap-mdpi"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 48x48 "$ANDROID_DIR/mipmap-mdpi/ic_launcher.png"
|
|
|
|
mkdir -p "$ANDROID_DIR/mipmap-hdpi"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 72x72 "$ANDROID_DIR/mipmap-hdpi/ic_launcher.png"
|
|
|
|
mkdir -p "$ANDROID_DIR/mipmap-xhdpi"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 96x96 "$ANDROID_DIR/mipmap-xhdpi/ic_launcher.png"
|
|
|
|
mkdir -p "$ANDROID_DIR/mipmap-xxhdpi"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 144x144 "$ANDROID_DIR/mipmap-xxhdpi/ic_launcher.png"
|
|
|
|
mkdir -p "$ANDROID_DIR/mipmap-xxxhdpi"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 192x192 "$ANDROID_DIR/mipmap-xxxhdpi/ic_launcher.png"
|
|
|
|
# iOS
|
|
XCASSETS_DIR="$OUT_DIR/ios/Assets.xcassets"
|
|
IOS_DIR="$XCASSETS_DIR/AppIcon.appiconset"
|
|
mkdir -p "$IOS_DIR"
|
|
|
|
cat > "$XCASSETS_DIR/Contents.json" <<EOF
|
|
{
|
|
"info" : {
|
|
"version" : 1,
|
|
"author" : "xcode"
|
|
}
|
|
}
|
|
EOF
|
|
|
|
"$MAGICK_BIN" "$SOURCE" -scale 20x20 "$IOS_DIR/Icon-20.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 40x40 "$IOS_DIR/Icon-20@2x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 60x60 "$IOS_DIR/Icon-20@3x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 29x29 "$IOS_DIR/Icon-29.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 58x58 "$IOS_DIR/Icon-29@2x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 87x87 "$IOS_DIR/Icon-29@3x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 40x40 "$IOS_DIR/Icon-40.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 80x80 "$IOS_DIR/Icon-40@2x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 120x120 "$IOS_DIR/Icon-40@3x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 120x120 "$IOS_DIR/Icon-60@2x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 180x180 "$IOS_DIR/Icon-60@3x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 76x76 "$IOS_DIR/Icon-76.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 152x152 "$IOS_DIR/Icon-76@2x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 167x167 "$IOS_DIR/Icon-83.5@2x.png"
|
|
"$MAGICK_BIN" "$SOURCE" -scale 1024x1024 "$IOS_DIR/Icon-1024.png"
|
|
|
|
cat > "$IOS_DIR/Contents.json" <<EOF
|
|
{
|
|
"images" : [
|
|
{ "size" : "20x20", "idiom" : "iphone", "filename" : "Icon-20@2x.png", "scale" : "2x" },
|
|
{ "size" : "20x20", "idiom" : "iphone", "filename" : "Icon-20@3x.png", "scale" : "3x" },
|
|
{ "size" : "29x29", "idiom" : "iphone", "filename" : "Icon-29.png", "scale" : "1x" },
|
|
{ "size" : "29x29", "idiom" : "iphone", "filename" : "Icon-29@2x.png", "scale" : "2x" },
|
|
{ "size" : "29x29", "idiom" : "iphone", "filename" : "Icon-29@3x.png", "scale" : "3x" },
|
|
{ "size" : "40x40", "idiom" : "iphone", "filename" : "Icon-40@2x.png", "scale" : "2x" },
|
|
{ "size" : "40x40", "idiom" : "iphone", "filename" : "Icon-40@3x.png", "scale" : "3x" },
|
|
{ "size" : "60x60", "idiom" : "iphone", "filename" : "Icon-60@2x.png", "scale" : "2x" },
|
|
{ "size" : "60x60", "idiom" : "iphone", "filename" : "Icon-60@3x.png", "scale" : "3x" },
|
|
{ "size" : "20x20", "idiom" : "ipad", "filename" : "Icon-20.png", "scale" : "1x" },
|
|
{ "size" : "20x20", "idiom" : "ipad", "filename" : "Icon-20@2x.png", "scale" : "2x" },
|
|
{ "size" : "29x29", "idiom" : "ipad", "filename" : "Icon-29.png", "scale" : "1x" },
|
|
{ "size" : "29x29", "idiom" : "ipad", "filename" : "Icon-29@2x.png", "scale" : "2x" },
|
|
{ "size" : "40x40", "idiom" : "ipad", "filename" : "Icon-40.png", "scale" : "1x" },
|
|
{ "size" : "40x40", "idiom" : "ipad", "filename" : "Icon-40@2x.png", "scale" : "2x" },
|
|
{ "size" : "76x76", "idiom" : "ipad", "filename" : "Icon-76.png", "scale" : "1x" },
|
|
{ "size" : "76x76", "idiom" : "ipad", "filename" : "Icon-76@2x.png", "scale" : "2x" },
|
|
{ "size" : "83.5x83.5", "idiom" : "ipad", "filename" : "Icon-83.5@2x.png", "scale" : "2x" },
|
|
{ "size" : "1024x1024", "idiom" : "ios-marketing", "filename" : "Icon-1024.png", "scale" : "1x" }
|
|
],
|
|
"info" : {
|
|
"version" : 1,
|
|
"author" : "xcode"
|
|
}
|
|
}
|
|
EOF |