You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.1 KiB
Bash
67 lines
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
###
|
|
# Consumes a given image to convert it to ICO
|
|
# @param Path to the input file
|
|
###
|
|
function convertToIco {
|
|
imageWidth=$(identify -ping -format '%w ' "${1}" | awk -F' ' '{ print $NF }')
|
|
imageHeight=$(identify -ping -format '%h ' "${1}" | awk -F' ' '{ print $NF }')
|
|
|
|
if [ ${imageWidth} -lt 64 ] || [ ${imageHeight} -lt 64 ]; then
|
|
echo "Warning: Favicon is only ${imageWidth}x${imageHeight}, it'll probably look pixely"
|
|
fi
|
|
|
|
mimeType=$(file -bi "${1}")
|
|
if [ $? -eq 0 ] && ! grep -qE "^image/vnd.microsoft.icon" <<< "${mimeType}"; then
|
|
if convert "${1}" -resize "64x64" "$(dirname "${1}")/$(basename "${1}" ".${1##*.}").ico"; then
|
|
rm "${1}"
|
|
else
|
|
return 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
###
|
|
# Tries to download the favicon of a website
|
|
# @param URL of the website
|
|
# @param Filename of the downloaded ico file
|
|
###
|
|
function fetchFavicon {
|
|
domain=$(awk -F'/' '{ print $3 }' <<< "${1}")
|
|
protoAndDomain=$(awk -F'/' '{ print $1"//"$3 }' <<< "${1}")
|
|
|
|
echo "Fetching favicon for ${protoAndDomain}"
|
|
|
|
faviconUrl=$(curl -s -L "${1}" | grep -E '<link.*rel="icon"' | sed 's/.*href="\([^"]*\)".*/\1/' 2>/dev/null)
|
|
if [ $? -eq 0 ] && [ "${faviconUrl}" != "" ]; then
|
|
if ! grep -E "https?://" <<< "${faviconUrl}"; then
|
|
faviconUrl="${protoAndDomain}${faviconUrl}"
|
|
fi
|
|
|
|
mimeType=$(curl -Lso "${2}" -w "%{content_type}" "${faviconUrl}")
|
|
if [ $? -eq 0 ] && grep -E '^image/' <<< "${mimeType}"; then
|
|
echo "Success using link tag method"
|
|
convertToIco "${2}"
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
curlOut=($(curl -Lso "${2}" -w '%{http_code} %{content_type}' "${protoAndDomain}/favicon.ico"))
|
|
if [ $? -eq 0 ] && [ "${curlOut[0]}" = "200" ] && grep -qE '^image/' <<< "${curlOut[1]}"; then
|
|
echo "Success using /favicon.ico method"
|
|
convertToIco "${2}"
|
|
return 0
|
|
fi
|
|
|
|
curlOut=($(curl -Lso "${2}" -w '%{http_code} %{content_type}' "https://www.google.com/s2/favicons?domain=${domain}&sz=64"))
|
|
if [ $? -eq 0 ] && [ "${curlOut[0]}" = "200" ] && grep -qE '^image/' <<< "${curlOut[1]}"; then
|
|
echo "Success using Google Favicons API"
|
|
convertToIco "${2}"
|
|
return 0
|
|
fi
|
|
|
|
echo "Failed. You'll have to supply your own icon file at:"
|
|
echo " ${2}"
|
|
}
|