2022-06-12 04:09:00 +02:00
|
|
|
#!/usr/bin/env zsh
|
2022-07-04 19:18:14 +02:00
|
|
|
# Generates trimmed raster images from SVGs in svg/.
|
2022-06-12 04:09:00 +02:00
|
|
|
# Argument 1 is the file extension, default is webp.
|
|
|
|
# Argument 2 is the size, default is to use the SVG size.
|
|
|
|
|
|
|
|
setopt LOCAL_OPTIONS ERR_RETURN NO_UNSET PIPE_FAIL
|
|
|
|
|
2022-07-04 19:18:14 +02:00
|
|
|
if ! type magick &> /dev/null; then
|
|
|
|
print -Pu2 "%F{1}'magick' from imagemagick not found%f"
|
2022-06-12 04:09:00 +02:00
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
local ext=webp
|
|
|
|
[[ ${ARGC} > 0 ]] && ext=${1}
|
|
|
|
local size=-1
|
|
|
|
[[ ${ARGC} > 1 ]] && size=${2}
|
|
|
|
|
2022-07-04 19:18:14 +02:00
|
|
|
function gri_convert() {
|
|
|
|
local svg=${1}
|
2022-06-12 04:09:00 +02:00
|
|
|
local target=${svg##*/}
|
|
|
|
target=${ext}/${target%.*}.${ext}
|
2022-07-04 19:18:14 +02:00
|
|
|
|
|
|
|
magick -verbose -background none -quality 100 \
|
|
|
|
${svg} -trim -resize ${size} ${target}
|
|
|
|
|
|
|
|
if [[ ${ext} == "png" ]] && type pngcrush &> /dev/null; then
|
|
|
|
pngcrush -ow ${target}
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
print -P "%F{12}generating ${ext} images in ${PWD}/${ext} …%f"
|
|
|
|
mkdir -p ${ext}
|
|
|
|
for svg in svg/*.svg; do
|
|
|
|
gri_convert ${svg}
|
2022-06-12 04:09:00 +02:00
|
|
|
done
|
2022-07-04 19:18:14 +02:00
|
|
|
|
|
|
|
if ([[ ${ext} == "webp" ]] && type webpmux &> /dev/null) \
|
|
|
|
|| ([[ ${ext} == "png" ]] && type apngasm &> /dev/null); then
|
|
|
|
print -P "%F{12}generating animated emoji …%f"
|
|
|
|
for cfg in svg/animated/*cfg; do
|
|
|
|
local emojiname=${cfg##*/}
|
|
|
|
emojiname=${emojiname%.*}
|
|
|
|
|
|
|
|
local -a webpmux_args=()
|
|
|
|
local -a apngasm_args=()
|
|
|
|
while read line; do
|
|
|
|
local -a framecfg=(${(@s: :)line})
|
|
|
|
|
|
|
|
[[ ${framecfg[1][1]} == "#" ]] && continue
|
|
|
|
if [[ ${framecfg[1]} == "loop" ]]; then
|
|
|
|
webpmux_args+=(-loop ${framecfg[2]})
|
|
|
|
apngasm_args+=(--loops ${framecfg[2]})
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
webpmux_args+=(-frame ${ext}/${framecfg[1]}.${ext}
|
|
|
|
+${framecfg[2]}+0+0+0-b)
|
|
|
|
apngasm_args+=(${ext}/${framecfg[1]}.${ext} ${framecfg[2]})
|
|
|
|
|
|
|
|
gri_convert svg/animated/${framecfg[1]}.svg
|
|
|
|
done < ${cfg}
|
|
|
|
|
|
|
|
if [[ ${ext} == "webp" ]]; then
|
|
|
|
webpmux -o ${ext}/a${emojiname}.${ext} ${webpmux_args}
|
|
|
|
elif [[ ${ext} == "png" ]]; then
|
|
|
|
apngasm --force --output ${ext}/a${emojiname}.${ext} ${apngasm_args}
|
|
|
|
fi
|
|
|
|
rm -v ${ext}/${emojiname}_*.${ext}
|
|
|
|
done
|
|
|
|
else
|
|
|
|
print -P "%F{1}Not generating animated emoji." \
|
|
|
|
"Animated emojis are only generated for webp (with webpmux)" \
|
|
|
|
"and png (with apngasm)%f"
|
|
|
|
fi
|