Преобразование шестнадцатеричного цвета в десятичные значения RGB в сценарии оболочки UNIX - PullRequest
4 голосов
/ 31 августа 2011

Я уверен, что кто-то уже решил эту проблему: какой простой и переносимый способ преобразовать шестнадцатеричное значение цвета (от 000000 до FFFFFF) в 3 десятичных значения от 0 до 255. (Если вы не знакомы с тем, как цвета традиционно представлены в HTML, первые две шестнадцатеричные цифры - это первое десятичное число и т. д.)

Ответы [ 3 ]

8 голосов
/ 31 августа 2011
$ cat hexrgb.sh
#!/bin/bash
hex="11001A"
printf "%d %d %d\n" 0x${hex:0:2} 0x${hex:2:2} 0x${hex:4:2}

$ ./hexrgb.sh
17 0 26

Если вы не хотите использовать bash для раскрытия подстроки, я все равно буду использовать printf для преобразования.

5 голосов
/ 31 августа 2011

Вы можете использовать скрипт как:

#!/bin/sh
# hextorgb.sh
hexinput=`echo $1 | tr '[:lower:]' '[:upper:]'`  # uppercase-ing
a=`echo $hexinput | cut -c-2`
b=`echo $hexinput | cut -c3-4`
c=`echo $hexinput | cut -c5-6`

r=`echo "ibase=16; $a" | bc`
g=`echo "ibase=16; $b" | bc`
b=`echo "ibase=16; $c" | bc`

echo $r $g $b
exit 0

и используйте его как:

./hextorgb.sh "11001A"

в результате получается как:

17 0 26

Его можно улучшить, проверяя аргументы и т. Д., Но он делает то, что вам нужно.

0 голосов
/ 26 апреля 2019
#!/usr/bin/env bash

hex2rgb() {
    hex=$(echo "${1^^}" | sed 's/#//g')

    a=$(echo $hex | cut -c-2)
    b=$(echo $hex | cut -c3-4)
    c=$(echo $hex | cut -c5-6)

    r=$(echo "ibase=16; $a" | bc)
    g=$(echo "ibase=16; $b" | bc)
    b=$(echo "ibase=16; $c" | bc)

    echo ${1^^}
    echo $r $g $b
}

hex2rgb "#FF0000"
hex2rgb "#00FF00"
hex2rgb "#0000FF"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...