34 lines
661 B
Bash
Executable File
34 lines
661 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -ueo pipefail
|
|
#set -x
|
|
|
|
darker_channel() {
|
|
value="$1"
|
|
light_delta="$2"
|
|
result="$(bc <<< "ibase=16; $value - $light_delta")"
|
|
if [[ "$result" -lt 0 ]]; then
|
|
result=0
|
|
fi
|
|
if [[ "$result" -gt 255 ]]; then
|
|
result=255
|
|
fi
|
|
echo "$result"
|
|
}
|
|
|
|
darker() {
|
|
hexinput="$(tr '[:lower:]' '[:upper:]' <<< "$1")"
|
|
light_delta="${2-10}"
|
|
|
|
a="$(cut -c-2 <<< "$hexinput")"
|
|
b="$(cut -c3-4 <<< "$hexinput")"
|
|
c="$(cut -c5-6 <<< "$hexinput")"
|
|
|
|
r="$(darker_channel "$a" "$light_delta")"
|
|
g="$(darker_channel "$b" "$light_delta")"
|
|
b="$(darker_channel "$c" "$light_delta")"
|
|
|
|
printf '%02x%02x%02x\n' "$r" "$g" "$b"
|
|
}
|
|
|
|
darker "$@"
|