首頁 > 後端開發 > Golang > 我們如何透過演算法找到兩種給定油漆顏色之間的中間顏色?

我們如何透過演算法找到兩種給定油漆顏色之間的中間顏色?

Mary-Kate Olsen
發布: 2024-12-01 16:08:13
原創
210 人瀏覽過

How Can We Algorithmically Find the Intermediate Color Between Two Given Paint Colors?

在繪製的色彩空間中尋找兩個其他顏色之間的演算法

使用油漆時,混合不同的色調會產生與數位不同的變化RGB 顏色模型的領域。在物理顏料的世界中,顏色被吸收或反射而不是發射,從而產生獨特的混合結果。

吸收概念

顏料吸收在混合過程中。例如,「藍色」塗料吸收紅色和綠色波長,導致僅反射藍光。同樣,黃色塗料吸收藍色波長,僅反射黃光。

塗料顏色混合的挑戰

理論上,組合黃色和藍色塗料應該產生黑色或泥灰色。然而,實際的限制,例如油漆中的雜質,通常會導致渾濁的綠色色調。透過混合藍色和黃色來創造令人滿意的綠色是繪畫中的常見挑戰。

HLS 色彩空間中的顏色插值

雖然物理模擬油漆混合可能不可行,可以使用HSL(色調、飽和度、亮度)色彩空間插入顏色以獲得所需的色調。 HSL 根據顏色的固有屬性來表示顏色,使其更容易操作和混合。

Python 實作

以下 Python 程式碼示範了 HLS 色彩空間中的色彩平均:

from colorsys import rgb_to_hls, hls_to_rgb
from math import sin, cos, atan2, pi

def average_colors(rgb1, rgb2):
    # Convert RGB values to HLS
    h1, l1, s1 = rgb_to_hls(rgb1[0]/255., rgb1[1]/255., rgb1[2]/255.)
    h2, l2, s2 = rgb_to_hls(rgb2[0]/255., rgb2[1]/255., rgb2[2]/255.)

    # Calculate average saturation and lightness
    s = 0.5 * (s1 + s2)
    l = 0.5 * (l1 + l2)

    # Calculate average hue (considering hue wrapping)
    x = cos(2*pi*h1) + cos(2*pi*h2)
    y = sin(2*pi*h1) + sin(2*pi*h2)
    if x != 0.0 or y != 0.0:
        h = atan2(y, x) / (2*pi)
    else:
        h = 0.0
        s = 0.0

    # Convert HLS back to RGB
    r, g, b = hls_to_rgb(h, l, s)
    return (int(r*255.), int(g*255.), int(b*255.))
登入後複製

範例用法

>>> average_colors((255,255,0),(0,0,255))
(0, 255, 111)
>>> average_colors((255,255,0),(0,255,255))
(0, 255, 0)
登入後複製

注意:此實作不會複製油漆混合過程,而是提供令人愉悅的顏色插值。

以上是我們如何透過演算法找到兩種給定油漆顏色之間的中間顏色?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板