Skip to content

Instantly share code, notes, and snippets.

@mynameismiek
Last active October 11, 2017 16:03
Show Gist options
  • Save mynameismiek/31e8f5c050709a312b997ddc9ab042db to your computer and use it in GitHub Desktop.
Save mynameismiek/31e8f5c050709a312b997ddc9ab042db to your computer and use it in GitHub Desktop.
shell script for generating iOS and Android icons from source images. It needs Python3 (or virtualenv) and CairoSVG installed to work (http://cairosvg.org/).
#!/bin/bash
RED_ON='\e[0;31m';
GREEN_ON='\e[0;32m';
YELLOW_ON='\e[0;33m'
OFF='\e[0m'
# Python 3 Virtual Env !!! replace with your own !!!
source ~/Projects/tensorflowp3/bin/activate
# Set arguments
while getopts "p:i:" opt
do
case "$opt" in
p) PLATFORM=$OPTARG;;
i) FILES_STRING=$OPTARG;;
esac
done
if [[ -z "${PLATFORM}" || -z "${FILES_STRING}" ]]; then
printf "${RED_ON}MISSING REQUIRED ARGUMENT\n${OFF}"
printf "usage: genicons -p platform -i inputfiles\n"
printf "\t-p\tplatform: [ios, droid-launch, droid-menu, droid-context, droid-notif]\n"
printf "\t-i\tinput files separated by a comma (ex: inputfile1,inputfile2,etc)\n"
exit 1
fi
FILES=(${FILES_STRING//,/ })
DROID_MDPI=160
DROID_HDPI=240
DROID_XHDPI=320
DROID_XXHDPI=480
DROID_XXXHDPI=640
checkDroidDirs() {
if [ ! -d "$1/drawable" ]; then
printf "${YELLOW_ON}Making drawable directory...\n${OFF}"
mkdir -p "$1/drawable"
fi
if [ ! -d "$1/drawable-hdpi" ]; then
printf "${YELLOW_ON}Making drawable-hdpi directory...\n${OFF}"
mkdir -p "$1/drawable-hdpi"
fi
if [ ! -d "$1/drawable-xhdpi" ]; then
printf "${YELLOW_ON}Making drawable-xhdpi directory...\n${OFF}"
mkdir -p "$1/drawable-xhdpi"
fi
if [ ! -d "$1/drawable-xxhdpi" ]; then
printf "${YELLOW_ON}Making drawable-xxhdpi directory...\n${OFF}"
mkdir -p "$1/drawable-xxhdpi"
fi
if [ ! -d "$1/drawable-xxxhdpi" ]; then
printf "${YELLOW_ON}Making drawable-xxxhdpi directory...\n${OFF}"
mkdir -p "$1/drawable-xxxhdpi"
fi
}
for i in "${FILES[@]}"
do
:
# do whatever on $i
printf "Converting ${GREEN_ON}${i}\n${OFF}"
basepath=$(dirname "${i}")
filename="${i%.*}"
# Android: Launcher - (PNG)
if [ "${PLATFORM}" == "droid-launch" ]; then
checkDroidDirs "${basepath}"
# mdpi - 48x48 - 160 dpi
cairosvg -f png -W 48 -H 48 -d ${DROID_MDPI} $i -o "${basepath}/drawable/launch_${filename}.png"
# hdpi - 72x72 - 240 dpi
cairosvg -f png -W 72 -H 72 -d ${DROID_HDPI} $i -o "${basepath}/drawable-hdpi/launch_${filename}.png"
# xhdpi - 96x96 - 320 dpi
cairosvg -f png -W 96 -H 96 -d ${DROID_XHDPI} $i -o "${basepath}/drawable-xhdpi/launch_${filename}.png"
# xxhdpi - 144x144 - 480 dpi
cairosvg -f png -W 144 -H 144 -d ${DROID_XXHDPI} $i -o "${basepath}/drawable-xxhdpi/launch_${filename}.png"
# xxxhdpi - 192x192 - 640 dpi
cairosvg -f png -W 192 -H 192 -d ${DROID_XXXHDPI} $i -o "${basepath}/drawable-xxxhdpi/launch_${filename}.png"
# Play - 512x512 - 72 dpi
cairosvg -f png -W 512 -H 512 -d 72 $i -o "${basepath}/drawable/launch_${filename}_playstore.png"
fi
# Android: Action, Dialog, Tab (PNG)
if [ "${PLATFORM}" == "droid-menu" ]; then
checkDroidDirs "${basepath}"
# mdpi - 24x24 - 160 dpi
cairosvg -f png -W 24 -H 24 -d ${DROID_MDPI} $i -o "${basepath}/drawable/menu_${filename}.png"
# hdpi - 36x36 - 240 dpi
cairosvg -f png -W 36 -H 36 -d ${DROID_HDPI} $i -o "${basepath}/drawable-hdpi/menu_${filename}.png"
# xhdpi - 48x48 - 320 dpi
cairosvg -f png -W 48 -H 48 -d ${DROID_XHDPI} $i -o "${basepath}/drawable-xhdpi/menu_${filename}.png"
# xxhdpi - 72x72 - 480 dpi
cairosvg -f png -W 72 -H 72 -d ${DROID_XXHDPI} $i -o "${basepath}/drawable-xxhdpi/menu_${filename}.png"
# xxxhdpi - 96x96 - 640 dpi
cairosvg -f png -W 96 -H 96 -d ${DROID_XXXHDPI} $i -o "${basepath}/drawable-xxxhdpi/menu_${filename}.png"
fi
# Android: Small contextual (PNG)
if [ "${PLATFORM}" == "droid-context" ]; then
checkDroidDirs "${basepath}"
# mdpi - 16x16 - 160 dpi
cairosvg -f png -W 16 -H 16 -d ${DROID_MDPI} $i -o "${basepath}/drawable/context_${filename}.png"
# hdpi - 24x24 - 240 dpi
cairosvg -f png -W 24 -H 24 -d ${DROID_HDPI} $i -o "${basepath}/drawable-hdpi/context_${filename}.png"
# xhdpi - 32x32 - 320 dpi
cairosvg -f png -W 32 -H 32 -d ${DROID_XHDPI} $i -o "${basepath}/drawable-xhdpi/context_${filename}.png"
# xxhdpi - 48x48 - 480 dpi
cairosvg -f png -W 48 -H 48 -d ${DROID_XXHDPI} $i -o "${basepath}/drawable-xxhdpi/context_${filename}.png"
# xxxhdpi - 64x64 - 640 dpi
cairosvg -f png -W 64 -H 64 -d ${DROID_XXXHDPI} $i -o "${basepath}/drawable-xxxhdpi/context_${filename}.png"
fi
# Android: Notification (PNG)
if [ "${PLATFORM}" == "droid-notif" ]; then
checkDroidDirs "${basepath}"
# mdpi - 22x22 - 160 dpi
cairosvg -f png -W 22 -H 22 -d ${DROID_MDPI} $i -o "${basepath}/drawable/notify_${filename}.png"
# hdpi - 33x33 - 240 dpi
cairosvg -f png -W 33 -H 33 -d ${DROID_HDPI} $i -o "${basepath}/drawable-hdpi/notify_${filename}.png"
# xhdpi - 44x44 - 320 dpi
cairosvg -f png -W 44 -H 44 -d ${DROID_XHDPI} $i -o "${basepath}/drawable-xhdpi/notify_${filename}.png"
# xxhdpi - 66x66 - 480 dpi
cairosvg -f png -W 66 -H 66 -d ${DROID_XXHDPI} $i -o "${basepath}/drawable-xxhdpi/notify_${filename}.png"
# xxxhdpi - 88x88 - 640 dpi
cairosvg -f png -W 88 -H 88 -d ${DROID_XXXHDPI} $i -o "${basepath}/drawable-xxxhdpi/notify_${filename}.png"
fi
#iOS: SVG -> PDF
if [ "${PLATFORM}" == "ios" ]; then
if [ ! -d "${basepath}/ios" ]; then
printf "${YELLOW_ON}Making iOS folder...\n${OFF}"
mkdir -p "${basepath}/ios"
fi
cairosvg -f pdf $i -o "${basepath}/ios/${filename}.pdf"
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment