2010-04-12 5 views
5

적합한 배경색과 맨 위에 올 텍스트의 색상을 계산하는 이유를 찾고 있습니다. 분명히 가독성과 접근성을 고려해야합니다.PHP를 사용하여 적절한 배경색/전경색 선택

배열에서 두 가지 색상을 선택해야합니다. 색상은 16 진수 표현으로 저장됩니다.

#CC9966 
#996633 
#FFCC99 
#CCCC99 
#000000 
#333333 
#666633 
#663333 
#CC9933 
#FFCCCC 

GD/imageMagick과 같은 PHP 라이브러리를 사용할 수 있습니까?

어떤 제안

,

답변

2

우선이 훌륭한 블로그 게시물 Particletree을 살펴 봐야한다고 생각합니다. 말했다되고 그건

, 당신의 특정 요구를 해결하기 위해 자신의 smarty_modifier_contrast() 함수를 사용하고 그것을 조금 수정하는 것, 무엇인가 :

function color_contrast($bgcolor, $color1, $color2, $color3, ...) 
{ 
    return (hexdec($bgcolor) > 0xffffff/2) ? min(array_slice(func_get_args(), 1)) : max(array_slice(func_get_args(), 1)); 
} 

그래서 당신은 단지에 대한 어떤 임의의 색상을 사용해야합니다 배경 (#!)을 놓은 다음 다른 모든 색상을 배열에 전달하는 것을 잊지 마십시오.이 경우 가변 개수의 인수를 사용했지만 변경할 수 있습니다. 색상 배열 -에 따라 가장 어둡거나 가장 밝은 색상을 자동으로 선택합니다.가독성을 위해 충분히 좋은 대조 제공 :

function color_contrast($bgcolor, $colors = array()) 
{ 
    return (hexdec($bgcolor) > 0xffffff/2) ? min($colors) : max($colors); 
} 

내가 포화 또는 휘도 같이이 작업을하는 데 도움이되는 두 번째 기능 전에 말했듯이 당신은 무작위로 그것을 할 수 있고, $bgcolor 선택하려면를 , 그것은 당신이 찾고있는 것에 달려 있습니다.

0

브레이크의 RGB 구성 요소로 각 색상 (내가 PHP를 사용하고 있습니다) 0xFF로, 각 마스크를 (아마도 또는 다른 유사한 값, 0x66) 0x80으로 추가하고 가장 가까운 값을 찾을 수 테이블에.

+0

$ newRed = (($ rgb [ 'red'] + 0x80) * 0xFF)와 같은 의미입니까? 여기서 $ rgb [ 'red']는 실제로 163 – Lizard

+0

'& 0xff'와 같은 형태입니다. 하지만 그렇습니다. –

1

임의의 색상을 선택하는 것은 일반적으로 가독성과 접근성을 고려할 때 좋지 않으므로 디자인을 다시 생각해 보시기 바랍니다. 또는 적어도 텍스트를 흑백으로 제한하십시오.

이것이 옵션이 아니라면 색상 사이의 시각적 차이와 거의 같을 정도로 두 가지 색상 사이의 거리를 계산하여 가독성과 관련이 있다고 생각해보십시오.

나는 distance = abs(2*(r1-r2) + 3*(g1-g2) + (b1-b2))을 사용하고, 충분히 먼 거리가없는 조합은 걸러냅니다. 이렇게하면 밝은 배경의 어두운 색이나 어두운 배경의 밝은 색이 될 수 있습니다. 이는 가독성을 높이기위한 전제 조건이며, 색맹 인 사람들도 두 가지 명확한 색조를 보입니다. 색상 구성 요소는 전체 인식 된 밝기에 다른 영향을주기 때문에 다르게 가중됩니다.

관련 문제