Changeset View
Changeset View
Standalone View
Standalone View
optimize-svg.sh
Property | Old Value | New Value |
---|---|---|
File Mode | 100644 | 100755 |
1 | #!/usr/bin/env bash | 1 | #!/usr/bin/env bash | ||
---|---|---|---|---|---|
2 | 2 | | |||
3 | if ! command -v svgo >/dev/null | 3 | if ! command -v scour >/dev/null | ||
4 | then | 4 | then | ||
5 | echo "Please install svgo: npm install svgo" | 5 | echo "Please install Scour" | ||
6 | exit 1 | 6 | exit 1 | ||
7 | fi | 7 | fi | ||
8 | # regarding convertStyleToAttrs, see: https://github.com/svg/svgo/issues/489 | 8 | if ! command -v inkscape >/dev/null | ||
9 | # regarding convertPathData, see: https://github.com/svg/svgo/issues/490 | 9 | then | ||
10 | ARGS="--pretty --disable=convertStyleToAttrs --disable=convertPathData" | 10 | echo "Please install Inkscape" | ||
11 | exit 1 | ||||
12 | fi | ||||
13 | | ||||
14 | ARGS="--enable-viewboxing --enable-comment-stripping --enable-id-stripping --shorten-ids --remove-descriptive-elements --strip-xml-space --strip-xml-prolog --nindent=2" | ||||
11 | 15 | | |||
12 | function generatePng { | 16 | function generatePng { | ||
13 | inkscape -z -D $1 --export-png=$2 --export-width=200 --export-background=transparent > /dev/null | 17 | inkscape -z -D $1 --export-png=$2 --export-area-page --export-width=200 --export-background=transparent > /dev/null | ||
14 | } | 18 | } | ||
15 | 19 | | |||
16 | # args: pngA pngB final.svg temp.svg | 20 | # args: pngA pngB final.svg temp.svg | ||
17 | function evaluateOptimization { | 21 | function evaluateOptimization { | ||
18 | # that regex is to just take A from "A (B)" | 22 | # that regex is to just take A from "A (B)" | ||
19 | res=`compare -metric MAE $1 $2 /dev/null 2>&1 | sed "s/^\\([0-9]*\\).*/\\1/"` #-fuzz 5 | 23 | res=`compare -metric MAE $1 $2 /dev/null 2>&1 | sed "s/^\\([0-9]*\\).*/\\1/"` #-fuzz 5 | ||
20 | if [ "$res" -gt 100 ]; then | 24 | if [ "$res" -gt 100 ]; then | ||
21 | echo "huuuuge difference of $res in $3" | 25 | echo "huuuuge difference of $res in $3" | ||
22 | else | 26 | else | ||
23 | mv $4 $3 | 27 | mv $4 $3 | ||
24 | fi | 28 | fi | ||
25 | } | 29 | } | ||
26 | 30 | | |||
27 | find . -name "*.svg" -size 4k -print0 | while IFS= read -r -d '' file | 31 | find . -name "*.svg" -size 4k -print0 | while IFS= read -r -d '' file | ||
28 | do | 32 | do | ||
29 | echo "doing... $file" | 33 | echo "------------------------------------------------------------" | ||
30 | generatePng "$file" /tmp/A.png | 34 | generatePng "$file" /tmp/A.png | ||
31 | svgo -i "$file" -o "$file".tmp.svg $ARGS | 35 | scour -i "$file" -o "$file".tmp.svg $ARGS | ||
32 | generatePng "$file".tmp.svg /tmp/B.png | 36 | generatePng "$file".tmp.svg /tmp/B.png | ||
33 | evaluateOptimization /tmp/A.png /tmp/B.png "$file" "$file".tmp.svg | 37 | evaluateOptimization /tmp/A.png /tmp/B.png "$file" "$file".tmp.svg | ||
34 | done | 38 | done | ||
35 | 39 | | |||
36 | find . -name "*.svgz" -print0 | while IFS= read -r -d '' file | 40 | find . -name "*.svgz" -print0 | while IFS= read -r -d '' file | ||
37 | do | 41 | do | ||
38 | echo "z-doing... $file" | 42 | echo "z-doing... $file" | ||
39 | generatePng "$file" /tmp/A.png | 43 | generatePng "$file" /tmp/A.png | ||
40 | gunzip "$file" -S .svgz -c | svgo -i - $ARGS | gzip -c > "$file".tmp.svgz | 44 | gunzip "$file" -S .svgz -c | scour -i - $ARGS | gzip -c > "$file".tmp.svgz | ||
41 | generatePng "$file".tmp.svgz /tmp/B.png | 45 | generatePng "$file".tmp.svgz /tmp/B.png | ||
42 | evaluateOptimization /tmp/A.png /tmp/B.png "$file" "$file".tmp.svgz | 46 | evaluateOptimization /tmp/A.png /tmp/B.png "$file" "$file".tmp.svgz | ||
43 | done | 47 | done |