ジェレミーの応答をここで処理します: 16進数の色をRGBに変換、またはその逆 pythonプリセット色の16進数コードを変換するプログラム(例#B4FBB8)を取得できましたただし、エンドユーザーの観点から、コードを編集してそこから実行するように人々に依頼することはできません。
これまでのコードは次のとおりです。
_def hex_to_rgb(value):
value = value.lstrip('#')
lv = len(value)
return Tuple(int(value[i:i + lv // 3], 16) for i in range(0, lv, lv // 3))
def rgb_to_hex(rgb):
return '#%02x%02x%02x' % rgb
hex_to_rgb("#ffffff") # ==> (255, 255, 255)
hex_to_rgb("#ffffffffffff") # ==> (65535, 65535, 65535)
rgb_to_hex((255, 255, 255)) # ==> '#ffffff'
rgb_to_hex((65535, 65535, 65535)) # ==> '#ffffffffffff'
print('Please enter your colour hex')
hex == input("")
print('Calculating...')
print(hex_to_rgb(hex()))
_
行print(hex_to_rgb('#B4FBB8'))
を使用して、正しいRGB値(180、251、184)を吐き出すことができます
それはおそらく非常にシンプルです-私はまだPythonでかなり荒いです。
私はこれがあなたが探していることをしていると信じています:
h = input('Enter hex: ').lstrip('#')
print('RGB =', Tuple(int(h[i:i+2], 16) for i in (0, 2, 4)))
(上記はPython 3)について書かれたものです)
サンプル実行:
Enter hex: #B4FBB8
RGB = (180, 251, 184)
書式を保持しながらハンドルfhandle
を使用してファイルに書き込むには:
fhandle.write('RGB = {}'.format( Tuple(int(h[i:i+2], 16) for i in (0, 2, 4)) ))
遅延オプション: webcolors パッケージにはhex_to_rgb
関数。
ここには2つの小さなエラーがあります!
_hex == input("")
_
する必要があります:
_user_hex = input("")
_
比較をチェックせずに、input()
の出力をhex
に割り当てます。また、コメント(@koukouviou)で述べたように、hex
をオーバーライドせず、代わりに_user_hex
_のような名前を付けます。
また:
_print(hex_to_rgb(hex()))
_
する必要があります:
_print(hex_to_rgb(user_hex))
_
型の呼び出し可能メソッド(___call__
_)ではなく、hexの値を使用する必要があります。
私が見たすべての答えには、16進文字列の操作が含まれます。私の見解では、文字列だけでなく、エンコードされた整数とRGBトリプル自体を使用したいと思います。これには、色を16進数で表す必要がないという利点があります。つまり、8進数、2進数、10進数などの色を使用できます。
RGBトリプルを整数に変換するのは簡単です。
rgb = (0xc4, 0xfb, 0xa1) # (196, 251, 161)
def rgb2int(r,g,b):
return (256**2)*r + 256*g + b
c = rgb2int(*rgb) # 12909473
print(hex(c)) # '0xc4fba1'
反対方向の計算がもう少し必要です。同様の 数学交換の質問 への私の答えから、以下を取り上げました。
c = 0xc4fba1
def int2rgb(n):
b = n % 256
g = int( ((n-b)/256) % 256 ) # always an integer
r = int( ((n-b)/256**2) - g/256 ) # ditto
return (r,g,b)
print(Tuple(map(hex, int2rgb(c)))) # ('0xc4', '0xfb', '0xa1')
このアプローチを使用すると、文字列との間で簡単に変換できます。
フロート版:
def hextofloats(h):
return [int(h[i:i + 2], 16) / 255. for i in (1, 3, 5)] # skip '#'
def floatstohex(rgb):
return f'#{int(rgb[0]*255):02x}{int(rgb[1]*255):02x}{int(rgb[2]*255):02x}'