Hi,

I am looking for the algorthim for converting rgb to hsv values. Does anyone know of any program or algorithm in php??

thanks in advance,
tris

I wrote this for ya. Values from the function matched with what I get in Photoshop 5. I'm not sure how I know this, but H is out of 360 degrees, and S and V are a percentage. (incase you wondered about my output formula)

<?
RGBtoHSV(110,143,176);

function RGBtoHSV($red, $green, $blue)
{
	$r = $red / 255.0;
	$g = $green / 255.0;
	$b = $blue / 255.0;
	$H = 0;
	$S = 0;
	$V = 0;
	$min = min(min($r, $g),$b);
	$max = max(max($d, $g),$b);
	$delta = $max - $min;
	
	$V = $max;
	
	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;
	}
	echo "H: ".($H*360)."<br>";
	echo "S: ".($S*100)."<br>";
	echo "V: ".($V*100)."<br>";
}
?>

Hi Phaelax,

thanks for your code, i will try it and tell you what's the results.

Appreciate lots,

tristan

just copy pste this coe. and first you create folder name as photo..

<?php
ob_start();

extract($_POST);
//echo $photo;exit;
if($_POST)
{
$img_name=$_FILES["photo"]["name"];  //photo input field
$randomizer = rand(0000, 9999);
    $file_name = $randomizer.$img_name;
move_uploaded_file($_FILES["photo"]["tmp_name"], "photo/" . $file_name); //create photo folder	

				
			
$path1="photo"; 
		
		$source_file = $path1."/".$file_name; 


$im = ImageCreateFromJpeg($source_file);

$imgw = imagesx($im);
$imgh = imagesy($im);

for ($i=0; $i<$imgw; $i++)
{
        for ($j=0; $j<$imgh; $j++)
        {
       
                // get the rgb value for current pixel
               
                $rgb = ImageColorAt($im, $i, $j);
               
                // extract each value for r, g, b
               
                $rr = ($rgb >> 16) & 0xFF;
                $gg = ($rgb >> 8) & 0xFF;
                $bb = $rgb & 0xFF;
               
                // get the Value from the RGB value
               
                $g = round(($rr + $gg + $bb) / 3);
               
                // grayscale values have r=g=b=g
               
                $val = imagecolorallocate($im, $g, $g, $g);
               
                // set the gray value
               
                imagesetpixel ($im, $i, $j, $val);
        }
}

header('Content-type: image/jpeg');
imagejpeg($im);
}
?>
<html>
<head>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<table>
<tr>
<td>upload image
<input type="file" name="photo" />
<input type="submit" name="submit" value="submit" />
</td>
</tr>
</table>
</form>
</body>
</html>

The script works, but you have a typo in your example:

<?
function RGBtoHSV($red, $green, $blue)
{
	$min = min(min($r, $g),$b);
	$max = max(max($d, $g),$b);

The $max variable should read $max = max(max($r, $g),$b). You have a $d in there. So it should read like this:

<?
function RGBtoHSV($red, $green, $blue)
{
	$min = min(min($r, $g),$b);
	$max = max(max($r, $g),$b);

Cheers.

This article has been dead for over six months. Start a new discussion instead.