#!/usr/bin/env bash # 用 ImageMagick 7+(magick)从 assets/logo.png(或旧的 life-echo-logo.jpg)生成各平台 PNG。 # 依赖:brew install imagemagick # 用法:在 app-expo 目录执行 ./scripts/generate-app-icon.sh set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" OUT="$ROOT/assets/images" # 与 Android adaptiveIcon.backgroundColor、开屏底色一致(新 logo 浅紫系) BRAND_BG="#E6F4FE" if [[ -f "$ROOT/assets/logo.png" ]]; then SRC="$ROOT/assets/logo.png" elif [[ -f "$ROOT/assets/life-echo-logo.jpg" ]]; then SRC="$ROOT/assets/life-echo-logo.jpg" else echo "missing: $ROOT/assets/logo.png or $ROOT/assets/life-echo-logo.jpg" >&2 exit 1 fi TMP="$(mktemp -d)" trap 'rm -rf "$TMP"' EXIT if ! command -v magick >/dev/null; then echo "need: magick (ImageMagick 7)" >&2 exit 1 fi mkdir -p "$OUT" # 底图抠透明:JPG 近白底;PNG 主站 logo 为品牌浅底 if [[ "$SRC" == *.jpg ]] || [[ "$SRC" == *.jpeg ]]; then magick "$SRC" -fuzz 12% -transparent white PNG32:"$TMP/fg.png" else magick "$SRC" -fuzz 12% -transparent "${BRAND_BG}" PNG32:"$TMP/fg.png" fi # Android 自适应前景(透明底,1024,内容约 78% 安全区) magick "$TMP/fg.png" -resize '800x800>' -background none -gravity center -extent 1024x1024 \ PNG32:"$OUT/android-icon-foreground.png" # 通用 / iOS 主图标(实色底) magick -size 1024x1024 "xc:${BRAND_BG}" \( "$TMP/fg.png" -resize '800x800>' \) -gravity center -compose over -composite \ PNG32:"$OUT/icon.png" # Android 13+ 单色层(白/透明) magick "$OUT/android-icon-foreground.png" -alpha extract -fill white -colorize 100 -background none -alpha shape \ PNG32:"$OUT/android-icon-monochrome.png" # 开屏图:仅透明 logo(底色由 expo-splash-screen backgroundColor 填充) magick "$TMP/fg.png" -resize '400x400>' PNG32:"$OUT/splash-icon.png" magick "$OUT/icon.png" -resize 48x48 PNG32:"$OUT/favicon.png" # 带 Alpha 的 logo(与 app 内资源一致时可自行纳入版本库) magick "$TMP/fg.png" -resize '1024x1024>' -background none -gravity center -extent 1024x1024 \ PNG32:"$OUT/icon-alpha.png" echo "OK → $OUT/icon.png, icon-alpha.png, android-icon-foreground.png, android-icon-monochrome.png, splash-icon.png, favicon.png"