Shell script Quasar Framework Icons

Mit dem folgenden Shell script werden alle notwendigen Icons für das Quasar Framework in den richtigen Größen und Formaten mit der Hilfe von ImageMagick erstellt.

#!/bin/sh

PATH="/bin:/usr/bin"

script="`basename \"$0\"`"

srcfile="`realpath -e \"$1\" 2>/dev/null`"

if [ -z "$srcfile" ] ; then
	echo "$script: file not found \"$1\"" >&2
	exit 1
fi

iconsdir="`cd \"$2\" 2>/dev/null && pwd`"

if [ -z "$iconsdir" ] ; then
	echo "$script: directory not found \"$2\"" >&2
	exit 1
fi

if [ -z "`which convert 2>/dev/null`" ] ; then
	echo "$script: convert command from ImageMagick not found" >&2
	exit 1
fi

doconvert() {
	prefix="$1"
	s="$2"
	output="$iconsdir/${prefix}-${s}x${s}.png"
	if [ -n "$3" ] ; then
		output="$iconsdir/$3"
	fi
	if [ -e "$output" ] ; then
		echo -n "Overwrite \"$output\"? (Y/n) "
		read -n1 a
		if [ -n "$a" ] ; then echo "" ; fi
		if [ "X$a" = "Xn" ] || [ "X$a" = "XN" ] ; then
			return
		fi
	fi
	convert "$srcfile" -resize "x${s}" -transparent white "$output"
	if [ "$?" -ne 0 ] ; then
		echo "$script: failed convert \"$srcfile\" -resize \"x${s}\" \"$output\"" >&2
	fi
}

icoconvert() {
	output="$iconsdir/favicon.ico"
	if [ -e "$output" ] ; then
		echo -n "Overwrite \"$output\"? (Y/n) "
		read -n1 a
		if [ -n "$a" ] ; then echo "" ; fi
		if [ "X$a" = "Xn" ] || [ "X$a" = "XN" ] ; then
			return
		fi
	fi
	for s in 16 32 ; do
		output="$iconsdir/output-${s}x${s}.ico"
		if [ -e "$output" ] ; then
			echo -n "Overwrite \"$output\"? (Y/n) "
			read -n1 a
			if [ -n "$a" ] ; then echo "" ; fi
			if [ "X$a" = "Xn" ] || [ "X$a" = "XN" ] ; then
				continue
			fi
		fi
		convert "$srcfile" -resize "x$s" -gravity center -crop "${s}x${s}+0+0" -flatten -colors 256 -transparent white "$output"
		if [ "$?" -ne 0 ] ; then
			echo "$script: failed convert \"$srcfile\" -resize \"x$s\" -gravity center -crop \"${s}x${s}+0+0\" -flatten -colors 256 \"$output\"" >&2
		fi
	done
	output="$iconsdir/favicon.ico"
	if [ -e "$output" ] ; then
		echo -n "Overwrite \"$output\"? (Y/n) "
		read -n1 a
		if [ -n "$a" ] ; then echo "" ; fi
		if [ "X$a" = "Xn" ] || [ "X$a" = "XN" ] ; then
			for s in 16 32 ; do
				output="$iconsdir/output-${s}x${s}.ico"
				rm "$output" 2>/dev/null
			done	
			return
		fi
	fi
	convert "$iconsdir/output-16x16.ico" "$iconsdir/output-32x32.ico" -transparent white "$output"
	if [ "$?" -ne 0 ] ; then
		echo "$script: failed convert \"$iconsdir/output-16x16.ico\" \"$iconsdir/output-32x32.ico\" \"$output\"" >&2
	fi
	for s in 16 32 ; do
		output="$iconsdir/output-${s}x${s}.ico"
		rm "$output" 2>/dev/null
	done	
}

for s in 120 152 167 180 ; do
	doconvert "apple-icon" "$s"
done

icoconvert
for s in 16 32 96 ; do
	doconvert "favicon" "$s"
done

for s in 128 192 256 384 512 ; do
	doconvert "icon" "$s"
done

doconvert "ms-icon" "144"

doconvert "app-logo" "128"

output="`realpath $iconsdir/../app-logo-128x128.png`"
echo -n "Copy to \"$output\"? (Y/n) "
read -n1 a
if [ -n "$a" ] ; then echo "" ; fi
if [ "X$a" != "Xn" ] && [ "X$a" != "XN" ] ; then
	if [ -e "$output" ] ; then
		echo -n "Overwrite \"$output\"? (Y/n) "
		read -n1 a
		if [ -n "$a" ] ; then echo "" ; fi
		if [ "X$a" != "Xn" ] && [ "X$a" != "XN" ] ; then
			cp "$iconsdir/app-logo-128x128.png" "$output"
		fi
	fi
fi

output="$iconsdir/safari-pinned-tab.svg"
if [ -e "$output" ] ; then
	echo -n "Overwrite \"$output\"? (Y/n) "
	read -n1 a
	if [ -n "$a" ] ; then echo "" ; fi
	if [ "X$a" = "Xn" ] || [ "X$a" = "XN" ] ; then
		exit 0
	fi
fi
cp -a "$srcfile" "$output"