2013-04-10 5 views
1

나는 헤더 변경 색상을 매일 만들기 위해 노력하고 있으며 임의의 색상을 사용하여 이것을 만들려고했습니다. 헤더에는 2 가지 색상이 있으며 나는 그들을 무료 색상으로 만들고 있습니다. 첫 번째 색상은 무작위로 생성되고, 두 번째 색상은 Hue via 150 '을 변경하여 수정됩니다. 문제는 특정 색상을 선택했을 때, 너무 선명하거나 어두울 수있는 경우입니다. 나는 약간의 밝기 값을 제어 할 수 있도록 점검을 실행하고 있지만 너무 밝은 (예 : 극단적 인 노란색) 색상은 여전히 ​​있습니다. 나는 아래에 나의 코드를 게시 할 것이다. 어떤 도움이나 제안도 환영합니다! 감사!무작위로 PHP로 색상을 생성

// grab a random color on hue 
$h = rand(0,360); 

// color values 50-120 tend to be extremely bright, 
// make adjustments to the S and L accordingly 
// a better solution is available? 
if ($h > 50 && $h < 120) { 
    $s = rand(60,80); 
    $l = rand(30,50); 
} else { 
    $s = rand(60,90); 
    $l = rand(38,63); 
} 

// declare string to place as css in file for primary color   
$randomColor = "hsl(". $h .",". $s ."%,". $l ."%)"; 

// declare degree for secondary color (30 = analogous, 150 = complimentary) 
$degree = 150; 

// point to secondary color randomly on either side of chart   
$bool = rand(0,1); 
if ($bool) { 
    $x = $degree; 
} else { 
    $x = -$degree; 
} 

// set value of the new hue 
$nh = $h + $degree; 

// if the new hue is above 360 or below 0, make adjustments accordingly 
if ($nh > 360) { 
    $nh -= 360; 
} 
if ($nh < 0) { 
    $nh = 360 - $nh; 
} 

// set the secondary color 
$secondaryColor = "hsl(". abs($h + $x) .",". $s ."%,". $l ."%)"; 

이것은 매우 간단하고 확실한 방법이 있습니다. 나는 주변을 둘러 보았지만, 내가 발견 한 모든 것은 기본적인 공식이 색조 등의 학위를 거친 것입니다. 다시 한번 감사드립니다!

+5

왜 그냥 사용하지 않는 색상 값 배열 및 array_rand() 사용 – Oussama

+0

색상 이론이 훌륭하지 않지만 H/S/L 색상 공간에서 색상이 너무 밝거나 어두울 까봐 걱정된다면 L 값에 상한과 하한을 넣었습니까? – Sammitch

답변

1

이것은 실제로보기에 적합한 색상의 문제입니다. 이것은 확실히 최적의 솔루션 아니지만 (당신도 그것에 대해 신경 경우는, 또한 원본보다 약간 더 임의의) 적어도 읽을 수있는 접근 방식 :

function randColor() { 
    return array(rand(0,360), rand(0,100), rand(0,100)); 
} 

function isAcceptableColor($colorArr) { 
    // return true if the color meets your criteria 
} 

do { 
    $color = randColor(); 
} while (! isAcceptableColor($color)); 
+0

'while (! isAcceptableColor ($ color))'을 의미 할거라 확신합니다. – nibra

+0

나는 확실히 할 :) 만약 내가'isAcceptableColor' 메서드에 그 주석을 넣지 않았다면 나는 아마도 "함수에 의해 반환되는 것에 달려있다"라는 핑계를 벗어날 수 있었지만 나를 잡았다. 감사 –