6

RGB 値: があった場合、と255, 165, 0の類似色を計算するにはどうすればよいでしょうか。218, 255, 0255, 37, 0

例えば:

>>> to_analogous(0, 218, 255)
[(0, 255, 165),(0, 90, 255)]

編集: 簡単にするために、類似の色を次のように表示できます。緑が入力色で、青緑と黄緑が出力です: (ソース: tigercolor.com )

4

1 に答える 1

11

RGB から HSL への変換と +/- 30 度の回転は実際に必要なことかもしれませんが、カラー ホイールは表示されません。純粋な赤 (上部) から始めて、それぞれ 12 色と 128 色を取得すると、次のようになります。

ここに画像の説明を入力 ここに画像の説明を入力

そして、類似色を生成するサンプルコードは次のとおりです。

import colorsys

DEG30 = 30/360.
def adjacent_colors((r, g, b), d=DEG30): # Assumption: r, g, b in [0, 255]
    r, g, b = map(lambda x: x/255., [r, g, b]) # Convert to [0, 1]
    h, l, s = colorsys.rgb_to_hls(r, g, b)     # RGB -> HLS
    h = [(h+d) % 1 for d in (-d, d)]           # Rotation by d
    adjacent = [map(lambda x: int(round(x*255)), colorsys.hls_to_rgb(hi, l, s))
            for hi in h] # H'LS -> new RGB
    return adjacent

もう一方のカラー ホイールは、減法混色システムを考慮して得られました。そのために、簡単にするために RYB 色空間を考えてみましょう (これは、一般的な学校の美術の授業でおそらく学んだ色の混合を表しています)。それを使用すると、すぐに次のホイールが得られます。

ここに画像の説明を入力 ここに画像の説明を入力

これらの類似色を取得するには、RGB の色が RYB の色を直接表すと見なし、RYB から RGB に変換します。たとえば、RGB にトリプル (255、128、0) があるとします。そのトリプルを RYB トリプルと呼び、RGB に変換して (255, 64, 0) を取得します。この RYB -> RGB 変換は、複数の定義が存在する可能性があるという意味で一意ではありません。Gosset と Chen による「Paint Inspired Color Compositing」のものを使用しました。変換を実行するコードは次のとおりです。

def _cubic(t, a, b):
    weight = t * t * (3 - 2*t)
    return a + weight * (b - a)

def ryb_to_rgb(r, y, b): # Assumption: r, y, b in [0, 1]
    # red
    x0, x1 = _cubic(b, 1.0, 0.163), _cubic(b, 1.0, 0.0)
    x2, x3 = _cubic(b, 1.0, 0.5), _cubic(b, 1.0, 0.2)
    y0, y1 = _cubic(y, x0, x1), _cubic(y, x2, x3)
    red = _cubic(r, y0, y1)

    # green
    x0, x1 = _cubic(b, 1.0, 0.373), _cubic(b, 1.0, 0.66)
    x2, x3 = _cubic(b, 0., 0.), _cubic(b, 0.5, 0.094)
    y0, y1 = _cubic(y, x0, x1), _cubic(y, x2, x3)
    green = _cubic(r, y0, y1)

    # blue
    x0, x1 = _cubic(b, 1.0, 0.6), _cubic(b, 0.0, 0.2)
    x2, x3 = _cubic(b, 0.0, 0.5), _cubic(b, 0.0, 0.0)
    y0, y1 = _cubic(y, x0, x1), _cubic(y, x2, x3)
    blue = _cubic(r, y0, y1)

    return (red, green, blue)
于 2013-01-02T03:27:53.247 に答える