# The MIT License (MIT) # # Copyright (c) 2015 Roberto Estivill # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. #!/bin/sh # Requires ImageMagick # brew install imagemagick --with-librsvg # Requires pngquant # brew install pngquant ################# ### SELECT FILES ### OLDIFS="$IFS" IFS=$'\n' FILES_PNG=`ls | grep -i .png` FILES_JPG=`ls | grep -i .jpg` FILES_JPEG=`ls | grep -i .jpeg` FILES_SVG=`ls | grep -i .svg` FILES_ALL=( ${FILES_SVG[@]} ${FILES_PNG[@]} ${FILES_JPG[@]} ${FILES_JPEG[@]} ) echo "" echo "Select file [ALL]:" for FILES_ALL_INDEX in "${!FILES_ALL[@]}"; do echo $((FILES_ALL_INDEX + 1 ))") ${FILES_ALL[$FILES_ALL_INDEX]}" done echo $(( ${#FILES_ALL[@]} + 1 ))") All" read FILE_SELECTION if [ -z "$FILE_SELECTION" ] || [ "$(( FILE_SELECTION - 1 ))" == "${#FILES_ALL[@]}" ] ; then FILES=( "${FILES_ALL[@]}" ) else FILES=${FILES_ALL[$(( FILE_SELECTION - 1 ))]} fi echo "" ################# ### SCALE TYPE ### echo "Select scale type [Porcentual]:" echo "1) Porcentual" echo "2) Launcher icon" echo "3) Action bar icon" echo "4) Notification icon" read SCALE_TYPE case "$SCALE_TYPE" in 2) BASE_SIZE="192x192" ;; 3) BASE_SIZE="128x128" ;; 4) BASE_SIZE="96x96" ;; esac if [ -z "$BASE_SIZE" ] ; then echo "" echo "Enter base [width]x[height] size for the xxxhdpi [original size]:" read BASE_SIZE fi echo "" ################# ### SELECT RESOURCE PREFFIX ### echo "Select resource directory [drawable]:" echo "1) drawable" echo "2) mipmap" read RESOURCE_PREFFIX case "$RESOURCE_PREFFIX" in 2) OUTPUT="mipmap" ;; *) OUTPUT="drawable" ;; esac echo "" ################# ### CREATE DIRECTORIES ### DIR_BASE=densinator DIR_TMP=$DIR_BASE/temp DIR_OUTPUT_XXXHDPI=$DIR_BASE/$OUTPUT-xxxhdpi DIR_OUTPUT_XXHDPI=$DIR_BASE/$OUTPUT-xxhdpi DIR_OUTPUT_XHDPI=$DIR_BASE/$OUTPUT-xhdpi DIR_OUTPUT_HDPI=$DIR_BASE/$OUTPUT-hdpi DIR_OUTPUT_MDPI=$DIR_BASE/$OUTPUT-mdpi DIR_OUTPUT_LDPI=$DIR_BASE/$OUTPUT-ldpi mkdir -p "$DIR_TMP" mkdir -p "$DIR_OUTPUT_XXXHDPI" mkdir -p "$DIR_OUTPUT_XXHDPI" mkdir -p "$DIR_OUTPUT_XHDPI" mkdir -p "$DIR_OUTPUT_HDPI" mkdir -p "$DIR_OUTPUT_MDPI" mkdir -p "$DIR_OUTPUT_LDPI" ################# ### FIX FILE NAME FUNCTION ### ### $1 file function fix_name { start_log_msg " Fixing name" FILE_NAME=$(echo "$1" | tr '[:upper:]' '[:lower:]') FILE_NAME=${FILE_NAME// /_} FILE_NAME=${FILE_NAME//-/_} if [ ${FILE_NAME: -4} == ".jpg" ] ; then FILE_NAME=${FILE_NAME%.jpg}.png fi if [ ${FILE_NAME: -5} == ".jpeg" ] ; then FILE_NAME=${FILE_NAME%.jpeg}.png fi if [ ${FILE_NAME: -4} == ".svg" ] ; then FILE_NAME=${FILE_NAME%.svg}.png fi echo "DONE" } ################# ### CREATE BASE FILE FUNCTION ### ### $1 input file ### $2 output file ### $3 base size function create_base { start_log_msg " Creating base file" if [ ${1: -4} == ".svg" ] ; then # if svg file if [ -z "$3" ] ; then echo "ERROR svg file found but base size was not defined" exit 1 else # Create big enough base file out of svg convert -density 1200 $1 -background none -resize $3! $2 fi else if [ -z "$3" ] ; then # not svg file cp $1 $2 else convert $1 -resize $3! -strip $2 fi fi echo "DONE" } ################# ### PROCESS FUNCTION ### ### $1 input file ### $2 output file ### $3 scale ### $4 description function process { start_log_msg " Scaling $4" convert $1 -resize $3! -strip $2 echo "DONE" start_log_msg " Optimizing $4" mv $2 $2.tmp pngquant --output $2 $2.tmp # pngquant doesn't support file overwrite echo "DONE" } ################# ### PROCESS FUNCTION ### ### $1 message function start_log_msg { echo -n "$1 " for ((i=0; i< (30 - ${#1}); i++)){ echo -n "."; } echo -n " " } ################# ### ITERATE OVER FILES ### for FILE in ${FILES[*]} do echo -e "Processing $FILE" fix_name $FILE TMP_FILE=$DIR_TMP/$FILE_NAME create_base $FILE $TMP_FILE $BASE_SIZE process $TMP_FILE $DIR_OUTPUT_XXXHDPI/$FILE_NAME 100% "xxxhdpi" process $TMP_FILE $DIR_OUTPUT_XXHDPI/$FILE_NAME 75% "xxhdpi" process $TMP_FILE $DIR_OUTPUT_XHDPI/$FILE_NAME 50% "xhdpi" process $TMP_FILE $DIR_OUTPUT_HDPI/$FILE_NAME 37.5% "hdpi" process $TMP_FILE $DIR_OUTPUT_MDPI/$FILE_NAME 25% "mdpi" process $TMP_FILE $DIR_OUTPUT_LDPI/$FILE_NAME 18.75% "ldpi" echo -e "" done ################# ### CLEAN UP ### rm -rf $DIR_TMP echo "Done." IFS="$OLDIFS" open $DIR_BASE