Skip to content

Instantly share code, notes, and snippets.

@matchilling
Last active October 29, 2016 12:35
Show Gist options
  • Save matchilling/6880c45a7ffdd9b475d5508be457aa51 to your computer and use it in GitHub Desktop.
Save matchilling/6880c45a7ffdd9b475d5508be457aa51 to your computer and use it in GitHub Desktop.
This script generates an unique image with an uuid and an embedded qr code
#!/usr/bin/env sh
# -----------------------------------------------------------------------------
# This script generates an unique image with an uuid and an embedded qr code
# Usage `./gen_unique_image.sh unique_image.(jpg|jpeg|png|gif|bmp)`
# -----------------------------------------------------------------------------
readonly PACKAGE='gen_unique_image'
readonly COLOR_BACKGROUND='0F3244'
readonly COLOR_BLUE='58C0F9'
readonly COLOR_FOREGROUND='FFFFFF'
if [ -z "$1" ]
then
echo "No filename given. Usage './$PACKAGE [filename]'"
exit 1
fi
# Check if ImageMagick is installed
command -v convert --version >/dev/null 2>&1 || {
echo >&2 "Please install ImageMagick (c.f. http://www.imagemagick.org/script/binary-releases.php) before continuing."
exit 1
}
# Check if uuidgen is installed
command -v uuidgen --version >/dev/null 2>&1 || {
echo >&2 "Please install uuidgen (c.f. http://man7.org/linux/man-pages/man1/uuidgen.1.html) before continuing."
exit 1
}
# Check if qrencode is installed
command -v qrencode --version >/dev/null 2>&1 || {
echo >&2 "Please install qrencode (c.f. https://github.com/fukuchi/libqrencode) before continuing."
exit 1
}
# Check if font is installed
readonly FONT='Ubuntu-Mono'
if [ -z "$(convert -list font | grep $FONT)" ]
then
echo "Please install the appropriate font files for using "$FONT" (c.f. http://font.ubuntu.com/)."
exit 1
fi
readonly UUID=$(uuidgen)
readonly DATE="$(date --universal '+%Y-%m-%d %H:%M:%S:%N')"
# Create qr code
readonly QR_CODE_FILE=$(mktemp -t qr_code_XXXXXX)
readonly QR_CODE_DECODED="$UUID-$DATE"
qrencode --foreground=$COLOR_BLUE \
--background=$COLOR_BACKGROUND \
-t PNG \
-l H \
-s 3 \
-o $QR_CODE_FILE \
$UUID-$DATE
# Create logo
readonly SUPE_LOGO="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIzNTBweCIgaGVpZ2h0PSIyNDBweCIgdmlld0JveD0iMCAwIDM1MCAyNDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDM1MCAyNDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxnIG9wYWNpdHk9IjAuMSI+CgkJPHBhdGggZD0iTTIwMi40MTEsMTM1LjUxOGMxLjQ5NC0yLjA5NCwyLjI4OC0zLjI2MSwzLjEzNi00LjM4N2M3LjE4Mi05LjUzOSwxNi43NzEtMTIuNTI3LDI2LjQ5Ni04LjI3CgkJCWM4Ljg1NSwzLjg3NiwxMy4zMTcsMTMuOTY2LDExLjE5OSwyNS4xMzhjLTEuNjUxLDguNzA2LTYuNTI2LDE0Ljc1Ni0xNC42NTUsMTguMjQ0Yy01LjA2LDIuMTcxLTEwLjM3LDMuMjMzLTE1LjgyOSwzLjU3NwoJCQljLTEuNjkyLDAuMTA3LTMuODQ0LDAuNDkxLTQuNDg2LTEuNzEzYy0wLjY1OS0yLjI2LDEuMDYtMy41NzgsMi43OTgtNC40OTJjMi45NjctMS41NjEsNi4wNDgtMi45MDUsOS4wNDUtNC40MTIKCQkJYzQuMzgzLTIuMjA1LDcuMi01Ljc0LDguNi0xMC40MjJjMS43MTEtNS43MjQtMC41MzctMTAuOTg4LTUuODQ4LTEzLjcxYy00LjMxMi0yLjIxLTguNjE4LTAuNzgyLTEyLjM4NSw0LjE4MwoJCQljLTQuMzQsNS43MTktNS41MzgsMTIuNDU5LTYuMjc2LDE5LjM2OWMtMS42MzgsMTUuMzM3LTAuODA1LDMwLjcyMy0xLjAwNSw0Ni4wODljLTAuMDQyLDMuMjA0LTAuMDA0LDYuNDA5LTAuMDA3LDkuNjEzCgkJCWMtMC4wMDcsNy40NS0xLjA0OSw5LjM0OS01LjE4OCw5LjQ2MWMtNS40NTEsMC4xNDgtMTAuNjY4LTQuMjE3LTExLjEwNy05LjYxMmMtMS44MzItMjIuNTIzLTEuODk2LTQ1LjA4My0xLjIzNS02Ny42NTQKCQkJYzAuMjY3LTkuMTE5LDAuMDc1LTE4LjI1NiwxLjE1NS0yNy4zNDJjMC42MDYtNS4xMDEsMy4wMjItNi4zNSw3LjMzOS0zLjU0MmM0LjA1MiwyLjYzNSw2LjkyNyw2LjEwMiw3LjIwNywxMS4yNjEKCQkJQzIwMS41MDEsMTI5LjQzNiwyMDEuOTY2LDEzMS45NTcsMjAyLjQxMSwxMzUuNTE4eiIvPgoJCTxwYXRoIGQ9Ik0xNTEuOTQ1LDE2Mi45NjdjLTEuNTgxLDIuNzMyLTIuODM2LDUuMzEzLTQuNDU5LDcuNjM2Yy03LjY4MSwxMC45OTItMjEuNDM4LDExLjU5OC0zMC4yMzIsMS4zNzUKCQkJYy00LjQ0LTUuMTYxLTYuMzA3LTExLjM3OC03LjI2NS0xNy45NzhjLTEuMjk2LTguOTMxLTEuNDQ3LTE3LjgzMy0wLjAyOC0yNi43OGMwLjYxOC0zLjg5NiwzLjUwMi00Ljc2Nyw2LjQ3My01LjMyMgoJCQljMy43NDMtMC42OTksNy42OTctMS40OTMsMTAuOTg3LDEuNDAzYzEuNTIxLDEuMzM5LDAuODIzLDMuMzI4LDAuODMxLDUuMDI5YzAuMDQ1LDguOTU5LTAuNzg5LDE3Ljk2MiwwLjk1LDI2Ljg0CgkJCWMwLjc0MiwzLjc4NywwLjY5MSw4Ljc5NSw1LjYxMSw5LjU1M2M0Ljg3NSwwLjc1MSw3LjIwNC0zLjQ0OCw5LjEzNi03LjIwNmMzLjczNS03LjI2NSw0LjU1Ny0xNS4yNjcsNS41MjUtMjMuMjA4CgkJCWMwLjMyOS0yLjY5OCwwLjQyOS01LjQyNCwwLjY1OS04LjEzNWMwLjUzNi02LjMxMywzLjMxNi04LjM3Miw5LjIwNS02LjE4NWM3Ljg5MiwyLjkzLDEwLjAyLDYuNTc3LDkuNTE4LDEzLjQyMwoJCQljLTAuNjk5LDkuNTQtMS43NjMsMTkuMTU1LTAuMzQ5LDI4Ljc1OGMwLjk0Niw2LjQyNiwxLjcxOCwxMi44OTIsOS41NjQsMTQuOTI4YzEuMjYyLDAuMzI3LDIuMzc2LDEuMzEsMS45OCwyLjg1NAoJCQljLTAuNDE0LDEuNjE3LTEuOTA0LDEuOTYyLTMuMzQsMi4zMTVjLTcuNzQ1LDEuOTAyLTE3LjAyMi0yLjU2Mi0yMS40OTEtMTAuMzE5QzE1My42NDcsMTY5LjIyLDE1Mi44NDEsMTY2LjIxMiwxNTEuOTQ1LDE2Mi45Njd6IgoJCQkvPgoJCTxwYXRoIGQ9Ik0yNDcuNzk4LDE1Mi4xMjJjMC4yOC0xMC4wMzcsMi4yOTEtMTguNDM1LDcuMTk4LTI2LjExNGM1Ljc2Ny05LjAyNSwyMC40MTctMTUuNzM1LDMwLjkwOS0xMy44NAoJCQljOC41OSwxLjU1MSwxMy40MTEsMTEuMjExLDEwLjA4MSwyMS4wMDFjLTMuODgyLDExLjQxMy0xMi4wMjMsMTguMzgzLTIzLjg1MSwyMC40ODdjLTMuNTU2LDAuNjMzLTQuMDUyLDEuOTkyLTMuNTQ4LDQuOTkzCgkJCWMwLjc4Nyw0LjY4OSwxLjYzNCw5LjU5LDYuNTg1LDExLjQ3MWM1LjEwMSwxLjkzNyw5LjczMi0wLjIzMSwxMy42OTItMy42MTRjMy4xOTUtMi43Myw1LjUwNS02LjIxMyw3LjgzNy05LjY3NgoJCQljMC44OTQtMS4zMjgsMS41NDQtMy42NjEsMy44NDktMi42MzFjMS44NzYsMC44MzgsMS43NzIsMi44NzUsMS42NjYsNC42NTVjLTAuNjAxLDEwLjA3NS0xMC4wMDQsMjEuMzg4LTIwLjA1NywyNC4xNjEKCQkJYy0xNS44MTMsNC4zNjItMzAuNTM2LTUuNjY5LTMzLjQ4My0yMi44OUMyNDguMTY1LDE1Ny4xMzUsMjQ4LjAwNywxNTQuMDg2LDI0Ny43OTgsMTUyLjEyMnogTTI4Ni4wOTcsMTI3LjI4MgoJCQljMC4xMDctNC4zNS0yLjI1Mi00LjE2NC00LjUxNy0zLjQ4M2MtNy4xOTgsMi4xNjQtMTUuMTI2LDE1Ljg1Ni0xMi44ODUsMTguMTg3YzEuNzgxLDEuODUzLDUuNzIxLTEuMTQ1LDguMjkzLTIuODUxCgkJCUMyODEuNTcsMTM2LjA5NywyODUuNTk5LDEzMi41MzUsMjg2LjA5NywxMjcuMjgyeiIvPgoJPC9nPgoJPGc+CgkJPHBhdGggZmlsbD0iI0Y5RjlGOSIgZD0iTTIwMy43NjgsMTMwLjY3NmMxLjU1NC0yLjE3OCwyLjM3OS0zLjM5MSwzLjI2MS00LjU2MWM3LjQ2OC05LjkxOCwxNy40MzctMTMuMDI1LDI3LjU0OC04LjU5OQoJCQljOS4yMDcsNC4wMywxMy44NDYsMTQuNTIxLDExLjY0MywyNi4xMzdjLTEuNzE2LDkuMDUyLTYuNzg1LDE1LjM0Mi0xNS4yMzcsMTguOTY4Yy01LjI2MSwyLjI1OC0xMC43ODIsMy4zNjItMTYuNDU3LDMuNzE5CgkJCWMtMS43NTksMC4xMTEtMy45OTcsMC41MS00LjY2NS0xLjc4MWMtMC42ODUtMi4zNSwxLjEwMi0zLjcyLDIuOTA5LTQuNjdjMy4wODUtMS42MjMsNi4yODktMy4wMiw5LjQwNC00LjU4OAoJCQljNC41NTctMi4yOTMsNy40ODYtNS45NjgsOC45NDEtMTAuODM2YzEuNzc5LTUuOTUxLTAuNTU5LTExLjQyNC02LjA4LTE0LjI1NGMtNC40ODMtMi4yOTgtOC45Ni0wLjgxMy0xMi44NzcsNC4zNDkKCQkJYy00LjUxMiw1Ljk0Ny01Ljc1OCwxMi45NTQtNi41MjYsMjAuMTM4Yy0xLjcwMywxNS45NDYtMC44MzcsMzEuOTQ0LTEuMDQ1LDQ3LjkyYy0wLjA0NCwzLjMzMS0wLjAwNCw2LjY2My0wLjAwNyw5Ljk5NQoJCQljLTAuMDA3LDcuNzQ2LTEuMDkxLDkuNzItNS4zOTQsOS44MzdjLTUuNjY3LDAuMTU0LTExLjA5Mi00LjM4NS0xMS41NDgtOS45OTRjLTEuOTA1LTIzLjQxNy0xLjk3MS00Ni44NzQtMS4yODUtNzAuMzQxCgkJCWMwLjI3Ny05LjQ4MSwwLjA3OC0xOC45ODEsMS4yMDEtMjguNDI4YzAuNjMtNS4zMDMsMy4xNDMtNi42MDIsNy42MzEtMy42ODNjNC4yMTMsMi43NCw3LjIwMiw2LjM0NSw3LjQ5MywxMS43MDkKCQkJQzIwMi44MjEsMTI0LjM1MiwyMDMuMzA0LDEyNi45NzQsMjAzLjc2OCwxMzAuNjc2eiIvPgoJCTxwYXRoIGZpbGw9IiNGOUY5RjkiIGQ9Ik0xNTEuMjk3LDE1OS4yMTVjLTEuNjQ0LDIuODQtMi45NDgsNS41MjQtNC42MzYsNy45NGMtNy45ODYsMTEuNDI4LTIyLjI4OSwxMi4wNTgtMzEuNDMzLDEuNDMKCQkJYy00LjYxNi01LjM2Ni02LjU1Ny0xMS44My03LjU1My0xOC42OTJjLTEuMzQ4LTkuMjg2LTEuNTA0LTE4LjU0Mi0wLjAyOS0yNy44NDRjMC42NDItNC4wNTEsMy42NDEtNC45NTYsNi43My01LjUzNAoJCQljMy44OTEtMC43MjcsOC4wMDMtMS41NTIsMTEuNDIzLDEuNDU5YzEuNTgxLDEuMzkyLDAuODU1LDMuNDYsMC44NjQsNS4yMjljMC4wNDcsOS4zMTUtMC44MjEsMTguNjc1LDAuOTg4LDI3LjkwNgoJCQljMC43NzEsMy45MzgsMC43MTksOS4xNDQsNS44MzQsOS45MzJjNS4wNjgsMC43ODEsNy40OS0zLjU4NSw5LjQ5OC03LjQ5MmMzLjg4My03LjU1Myw0LjczOC0xNS44NzMsNS43NDQtMjQuMTI5CgkJCWMwLjM0Mi0yLjgwNiwwLjQ0Ni01LjY0LDAuNjg1LTguNDU4YzAuNTU3LTYuNTYzLDMuNDQ3LTguNzA1LDkuNTcxLTYuNDMxYzguMjA2LDMuMDQ3LDEwLjQxOCw2LjgzOCw5Ljg5NiwxMy45NTYKCQkJYy0wLjcyNyw5LjkxOS0xLjgzMywxOS45MTUtMC4zNjIsMjkuOWMwLjk4NCw2LjY4MSwxLjc4NiwxMy40MDQsOS45NDQsMTUuNTIxYzEuMzEyLDAuMzQsMi40NywxLjM2MiwyLjA1OSwyLjk2OAoJCQljLTAuNDMxLDEuNjgxLTEuOTgsMi4wNC0zLjQ3MywyLjQwNmMtOC4wNTMsMS45NzctMTcuNjk4LTIuNjY0LTIyLjM0NS0xMC43MjlDMTUzLjA2NywxNjUuNzE2LDE1Mi4yMjgsMTYyLjU4OSwxNTEuMjk3LDE1OS4yMTV6IgoJCQkvPgoJCTxwYXRoIGZpbGw9IiNGOUY5RjkiIGQ9Ik0yNTAuOTU3LDE0Ny45NGMwLjI5MS0xMC40MzYsMi4zODItMTkuMTY3LDcuNDgzLTI3LjE1MmM1Ljk5Ni05LjM4NCwyMS4yMjctMTYuMzYsMzIuMTM2LTE0LjM5CgkJCWM4LjkzMSwxLjYxMywxMy45NDQsMTEuNjU2LDEwLjQ4MiwyMS44MzVjLTQuMDM3LDExLjg2Ni0xMi41LDE5LjExMy0yNC43OTksMjEuMzAxYy0zLjY5OCwwLjY1OC00LjIxMywyLjA3MS0zLjY4OSw1LjE5MQoJCQljMC44MTgsNC44NzUsMS42OTksOS45NzEsNi44NDcsMTEuOTI2YzUuMzAzLDIuMDE0LDEwLjExOS0wLjI0LDE0LjIzNi0zLjc1OGMzLjMyMi0yLjgzOSw1LjcyMy02LjQ2LDguMTQ4LTEwLjA2MQoJCQljMC45My0xLjM4MSwxLjYwNS0zLjgwNiw0LjAwMi0yLjczNmMxLjk1MSwwLjg3MSwxLjg0MywyLjk4OSwxLjczMiw0Ljg0Yy0wLjYyNSwxMC40NzUtMTAuNDAxLDIyLjIzOC0yMC44NTMsMjUuMTIxCgkJCWMtMTYuNDQxLDQuNTM1LTMxLjc0OS01Ljg5NC0zNC44MTMtMjMuNzk5QzI1MS4zMzgsMTUzLjE1MiwyNTEuMTc0LDE0OS45ODIsMjUwLjk1NywxNDcuOTR6IE0yOTAuNzc4LDEyMi4xMTMKCQkJYzAuMTExLTQuNTIzLTIuMzQxLTQuMzI5LTQuNjk2LTMuNjIxYy03LjQ4MywyLjI1LTE1LjcyNywxNi40ODYtMTMuMzk3LDE4LjkxYzEuODUyLDEuOTI3LDUuOTQ4LTEuMTkxLDguNjIzLTIuOTY1CgkJCUMyODYuMDcsMTMxLjI3OCwyOTAuMjU5LDEyNy41NzQsMjkwLjc3OCwxMjIuMTEzeiIvPgoJPC9nPgoJPHBhdGggb3BhY2l0eT0iMC4xIiBkPSJNMTA2LjM4NSwxNjQuODQ3Yy0wLjcwMS00Ljc2Mi0zLjExMS04Ljc1NC02LjEzNy0xMi4yOTNjLTUuMDk0LTUuOTU1LTEwLjUyOC0xMS42MTctMTUuNjUzLTE3LjU0NwoJCWMtNS4wODgtNS44ODctOC44MjItMTIuMzU4LTcuODg4LTIwLjYyOGMwLjM4OC0zLjQ0LDEuMzQ0LTYuNDk5LDMuMTE4LTkuMDQ2YzMuMTQ0LTMuMzk2LDguNjYyLTYuMjksMTQuNjA3LTEuMDkyCgkJYzAsMCw0LjUsNC4zMzMsOC4xNjctMS4zMzNjMy41MS01LjQyNS0xMi4zNzQtMTIuODI5LTIzLjM4OC0xMS41NTFjLTMuMTksMC4yMS02LjMyLDAuOTA5LTkuMzU3LDEuOTY0CgkJYy0yLjU2MSwwLjg5LTUuMDI4LDIuMzkxLTcuMTYyLDQuMDg5Yy0zLjY1LDIuOTA0LTUuNzk0LDcuNDEzLTYuNTk0LDExLjgzMWMtMS4yNzIsNy4wMjMsMC4zMjQsMTMuNDg5LDQuNzM3LDE5LjMzOQoJCWMyLjQ0LDMuMjM1LDQuOTk0LDYuNDUyLDcuOTA5LDkuMjQ1YzUuNDA1LDUuMTgsMTEuMTUyLDEwLDE2LjY3LDE1LjA2NGMxLjY1MywxLjUxOCwzLjI0NCwzLjIwMyw0LjQ2Miw1LjA3MwoJCWMxLjkzMSwyLjk2NiwxLjE0Myw2LjIxMy0xLjk5Nyw3Ljg0NmMtMi4yNjcsMS4xNzgtNC44MDUsMi4yMTMtNy4zMTEsMi40ODJjLTcuOTc0LDAuODU0LTE0LjgxMS0xLjUzNC0xOS42MzYtOC4yOAoJCWMtMi4xMTgtMi45NjEtMi40ODEtNi4xNDctMC42MDQtOS40NzdjMC42NDItMS4xMzksMS4xNTEtMi40MzgsMS4zNTYtMy43MjJjMC40MzktMi43NS0xLjE2Mi00LjAzOC0zLjc0LTIuOTgzCgkJYy0zLjc1NywxLjUzNy03LjA1NiwzLjc4NC05LjUyNCw3LjA3OGMtMy44Myw1LjExMi00LjE4NSwxMC45MTItMy4yMTQsMTYuOTM5YzAuNDY0LDIuODc0LDEuMTQxLDUuNjYyLDMuMDgyLDguMDAyCgkJYzIuNjE4LDMuMTU2LDYuMDY5LDQuOTY4LDkuODMzLDYuMjczYzUuNjUzLDEuOTYsMTEuNTEsMi42NDEsMTcuNDcsMi42NDNjMS41NjQtMC4wNzMsMy4xMzMtMC4wODYsNC42OS0wLjIzCgkJYzYuNzUyLTAuNjI1LDEzLjI4LTIuMDI1LDE5LjIxNi01LjUzQzEwNC45MTQsMTc1LjgwNCwxMDcuMjkyLDE3MS4wMDgsMTA2LjM4NSwxNjQuODQ3eiIvPgoJPHBhdGggZmlsbD0iI0Y5RjlGOSIgZD0iTTEwNC4wNTEsMTYyLjE4Yy0wLjcwMS00Ljc2Mi0zLjExMS04Ljc1NC02LjEzNy0xMi4yOTNjLTUuMDk0LTUuOTU1LTEwLjUyOC0xMS42MTctMTUuNjUzLTE3LjU0NwoJCWMtNS4wODgtNS44ODctOC44MjItMTIuMzU4LTcuODg4LTIwLjYyOGMwLjM4OC0zLjQ0LDEuMzQ0LTYuNDk5LDMuMTE4LTkuMDQ2YzMuMTQ0LTMuMzk2LDguNjYyLTYuMjksMTQuNjA3LTEuMDkyCgkJYzAsMCw0LjUsNC4zMzMsOC4xNjctMS4zMzNjMy41MS01LjQyNS0xMi4zNzQtMTIuODI5LTIzLjM4OC0xMS41NTFjLTMuMTksMC4yMS02LjMyLDAuOTA5LTkuMzU3LDEuOTY0CgkJYy0yLjU2MSwwLjg5LTUuMDI4LDIuMzkxLTcuMTYyLDQuMDg5Yy0zLjY1LDIuOTA0LTUuNzk0LDcuNDEzLTYuNTk0LDExLjgzMWMtMS4yNzIsNy4wMjMsMC4zMjQsMTMuNDg5LDQuNzM3LDE5LjMzOQoJCWMyLjQ0LDMuMjM1LDQuOTk0LDYuNDUyLDcuOTA5LDkuMjQ1YzUuNDA1LDUuMTgsMTEuMTUyLDEwLDE2LjY3LDE1LjA2NGMxLjY1MywxLjUxOCwzLjI0NCwzLjIwMyw0LjQ2Miw1LjA3MwoJCWMxLjkzMSwyLjk2NiwxLjE0Myw2LjIxMy0xLjk5Nyw3Ljg0NmMtMi4yNjcsMS4xNzgtNC44MDUsMi4yMTMtNy4zMTEsMi40ODJjLTcuOTc0LDAuODU0LTE0LjgxMS0xLjUzNC0xOS42MzYtOC4yOAoJCWMtMi4xMTgtMi45NjEtMi40ODEtNi4xNDctMC42MDQtOS40NzdjMC42NDItMS4xMzksMS4xNTEtMi40MzgsMS4zNTYtMy43MjJjMC40MzktMi43NS0xLjE2Mi00LjAzOC0zLjc0LTIuOTgzCgkJYy0zLjc1NywxLjUzNy03LjA1NiwzLjc4NC05LjUyNCw3LjA3OGMtMy44Myw1LjExMi00LjE4NSwxMC45MTItMy4yMTQsMTYuOTM5YzAuNDY0LDIuODc0LDEuMTQxLDUuNjYyLDMuMDgyLDguMDAyCgkJYzIuNjE4LDMuMTU2LDYuMDY5LDQuOTY4LDkuODMzLDYuMjczYzUuNjUzLDEuOTYsMTEuNTEsMi42NDEsMTcuNDcsMi42NDNjMS41NjQtMC4wNzMsMy4xMzMtMC4wODYsNC42OS0wLjIzCgkJYzYuNzUyLTAuNjI1LDEzLjI4LTIuMDI1LDE5LjIxNi01LjUzQzEwMi41OCwxNzMuMTM4LDEwNC45NTksMTY4LjM0MSwxMDQuMDUxLDE2Mi4xOHoiLz4KCTxwYXRoIG9wYWNpdHk9IjAuMSIgZD0iTTE3MC45MDIsMjMuMjg0YzAuNzQsMTQuNDIxLDIuNzA3LDI4LjcsNC44NzMsNDIuOTU3YzAuODA0LDUuMjkzLDEuNTUyLDguOTgsMy4yODcsMTQuMzkxCgkJYzAuMjUsMC43NzgsMS45NDIsMi4zMjIsMy42MDMtMC4yNjRjMS4xODMtMS44NDEsMi4zODgtMy41MjYsMy40OTEtNS4yNjRjNi4xMDEtOS42MTQsOS45OTUtMTguNjg3LDE0Ljg4NC0yOC44OTUKCQljMS41MTktMi4yNDUsMS45MTcsMC4xMTksMS45MTcsMC4xMTljLTEuNTIzLDEyLjI0OC01LjA1OCwyNC4zMDQtNC41MSwzOC4wMjJjMC4wNTYsMS4zOTcsMS45NzYsMS44NDEsMi44NDIsMC42OTcKCQljOS45MDQtMTMuMDg2LDE5LjUzNy0yMi44ODEsMzMuNDgxLTI4LjY3Yy0wLjAwMi0wLjAwMi0wLjAwMy0wLjAwNC0wLjAwNS0wLjAwNmMyLjc2Ni0wLjk1NiwxLjQyNiwxLjM4NiwxLjQyNiwxLjM4NnYwCgkJYy0xNy40NzMsMTIuMDM5LTIxLjkwOSwyNi40MjUtMjcuMjI2LDQzLjgzNGMtMS4xMzcsMy43MjMtMy4zMDcsMS44NzItNS4yNzgsMS4xMTZjLTExLjE4OC00LjI5MS0yMi41ODktNi43MjMtMzQuMjktNi43NzloMC44MjYKCQljLTExLjcwMSwwLjA1Ni0yMy4xMDIsMi40ODgtMzQuMjksNi43NzljLTEuOTcxLDAuNzU2LTQuMTQxLDIuNjA3LTUuMjc4LTEuMTE2Yy01LjMxNy0xNy40MDktOS43NTMtMzEuNzk2LTI3LjIyNi00My44MzR2MAoJCWMwLDAtMS4zNDEtMi4zNDIsMS40MjYtMS4zODZjLTAuMDAyLDAuMDAyLTAuMDAzLDAuMDA0LTAuMDA1LDAuMDA2YzEzLjk0NSw1Ljc5LDIzLjU3NywxNS41ODUsMzMuNDgxLDI4LjY3CgkJYzAuODY2LDEuMTQ0LDIuNzg2LDAuNzAxLDIuODQyLTAuNjk3YzAuNTQ4LTEzLjcxOC0yLjk4Ny0yNS43NzQtNC41MS0zOC4wMjJjMCwwLDAuMzk3LTIuMzY0LDEuOTE3LTAuMTE5CgkJYzQuODg5LDEwLjIwOCw4Ljc4MywxOS4yODEsMTQuODg0LDI4Ljg5NWMxLjEwMywxLjczOCwyLjMwNywzLjQyMywzLjQ5MSw1LjI2NGMxLjY2MSwyLjU4NiwzLjM1NCwxLjA0MiwzLjYwMywwLjI2NAoJCWMxLjczNS01LjQxMSwyLjQ4My05LjA5OCwzLjI4Ny0xNC4zOTFjMi4xNjYtMTQuMjU3LDQuMTM0LTI4LjUzNiw0Ljg3My00Mi45NTdjMCwwLTAuMTQ1LTEuMjYyLDAuOTktMS4yNjIKCQlTMTcwLjkwMiwyMy4yODQsMTcwLjkwMiwyMy4yODR6Ii8+Cgk8cGF0aCBmaWxsPSIjQzcxNThEIiBkPSJNMTcwLjkwMiwxNy40NzNjMC43NCwxNC40MjEsMi43MDcsMjguNyw0Ljg3Myw0Mi45NTdjMC44MDQsNS4yOTMsMS41NTIsOC45OCwzLjI4NywxNC4zOTEKCQljMC4yNSwwLjc3OCwxLjk0MiwyLjMyMiwzLjYwMy0wLjI2NGMxLjE4My0xLjg0MSwyLjM4OC0zLjUyNiwzLjQ5MS01LjI2NGM2LjEwMS05LjYxNCw5Ljk5NS0xOC42ODcsMTQuODg0LTI4Ljg5NQoJCWMxLjUxOS0yLjI0NSwxLjkxNywwLjExOSwxLjkxNywwLjExOWMtMS41MjMsMTIuMjQ4LTUuMDU4LDI0LjMwNC00LjUxLDM4LjAyMmMwLjA1NiwxLjM5NywxLjk3NiwxLjg0MSwyLjg0MiwwLjY5NwoJCWM5LjkwNC0xMy4wODYsMTkuNTM3LTIyLjg4MSwzMy40ODEtMjguNjdjLTAuMDAyLTAuMDAyLTAuMDAzLTAuMDA0LTAuMDA1LTAuMDA2YzIuNzY2LTAuOTU2LDEuNDI2LDEuMzg2LDEuNDI2LDEuMzg2djAKCQljLTE3LjQ3MywxMi4wMzktMjEuOTA5LDI2LjQyNS0yNy4yMjYsNDMuODM0Yy0xLjEzNywzLjcyMy0zLjMwNywxLjg3Mi01LjI3OCwxLjExNmMtMTEuMTg4LTQuMjkxLTIyLjU4OS02LjcyMy0zNC4yOS02Ljc3OWgwLjgyNgoJCWMtMTEuNzAxLDAuMDU2LTIzLjEwMiwyLjQ4OC0zNC4yOSw2Ljc3OWMtMS45NzEsMC43NTYtNC4xNDEsMi42MDctNS4yNzgtMS4xMTZjLTUuMzE3LTE3LjQwOS05Ljc1My0zMS43OTYtMjcuMjI2LTQzLjgzNHYwCgkJYzAsMC0xLjM0MS0yLjM0MiwxLjQyNi0xLjM4NmMtMC4wMDIsMC4wMDItMC4wMDMsMC4wMDQtMC4wMDUsMC4wMDZjMTMuOTQ1LDUuNzksMjMuNTc3LDE1LjU4NSwzMy40ODEsMjguNjcKCQljMC44NjYsMS4xNDQsMi43ODYsMC43MDEsMi44NDItMC42OTdjMC41NDgtMTMuNzE4LTIuOTg3LTI1Ljc3NC00LjUxLTM4LjAyMmMwLDAsMC4zOTctMi4zNjQsMS45MTctMC4xMTkKCQljNC44ODksMTAuMjA4LDguNzgzLDE5LjI4MSwxNC44ODQsMjguODk1YzEuMTAzLDEuNzM4LDIuMzA3LDMuNDIzLDMuNDkxLDUuMjY0YzEuNjYxLDIuNTg2LDMuMzU0LDEuMDQyLDMuNjAzLDAuMjY0CgkJYzEuNzM1LTUuNDExLDIuNDgzLTkuMDk4LDMuMjg3LTE0LjM5MWMyLjE2Ni0xNC4yNTcsNC4xMzQtMjguNTM2LDQuODczLTQyLjk1N2MwLDAtMC4xNDUtMS4yNjIsMC45OS0xLjI2MgoJCVMxNzAuOTAyLDE3LjQ3MywxNzAuOTAyLDE3LjQ3M3oiLz4KPC9nPgo8L3N2Zz4K"
readonly SUPE_LOGO_FILE=$(mktemp -t supe_logo_XXXXXX)
echo $SUPE_LOGO | base64 --decode > $SUPE_LOGO_FILE
convert +antialias \
-resize 130 \
-background "#$COLOR_BACKGROUND" \
$SUPE_LOGO_FILE $SUPE_LOGO_FILE
# Compose final image
convert \
-size 640x400 -quality 100 \
-gravity center \
-font $FONT \
-style 'normal' \
-pointsize 25 \
-fill "#$COLOR_FOREGROUND" \
-annotate +0-20 $UUID \
-pointsize 16 \
-fill "#$COLOR_BLUE" \
-annotate +0+5 "created at: $DATE UTC" \
-draw "rectangle 0,0 640,2" \
-draw "image over 0,-150 0,0 '$SUPE_LOGO_FILE'" \
-draw "image over 0,115 0,0 '$QR_CODE_FILE'" \
xc:"#$COLOR_BACKGROUND" \
$1
rm $SUPE_LOGO_FILE $QR_CODE_FILE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment