Skip to content

Instantly share code, notes, and snippets.

@doctaphred
Forked from alisdair/intensify.sh
Created July 27, 2021 18:42
Show Gist options
  • Save doctaphred/f30716e341aaa0673294639093a0632a to your computer and use it in GitHub Desktop.
Save doctaphred/f30716e341aaa0673294639093a0632a to your computer and use it in GitHub Desktop.
intensifies Slack emoji creator
#!/bin/bash
# Generate a `:something-intensifies:` Slack emoji, given a reasonable image
# input. I recommend grabbing an emoji from https://emojipedia.org/
set -euo pipefail
# Number of frames of shaking
count=10
# Max pixels to move while shaking
delta=4
if [ $# -eq 0 ]; then
echo "Usage: $0 input.png"
exit 1
fi
input=$1
cd "$(dirname "$input")"
filename=$(basename -- "$input")
# Add 10% padding to width and height, then scale to 128x128
width=$(identify -format "%w" "$filename")
height=$(identify -format "%h" "$filename")
new_width=$(( width + width / 10 ))
new_height=$(( height + height / 10 ))
extended="${filename%.*}-extended.png"
convert \
-gravity center \
-background none \
-extent ${new_width}x${new_height} \
-geometry 128x128 \
"$filename" \
"$extended"
# Generate some shaky frames
frame="${filename%.*}-frame"
n=0
while [ "$n" -lt "$count" ]; do
# Generate some random shake
x=$((RANDOM % (delta * 2) - delta))
y=$((RANDOM % (delta * 2) - delta))
# Ensure coordinates are of the form +3 or -4
[ "$x" -ge 0 ] && x="+$x"
[ "$y" -ge 0 ] && y="+$y"
# Shake the image!
convert "$extended" -page "${x}${y}" -background none -flatten "$frame"-"$n".gif
n=$((n + 1))
done
# Combine the frames into a GIF
gif="${filename%.*}-intensifies.gif"
convert -background none -dispose Background -delay 1x30 -loop 0 "${frame}"-*.gif "$gif"
# Clean up
rm "$extended" "${frame}"-*.gif
# We did it y'all
echo "Created $gif. Enjoy!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment