문제

아무도 RGB 색상에서 포화 수준을 얻을 수있는 올바른 수식을 알고 있습니까?

이미 기능을 수행하는 기능이 있습니다. 나는 인터넷에 게시 된로드를 시도했지만, 이것은 때로는 포화 수준이 가끔씩 약간 떨어져있는 것과는 별도로 나를 위해 일하는 것처럼 보였습니다.

rgb(204,153,51)hsl(40,60,50)와 같아야합니다. 대신 hsl(40,75,50)가 있습니다. 내 색조와 가벼움이 올바른지, 사실, 채도가 대부분이 정확하지만 때로는 그렇지 않아도 될 수 있습니다. 를 해결해야합니다.

이것은 지금까지 지어진 것입니다. 그래서 모든 색상 값이 내 이미지에 대해 올바른지 확인할 수 있습니다.

여기에 이미지 설명

이는 포화도가 잘못 계산되는 것으로 믿는 것으로 믿는 부분의 기능입니다.

function RGBtoHSL($red, $green, $blue)
{
    $r = $red / 255.0;
    $g = $green / 255.0;
    $b = $blue / 255.0;
    $H = 0;
    $S = 0;
    $V = 0;

    $min = min($r,$g,$b);
    $max = max($r,$g,$b);
    $delta = ($max - $min);

    $L = ($max + $min) / 2.0;

    if($delta == 0) {
        $H = 0;
        $S = 0;
    } else {
        $S = $delta / $max;

        $dR = ((($max - $r) / 6) + ($delta / 2)) / $delta;
        $dG = ((($max - $g) / 6) + ($delta / 2)) / $delta;
        $dB = ((($max - $b) / 6) + ($delta / 2)) / $delta;

        if ($r == $max)
            $H = $dB - $dG;
        else if($g == $max)
            $H = (1/3) + $dR - $dB;
        else
            $H = (2/3) + $dG - $dR;

        if ($H < 0)
            $H += 1;
        if ($H > 1)
            $H -= 1;
    }
    $HSL = ($H*360).', '.($S*100).', '.round(($L*100),0);
    return $HSL;
}
.

하나의 단서가있는 이유가 100 % 작동하지 않는 이유는 처음으로 16 진수 색을 RGB로 변환 한 다음 RGB를 HSL로 변환합니다. 이것은 웹 안전 색상으로 인한 문제가 되거나이 기능을 사용하면 다른 것을 발견 할 수 있습니까? 또는 이것이 그것이 어떻게되는지,

업데이트 1

다른 이미지를 시도하면 주로 채도가 약간 떨어져있는 색상 (약) 색상으로 표시됩니다. 색상 선택기를 사용하면 채도 막대를 움직이는 위치로 이동하면 큰 차이가 없으므로 내 검색 기능이 너무 많이 픽업되지 않을 것입니다. 그것을 해결하는 것이 좋을 것입니다. 50 만 개의 사진에서 실행하십시오.

수정

omnipotentity 덕분에 아래, 아래의 조각을 누락 한 것으로 알아 차렸다. 나는 바뀌었다 :

$S = $delta / $max;
.

to :

$S = $L > 0.5 ? $delta / (2 - $max - $min) : $delta / ($max + $min);
.

이제는 100 % 정확한 결과를 생성합니다.

친화적 인 메모

아무도이 컬러 테이블을 생성하기 위해 코드를 원한다면, 그냥 물어보십시오.

도움이 되었습니까?

해결책

LUMA가> .5 여기 에이 JavaScript HSL 코드 에서 표시됩니다.

var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top