| abstract |  |
This article provides two functions for converting HTML color (like #AAED43) to
three RGB values ($r = 170, $g = 237, $b = 67) and converting RGB values to HTML color.
| compatible |  |
First function, html2rgb recognizes HTML or CSS colors in format #(hex_red)(hex_green)(hex_blue),
where hex_red, hex_green and hex_blue are 1 or 2-digit hex-representations of red, green or blue color
components.
# character in the beginning can be omitted. Function returns array of three integers in range (0..255) or
false when it fails to recognize color format.
<?php
function html2rgb($color)
{
if ($color[0] == '#')
$color = substr($color, 1);
if (strlen($color) == 6)
list($r, $g, $b) = array($color[0].$color[1],
$color[2].$color[3],
$color[4].$color[5]);
elseif (strlen($color) == 3)
list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
else
return false;
$r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
return array($r, $g, $b);
}
?>
Second function, rgb2html converts its arguments (r, g, b) to hexadecimal html-color string #RRGGBB
Arguments are converted to integers and trimmed to 0..255 range. It is possible to call it with array argument
rgb2html($array_of_three_ints) or specifying each component value separetly rgb2html($r, $g, $b).
<?php
function rgb2html($r, $g=-1, $b=-1)
{
if (is_array($r) && sizeof($r) == 3)
list($r, $g, $b) = $r;
$r = intval($r); $g = intval($g);
$b = intval($b);
$r = dechex($r<0?0:($r>255?255:$r));
$g = dechex($g<0?0:($g>255?255:$g));
$b = dechex($b<0?0:($b>255?255:$b));
$color = (strlen($r) < 2?'0':'').$r;
$color .= (strlen($g) < 2?'0':'').$g;
$color .= (strlen($b) < 2?'0':'').$b;
return '#'.$color;
}
?>
Here is an example php-application which uses both of the functions: HTML Gradient Builder.
It takes two HTML-color values and draws 21 gradient-strips using HTML/CSS
<div style="background-color... > code.
<?php
// paste rgb2html and html2rgb functions here
?>
<html><head><title>HTML Gradient Builder </title></head><body>
<table><tr><td>
<form action="<?php echo $PHP_SELF?>">
<label for="source_color">Source color</label><br>
<input type="text" name="source_color" id="source_color" value="<?php
if (isset($_GET['source_color']))
echo $_GET['source_color'];
else
echo 'F0F';
?>">
<br>
<label for="dest_color">Destination color</label><br>
<input type="text" name="dest_color" id="dest_color" value="<?php
if (isset($_GET['dest_color']))
echo $_GET['dest_color'];
else
echo '0F0';
?>">
<br><br>
<input type="submit" value="draw gradient">
</form>
</td><td>
Try colors:
<ul>
<li>#000 - white</li>
<li>#00F - blue</li>
<li>#0F0 - green</li>
<li>#F00 - red</li>
</ul>
</td>
<td>
<ul><li>F0F - magenta</li>
<li>0FF - cyan</li>
<li>FF0 - yellow</li>
</ul>
</tr></table>
<?php
// if there source_color and dest_color parameters have passed to the script
if (isset($_GET['source_color']) && isset($_GET['dest_color']))
{
echo "<h1>Result:</h1>";
$src_color = html2rgb($_GET['source_color']);
$dst_color = html2rgb($_GET['dest_color']);
print_r($dst_color);
for($i=0; $i<3; $i++)
$step_color[$i] = ( $dst_color[$i] - $src_color[$i] ) / 20.0;
// step_color array contains difference between adjacent color stripes
$html_out = ''; // html code container
for($j=0; $j<21; $j++)
{
// generate color stripe code
$line = '<div style="background-color: '.rgb2html($src_color).';"> </div>';
$html_out .= "{$line}\n"; // save color stripe to display HTML code later
echo $line; // output color stripe to browser
for($i=0; $i<3; $i++) // incrementing each color component
$src_color[$i] += $step_color[$i];
}
}
?>
<h1>HTML Code:</h1>
<pre><?php
// output HTML code replacing < and > with < and >
echo strtr($html_out, array('&' => '&',
'<' => '<',
'>'=> '>'));
?></pre>
</body></html>
| warning |  |
- Function html2rgb simply skips every non-hex symbol in the input string. It may return zero values
for non-hex color components.
| tested by AnyExample.com
on 2006-10-24 |  |
- FreeBSD 5.2 :: PHP 5.1.6
- Linux :: PHP 4.4.4