Newer
Older
gnexus-tasks / tools / rasterize_icons.sh
#!/usr/bin/env bash
# Иконки gntodo растрируются из единственного источника — frontend/public/logo.svg
# (знак «стек входящих» на холсте 64×64 со скруглёнными краями, приём gnexus-creds).
#
#   frontend/public/icons/icon-192.png, icon-512.png   purpose "any"
#   frontend/public/icons/maskable-512.png             purpose "maskable"
#   extension/public/icons/icon-{16,32,48,128}.png     иконки расширения
#
# Нужен ImageMagick с rsvg (проверка: magick -list format | grep SVG → RSVG).
# Фон #16161E впечатываем в PNG: прозрачность iOS рисует чёрным (углы холста
# скруглены, за ними — ничего), а maskable на Android обрезается по кругу.
# После правки логотипа: ./tools/rasterize_icons.sh
set -euo pipefail
cd "$(dirname "$0")/.."

LOGO=frontend/public/logo.svg
PAGE='#16161E'   # фон страницы кита — тот же, что у холста логотипа
SAFE=80          # maskable: холст = 80% кадра (safe zone адаптивных иконок Android)

raster() { # raster <итоговый размер> <файл> [размер холста внутри кадра]
  local size=$1 out=$2 canvas=${3:-$1}
  magick -background "$PAGE" -density $((96 * canvas / 64)) "$LOGO" \
    -resize "${canvas}x${canvas}" -gravity center -extent "${size}x${size}" \
    -background "$PAGE" -alpha remove -alpha off -depth 8 -strip \
    -define png:color-type=2 "$out"   # truecolor без альфы — одинаково у всех размеров
}

raster 192 frontend/public/icons/icon-192.png
raster 512 frontend/public/icons/icon-512.png
raster 512 frontend/public/icons/maskable-512.png $((512 * SAFE / 100))
for s in 16 32 48 128; do raster "$s" "extension/public/icons/icon-$s.png"; done

command ls -l frontend/public/icons/*.png extension/public/icons/*.png