2010-03-05 24 views
0

permet de dire que j'ai les valeurs RVB suivantes:PHP travail sur la saturation des couleurs

R: 129 G: 98 B: 87

Photoshop indique la saturation de cette couleur est de 33%

Comment pourrais-je calculer ce pourcentage en utilisant PHP et les valeurs RVB?

+0

http://stackoverflow.com/questions/1773698/rgb-to-hsv-in-php – oops

Répondre

3

Voir RGB to HSV in PHP

Prendre seulement les bits de saturation de ce code, et la conversion en pourcentage:

function saturation($R, $G, $B) { // 0-255 
    $Min = min($R, $G, $B); 
    $Max = max($R, $G, $B); 
    return $Max == 0 ? 0 : (($Max - $Min)/$Max) * 100; 
} 

Alternativement, vous pouvez utiliser le code d'origine dans le lien ci-dessus - le HSV valeurs renvoyées sont entre 0.0 et 1.0, il suffit donc de multiplier la valeur de saturation par 100 pour obtenir votre pourcentage.

+0

Parfait :) Merci de le réécrire beaucoup plus petit, en l'exécutant à chaque itération d'une boucle 600 * 600: P – Ozzy

+0

Cela donne des résultats inexacts si 255 n'est pas l'une des valeurs passées, et des erreurs si noir (' 0,0,0') est passé. Fonctionne très bien si vous changez l'instruction de retour à: 'return $ Max? (($ Max - $ Min)/255): 0; ' –

+0

Merci, j'ai corrigé la division par zéro. Cependant, je ne suis pas sûr pourquoi le deuxième '$ Max' devrait être remplacé par 255, ce n'est pas dans n'importe quel autre code que je peux voir? – rjh

0

PEAR (PHP Extensions And Application Repository) a un joli paquet appelé Image_Color2 qui vous permet de faire des conversions rapides entre les différents modèles de couleur:

include "Image/Color2.php"; 

$color = new Image_Color2(array(129,98,87)); 
$hsv = $color->convertTo('hsv'); 
$hsvArray = $hsv->getArray(); 

echo "Hue is " . $hsvArray[0] . "\n"; 
echo "Saturation is: " . $hsvArray[1] . "\n"; 
echo "Brightness is: " . $hsvArray[2];