#!/usr/bin/env bash # # Generates the Google Play store graphics from the app's own icon vectors. # # ./tools/make-store-assets.sh [output-dir] # default: ./store-assets # # Produces, matching Play's asset specs (support.google.com/.../answer/9866151): # icon-512.png 512 x 512 32-bit PNG *with* alpha (ours is full-bleed, # so every pixel ends up opaque anyway) # feature-graphic-1024x500.png 1024 x 500 24-bit PNG, no alpha # # Output lands in ./store-assets/ *inside* the repo, never in $HOME: the editable sources are # the SVGs in tools/store-assets/ and these PNGs are the files that get uploaded to the Play # Console, so they belong with the release they were made for. Pass a directory to override. set -euo pipefail here="$(cd "$(dirname "$0")" && pwd)" repo="$(dirname "$here")" out="${1:-$repo/store-assets}" mkdir -p "$out" render() { # local svg="$1" width="$2" height="$3" name="$4" mode="$5" inkscape "$svg" \ --export-type=png --export-width="$width" --export-height="$height" \ --export-filename="$out/$name" >/dev/null 2>&1 if [ "$mode" = keep-alpha ]; then # Play asks for a 32-bit PNG here. The SVG's background rect covers the whole # canvas, so the alpha channel is fully opaque — no accidental transparency. magick "$out/$name" -alpha on PNG32:"$out/$name" else magick "$out/$name" -background '#1B5E20' -alpha remove -alpha off PNG24:"$out/$name" fi printf ' %s ' "$out/$name" identify -format '%wx%h %[channels] %b\n' "$out/$name" } echo "Writing store assets to $out" render "$here/store-assets/icon.svg" 512 512 icon-512.png keep-alpha render "$here/store-assets/feature-graphic.svg" 1024 500 feature-graphic-1024x500.png flatten echo "Done. Screenshots: ./tools/make-store-screenshots.sh # reads store-assets/raw-screenshots/phone/" echo " Tablets: FORM_FACTOR=tablet-7in ./tools/make-store-screenshots.sh" echo " FORM_FACTOR=tablet-10in ./tools/make-store-screenshots.sh"