Skip to content

Instantly share code, notes, and snippets.

@Phlow
Last active September 18, 2024 13:26
Show Gist options
  • Save Phlow/ede770e58059d7b8cc7a26c7e0c1a36d to your computer and use it in GitHub Desktop.
Save Phlow/ede770e58059d7b8cc7a26c7e0c1a36d to your computer and use it in GitHub Desktop.
Favicon Generator: Generate favicons on Mac OSX via bash/shell with the help of sips command. Than optimize the images with ImageOptim (App)
#!/bin/sh
#
# Dieses Script fragt nach einer Bildatei, die dann in die
# verschiedenen Favicon-Größen mittels sips-Kommandos
# umgewandelt werden. Ist auf dem Rechner das Programm
# ImageOptim installiert, dann werden die Bilddateien
# anschließend verlustlos optimiert.
# Farbvariablen für formatierte Ausgabe
reset='\033[0m'
red='\033[0;31m'
clear
echo "-----------------------------------------------------"
echo "FAVICONMAKER for MAC V 1.0"
echo "-----------------------------------------------------"
# Abfrage: Dateiname
read -p "$(echo -e "Wenn die Datei favicon.png heißt, Enter drücken,\nsonst Dateinamen ohne Endung eingeben › ")" dateiname
echo ""
# Standardwert für Dateiname setzen
dateiname=${dateiname:-favicon}
# Abfrage: Bildformat (png oder jpg)
read -p "$(echo -e "Bildformat (jpg/png)? (Wenn png, Enter drücken) › ")" format
# Standardwert für Format setzen und Überprüfung
format=${format:-png}
if [[ "${format}" != "png" && "${format}" != "jpg" ]]; then
echo -e "${red}Ungültiges Format. Nur jpg oder png sind erlaubt.${reset}"
exit 1
fi
# Vollständiger Dateiname
favname="${dateiname}.${format}"
# Überprüfen, ob die Datei existiert
if [[ ! -f "${favname}" ]]; then
echo -e "${red}Fehler: Die Datei ${favname} existiert nicht im aktuellen Verzeichnis.${reset}"
echo -e "Stelle sicher, dass der Dateiname korrekt ist und die Datei im richtigen Verzeichnis liegt."
exit 1
fi
# Bestätigung vom Benutzer einholen
echo -e "\nSoll ich ${favname} verarbeiten?"
while true; do
read -p "(j/n): " yn
case $yn in
[Jj]* ) break;;
[Nn]* ) echo -e "\nNa gut…"; exit;;
* ) echo "Bitte j oder n eingeben.";;
esac
done
# Ausgabe des finalen Dateinamens
echo "Verwende Datei: ${favname}"
echo ""
# Konvertierungsformat festlegen
convertformat=$([ "${format}" = "jpg" ] && echo "jpeg" || echo "png")
# Favicon Generator
sizes=(114 120 144 152 180 72 76 57 32 192)
for size in "${sizes[@]}"; do
outfile="apple-touch-icon-${size}x${size}-precomposed.${format}"
if sips -z ${size} ${size} -s format ${convertformat} "${favname}" --out "${outfile}" >/dev/null 2>&1; then
echo -e "Erstellt › ${outfile}"
else
echo -e "${red}Fehler beim Erstellen der Datei ${outfile}.${reset}"
fi
done
# Weitere Formate
sips -z 32 32 -s format ${convertformat} "${favname}" --out "favicon-32x32.${format}" >/dev/null 2>&1
echo -e "Erstellt: favicon-32x32.${format}"
sips -z 144 144 -s format ${convertformat} "${favname}" --out "msapplication_tileimage.${format}" >/dev/null 2>&1
echo -e "Erstellt: msapplication_tileimage.${format}"
sips -z 192 192 -s format ${convertformat} "${favname}" --out "touch-icon-192x192.${format}" >/dev/null 2>&1
echo -e "Erstellt: touch-icon-192x192.${format}"
# Bildoptimierung mit ImageOptim
if command -v /Applications/ImageOptim.app/Contents/MacOS/ImageOptim &> /dev/null; then
echo -e "\nOptimiere Bilder mit ImageOptim\n"
read -p "$(echo -e "Soll ich die Bilder mit ImageOptim optimieren? (j/n) › ")" optimize
if [[ "${optimize}" =~ ^[Jj]$ ]]; then
echo ""
for i in *.${format}; do
/Applications/ImageOptim.app/Contents/MacOS/ImageOptim "${i}" >/dev/null 2>&1
echo -e "Optimiert › ${i}"
done
else
echo -e "Bildoptimierung übersprungen."
fi
else
echo -e "\n${red}ImageOptim nicht gefunden. Stelle sicher, dass es installiert ist.${reset}"
fi
# Abschlussmeldung
echo ""
echo -e "Fertig!\n\n${reset}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment