100 lines
3.3 KiB
Bash
100 lines
3.3 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}Generating Android app icons...${NC}\n"
|
|
|
|
# Check for inkscape (preferred) or rsvg-convert as fallback
|
|
if command -v inkscape &> /dev/null; then
|
|
SVG_RENDERER="inkscape"
|
|
elif command -v rsvg-convert &> /dev/null; then
|
|
SVG_RENDERER="rsvg"
|
|
else
|
|
echo -e "${YELLOW}Warning: neither inkscape nor rsvg-convert found. Install one to render SVG icons.${NC}"
|
|
echo "On Fedora/RHEL: sudo dnf install inkscape"
|
|
echo "On Ubuntu/Debian: sudo apt-get install inkscape"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if ImageMagick is installed (needed for compositing).
|
|
# ImageMagick 7+ uses `magick`; ImageMagick 6 (Ubuntu/Debian) uses `convert`.
|
|
if command -v magick &> /dev/null; then
|
|
MAGICK="magick"
|
|
elif command -v convert &> /dev/null; then
|
|
MAGICK="convert"
|
|
else
|
|
echo -e "${YELLOW}Warning: ImageMagick not found. Please install it to generate icons.${NC}"
|
|
echo "On Fedora/RHEL: sudo dnf install ImageMagick"
|
|
echo "On Ubuntu/Debian: sudo apt-get install imagemagick"
|
|
exit 1
|
|
fi
|
|
|
|
# Source SVG logo
|
|
SOURCE_SVG="public/logo.svg"
|
|
|
|
if [ ! -f "$SOURCE_SVG" ]; then
|
|
echo -e "${YELLOW}Error: Source logo not found at $SOURCE_SVG${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Brand colors
|
|
BG_COLOR="#7c52e0" # Ditto purple
|
|
|
|
TMPDIR=$(mktemp -d)
|
|
LOGO_WHITE_SVG="$TMPDIR/logo_white.svg"
|
|
LOGO_WHITE="$TMPDIR/logo_white.png"
|
|
|
|
# Recolor the SVG fill to white before rasterizing.
|
|
sed 's/#7c52e0/#ffffff/g' "$SOURCE_SVG" > "$LOGO_WHITE_SVG"
|
|
|
|
echo "Rendering white SVG at 512x512..."
|
|
|
|
if [ "$SVG_RENDERER" = "inkscape" ]; then
|
|
inkscape --export-type=png --export-filename="$LOGO_WHITE" -w 512 -h 512 "$LOGO_WHITE_SVG" 2>/dev/null
|
|
else
|
|
rsvg-convert -w 512 -h 512 "$LOGO_WHITE_SVG" -o "$LOGO_WHITE"
|
|
fi
|
|
|
|
# ── Adaptive icon foreground PNGs (transparent bg, white logo, safe-zone padding) ──
|
|
# Launcher PNGs (ic_launcher, ic_launcher_round) are committed directly to the repo.
|
|
# Only the adaptive foreground PNGs need to be generated here.
|
|
# Safe zone = 66% of canvas. Content centered on transparent background.
|
|
|
|
echo "Generating adaptive foreground PNGs..."
|
|
|
|
make_foreground() {
|
|
local size=$1
|
|
local content_size=$(echo "$size * 66 / 100" | bc)
|
|
local dest=$2
|
|
$MAGICK -size "${size}x${size}" "xc:none" \
|
|
\( "$LOGO_WHITE" -resize "${content_size}x${content_size}" \) \
|
|
-gravity center -compose over -composite \
|
|
"$dest"
|
|
}
|
|
|
|
make_foreground 48 android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
|
|
make_foreground 72 android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
|
|
make_foreground 96 android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
|
|
make_foreground 144 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
|
|
make_foreground 192 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
|
|
|
|
# Update background color
|
|
BACKGROUND_COLOR_FILE="android/app/src/main/res/values/ic_launcher_background.xml"
|
|
mkdir -p android/app/src/main/res/values
|
|
cat > "$BACKGROUND_COLOR_FILE" << 'EOF'
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<resources>
|
|
<color name="ic_launcher_background">#7c52e0</color>
|
|
</resources>
|
|
EOF
|
|
|
|
# Cleanup temp files
|
|
rm -rf "$TMPDIR"
|
|
|
|
echo -e "\n${GREEN}Android icons generated successfully!${NC}"
|
|
echo -e "Icon: white Ditto logo on ${GREEN}${BG_COLOR}${NC} (Ditto purple)"
|