# Posts Tagged with hex colors

Displaying 1-2 of 2 results.
Someone asked if it was possible to find the dominant colour (the more frequent colour, in %) of an image.

So I read about the GD PHP Library, which enables image support. I found the interesting function imageColorAt() which the colour of a specific pixel. Hence, my function consists of resizing to a known size, 100 x 100, then looping into each pixel, storing it’s colour into an array, then sorting the array to find the more frequent key.

Here’s the result :
```
function getDominantColour(\$image, \$type='jpeg') // \$type can be gif, jpeg or png
{
// This function needs GD Library enabled

eval('\$source = imagecreatefrom' . \$type . '("' . \$image . '");'); // we load the source image
\$source_x = imagesx(\$source); // source's X
\$source_y = imagesy(\$source); // source's Y
\$resized_x = 100; // resized image's X
\$resized_y = 100; // resized image's Y
\$resized= imagecreatetruecolor(\$resized_x, \$resized_y); // we create a blank 100 x 100 image
imagecopyresampled(\$resized, \$source, 0, 0, 0, 0, \$resized_x, \$resized_y, \$source_x, \$source_y); // We then copy and resized the source image into the blank image

// Required vars declaration
\$colours = array();
\$rgb = '';
\$index = array();
for (\$x=0; \$x<100; \$x++) // We loop into the pixels X
{
for (\$y=0; \$y<100; \$y++) // We loop into the pixels Y
{
\$rgb = imagecolorat(\$resized, \$x, \$y); // get the RGB of the pixel
\$index = imagecolorsforindex(\$resized, \$rgb); // Get the RGB Index
\$key = 'R' . \$index['red'] . 'G' . \$index['green'] . 'B' . \$index['blue']; // Put it into a string
if (empty(\$colours[\$key])) // If it's the first time this colour is encountered
{
\$colours[\$key] = 1; // We give it a value of 1
} else { // If it's not the first time it is encountered
\$colours[\$key]++; // We increment its value
}
}
}
arsort(\$colours, SORT_NUMERIC); // We then sort the colours array so that the first one is the most frequent one
return key(\$colours); // we return the most frequent value
}
```

Working with images sure is fun. Looking forward to have more functions with the GD libraryRead more
Converting certain values back and forth is often necessary when developing functions to help your website work the way you want it to. I needed a function that would convert a hex color to rgb and for some reason it took me a while to figure it out.
```
function hex2rgb(\$hex) {
\$hex = str_replace("#", "", \$hex);

if(strlen(\$hex) == 3) {
\$r = hexdec(substr(\$hex,0,1).substr(\$hex,0,1));
\$g = hexdec(substr(\$hex,1,1).substr(\$hex,1,1));
\$b = hexdec(substr(\$hex,2,1).substr(\$hex,2,1));
} else {
\$r = hexdec(substr(\$hex,0,2));
\$g = hexdec(substr(\$hex,2,2));
\$b = hexdec(substr(\$hex,4,2));
}
\$rgb = array(\$r, \$g, \$b);
//return implode(",", \$rgb); // returns the rgb values separated by commas
return \$rgb; // returns an array with the rgb values
}
```

This function works with both shorthand hex codes such as #f00 and longhand hex codes such as #ff0000. It also accepts the number sign (#) just in case. You can see there are two return lines at the end of the function. The first, which is commented out, will return the rgb values separated by a comma. The second, which is the default, will return an array with the rgb values.

So now with this function in place we can use it like so:
```
\$rgb = hex2rgb("#cc0");
print_r(\$rgb);
```

The above function would output:
```
Array ( [0] => 204 [1] => 204 [2] => 0 )
```

Since we are going one way with this, might as well go the other. Here is a function to convert rgb to a hex color:
```
function rgb2hex(\$rgb) {
\$hex = "#";

return \$hex; // returns the hex value including the number sign (#)
}
```

This function works like so:
```
\$rgb = array( 255, 255, 255 );
\$hex = rgb2hex(\$rgb);
echo \$hex;
```

The above function would output:
```
#ffffff
```