summarylogtreecommitdiffstats
path: root/gtk-encode-symbolic-svg-rsvg
blob: 237e3ea760601d9e4bfbbccf77e3bf0f974cffd5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/sh
set -e

in="$1"
size="$2"
shift 2

out_dir="."
if [ "$#" -ge 2 ]; then
  case "$1" in
    -o|--output)
      out_dir="$2"
      ;;
  esac
fi

base="$(basename "$in" .svg)"
width="${size%x*}"
height="${size#*x}"

mkdir -p "$out_dir"

tmp_png="$(mktemp "${TMPDIR:-/tmp}/symbolic.XXXXXX.png")"
tmp_alpha="$(mktemp "${TMPDIR:-/tmp}/symbolic-alpha.XXXXXX.png")"
trap 'rm "$tmp_png" "$tmp_alpha"' EXIT

# Render SVG, then encode as black+alpha for symbolic PNGs.
rsvg-convert -w "$width" -h "$height" -o "$tmp_png" "$in"
magick "$tmp_png" -alpha extract "$tmp_alpha"
magick -size "${width}x${height}" xc:black "$tmp_alpha" -compose CopyOpacity -composite \
  -type TrueColorAlpha -define png:color-type=6 \
  "$out_dir/${base}.symbolic.png"