在UNIX shell脚本中将十六进制颜色转换为十进制RGB值

问题描述 投票:4回答:3

我敢肯定有人已经解决了这个问题:什么是一种简单易用的方法,可以将十六进制颜色值(从000000到FFFFFF)转换为从0到255的3个十进制值。(如果你不熟悉颜色的方式)传统上用HTML表示,前两个十六进制数字是第一个十进制数字,依此类推。)

shell hex decimal rgb
3个回答
8
投票
$ 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
投票

您可以使用以下脚本:

#!/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
投票
#!/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"
© www.soinside.com 2019 - 2024. All rights reserved.