56 lines
1.7 KiB
Bash
Executable file
56 lines
1.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
FRONTEND_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
SRC_LOGO="${FRONTEND_DIR}/src/logo.png"
|
|
PUBLIC_DIR="${FRONTEND_DIR}/public"
|
|
TMP_DIR="$(mktemp -d)"
|
|
TMP_ALPHA="${TMP_DIR}/logo-alpha-mask.png"
|
|
TMP_GLYPH="${TMP_DIR}/logo-glyph-white.png"
|
|
TMP_CANVAS="${TMP_DIR}/logo-canvas.png"
|
|
TMP_ICON="${TMP_DIR}/logo-icon.png"
|
|
|
|
BRAND_COLOR="${1:-#495e6f}"
|
|
|
|
if ! command -v magick >/dev/null 2>&1; then
|
|
echo "ImageMagick is required (missing 'magick' command)." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f "${SRC_LOGO}" ]]; then
|
|
echo "Missing source logo at ${SRC_LOGO}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "${PUBLIC_DIR}"
|
|
|
|
# Build a high-contrast icon: solid brand background + white logo.
|
|
magick "${SRC_LOGO}" -alpha extract "${TMP_ALPHA}"
|
|
magick -size 1024x1024 xc:white "${TMP_ALPHA}" \
|
|
-compose CopyOpacity \
|
|
-composite \
|
|
"${TMP_GLYPH}"
|
|
|
|
magick -size 1024x1024 "xc:${BRAND_COLOR}" "${TMP_CANVAS}"
|
|
magick "${TMP_GLYPH}" -resize 760x760 "${TMP_GLYPH}"
|
|
magick "${TMP_CANVAS}" "${TMP_GLYPH}" \
|
|
-gravity center \
|
|
-compose over \
|
|
-composite \
|
|
"${TMP_ICON}"
|
|
|
|
magick "${TMP_ICON}" -resize 16x16 "${PUBLIC_DIR}/favicon-16x16.png"
|
|
magick "${TMP_ICON}" -resize 32x32 "${PUBLIC_DIR}/favicon-32x32.png"
|
|
magick "${TMP_ICON}" -resize 180x180 "${PUBLIC_DIR}/apple-touch-icon.png"
|
|
magick "${TMP_ICON}" -resize 192x192 "${PUBLIC_DIR}/android-chrome-192x192.png"
|
|
magick "${TMP_ICON}" -resize 512x512 "${PUBLIC_DIR}/android-chrome-512x512.png"
|
|
magick \
|
|
\( "${TMP_ICON}" -resize 16x16 \) \
|
|
\( "${TMP_ICON}" -resize 32x32 \) \
|
|
\( "${TMP_ICON}" -resize 48x48 \) \
|
|
"${PUBLIC_DIR}/favicon.ico"
|
|
|
|
rm -rf "${TMP_DIR}"
|
|
|
|
echo "Generated favicon + app icon assets in ${PUBLIC_DIR}"
|