forked from BobbyBakes/conky-Vision
/
render-pngs
executable file
·162 lines (116 loc) · 3.86 KB
/
render-pngs
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/bin/bash
# ======================================
# Intro
# ======================================
echo ""
echo "Usage: render-pngs [ARGS]"
echo ""
echo "Args:"
echo " -i Icon size"
echo " -c Colors"
echo " -d PNG destination"
echo " -q Do not notify when complete"
echo ""
echo "Example: render-pngs -i 32 -c '444444 555555 666666' -d ./.conky-vision-icons -q TRUE"
echo ""
echo "NOTE: Please ensure a multi-color array is specified in 'quotes', as per above example."
echo ""
# ======================================
# ANSI
# ======================================
ansi_reset='\e[0m'
bold='\e[1m'
blue='\e[34m'
yellow_b='\e[1;33m'
red_b='\e[1;31m'
darkgray_b='\e[1;90m'
# ======================================
# Constants
# ======================================
svg_src="SVG"
png_dest=".conky-vision-icons"
default_color="#000"
default_size="32"
# ======================================
# User Input
# ======================================
# Only do this if no command-line arguments have been specified
while getopts ":i:c:d:q:" opt; do
case $opt in
i) icon_size="$OPTARG"
;;
c) icon_colors="$OPTARG"
;;
d) png_dest="$OPTARG"
;;
q) quiet="$OPTARG"
;;
esac
done
echo
# Check to see if the user has specified an icon size and colors as command-line arguments
# If they haven't, carry on as the original script intended i.e. prompt for the values
# Or allow the user to accept the default values
if [ -z "$icon_size" ]
then
echo -e "${bold}Enter icon icon_size (skip for default): ${ansi_reset}"
read -r icon_size
fi
if [ -z "$icon_colors" ]
then
echo -e "${bold}Enter 1 or more colors (space or tab separated): ${ansi_reset}"
read -r -a icon_colors
fi
# ======================================
# Checks
# ======================================
# If no colors given, add default color to array
[ ${#icon_colors[*]} -eq 0 ] && icon_colors[0]="$default_color"
mkdir -p "$png_dest"
icon_size=${icon_size:-"$default_size"}
# ======================================
# RENDER
# ======================================
for color in ${icon_colors[*]}; do
echo
echo -e "${darkgray_b}---------------------------------------${ansi_reset}"
# Check whether the png folder already exits
if [ -d "$png_dest/${color}__$icon_size" ]; then
echo
echo -e "${red_b}$png_dest/${color}__$icon_size exists!${ansi_reset}"
continue
fi
mkdir -p "${color}__$icon_size"
trap 'sed -i "s/<path fill=\"$color\"/<path/" $svg_src/*.svg; exit' INT TERM
sed -i "s/<path/<path fill=\"$color\"/" "$svg_src"/*.svg
# Loop through SVG folder & render png's
for i in $svg_src/*.svg; do
# Get basename
i2=${i##*/} i2=${i2%.*}
# If png exists, skip
if [ -f "${color}__$icon_size/$i2.png" ]; then
echo
echo -e "${darkgray_b}${color}__$icon_size/$i2.png exists.${ansi_reset}"
else
echo
echo -e "${blue}Rendering ${yellow_b}${color}__$icon_size/$i2.png${ansi_reset}"
inkscape -e "${color}__$icon_size/$i2.png" "$i" \
--export-width="$icon_size" --export-height="$icon_size" &> /dev/null
fi
done
# Inkscape has trouble exporting into
# arbitrary depth paths, so move manually
mv "${color}__$icon_size" "$png_dest"
# Revert edit of svg's before next iteration or EXIT
sed -i "s/<path fill=\"$color\"/<path/" "$svg_src"/*.svg
done
# If notify-send installed, send notif
# Only do this if the user has set to -q to anything but TRUE
if [ ! "$quiet" == "TRUE" ]
then
hash notify-send 2>/dev/null &&
notify-send -i 'terminal' \
-a 'Terminal' \
'Terminal' \
'Finished rendering icons!'
fi