# \[PHP\] Some Colour Code (COLOURlovers)

**URL:** <https://forum.kirupa.com/t/php-some-colour-code-colourlovers/231698>\
**Category:** open source\
**Created:** [July 6, 2007, 9:01pm UTC](https://forum.kirupa.com/t/php-some-colour-code-colourlovers/231698 "2007-07-06T21:01:39Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![evildrummer](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/evildrummer/32/2308_2.png) [@evildrummer](https://forum.kirupa.com/u/evildrummer)\
**Post date:** [July 6, 2007, 9:01pm UTC](https://forum.kirupa.com/t/php-some-colour-code-colourlovers/231698/1 "2007-07-06T21:01:39Z")

</div>

Ok so some may or may not know I have been playing about with the idea of making my sites colour scheme more dynamic so I have come up with a variety of functions and pieces of code.

\*\*\*EDIT:// version 0.7 (All documented) Alot of the functions aren’t used in the COLOURlovers integration but can be used for extra stuff.\*\*\*

\*\*Core Functions (‘Analyse Functions’)  
\*\*

```php

/ **************************************************************** /
/* ANALYSE FUNCTIONS */
/ **************************************************************** /
function darkValue($hexColour) {
// This function gives a 'darkValue' of the colour given as a parameter.
// The higher the number the darker the colour, the darkest possible 
// (black) is 765
    $values = array(
        '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5,
        '6' => 6, '7' => 7, '8' => 8, '9' => 9, 'A' => 10,
        'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15,
        '0' => 0
    );
    $decimal = str_split($hexColour);
    $i = 0;
    $decimal_values = array();
    foreach ($decimal as $value) {
        $decimal_values[$i] = $values[$value];
        $i++;
    }
    $lightness = 0;
    $lightness += $decimal_values[0]*16;
    $lightness += $decimal_values[1];
    $lightness += $decimal_values[2]*16;
    $lightness += $decimal_values[3];
    $lightness += $decimal_values[4]*16;
    $lightness += $decimal_values[5];
    $darkness = 765 - $lightness;
    return $darkness;
}

function lightPercent($hexColour) {
// This function returns the lightPercent, where 100 equals 100 percent
// and is pure white. It's used to determine how light/bright a colour
// is.
    $darkness = darkValue($hexColour);
    $lightPercent = ($darkness/765)*100;
    $lightPercent = 100 - $lightPercent;
    return $lightPercent;
}

function colourContrast($colour_1, $colour_2) {
// This will return the percentage contrast of two colours, it will always
// be in it's positive form.
    $colour_one = lightPercent($colour_1);
    $colour_two = lightPercent($colour_2);
    $minus = ($colour_one - $colour_two);
    $squared = $minus * $minus;
    $contrast = sqrt($squared);
    return $squared/100;
}

```

\*\*Modify Functions  
\*\*

```php

/ **************************************************************** /
/* MODIFY FUNCTIONS */
/ **************************************************************** /
function splash_of_red($original, $amount) {
// Adds a 'splash' of red, the amount parameter is in decimal 
// format and can be a max of 255 (16 to power of 2), if the red 
// value is higher than 255 after being modified then it will be 
// returned as 255 (the max in RGB hex). The colour is then returned
// in hex format completely.
    $rgb_hex = str_split($original, 2);
    $red_dec = hexdec($rgb_hex[0]);
    $modified = $red_dec + $amount;
    if ($modified < 257) { 
        $mod_hex = dechex($modified);
        $rgb_hex[0] = $mod_hex;
        $final = implode('', $rgb_hex);
        return $final;
    } else {
        return $original;
    }
}
function splash_of_green($original, $amount) {
// Adds a 'splash' of green, the amount parameter is in decimal 
// format and can be a max of 255 (16 to power of 2), if the green 
// value is higher than 255 after being modified then it will be 
// returned as 255 (the max in RGB hex). The colour is then returned
// in hex format completely.
    $rgb_hex = str_split($original, 2);
    $red_dec = hexdec($rgb_hex[1]);
    $modified = $red_dec + $amount;
    if ($modified < 257) { 
        $mod_hex = dechex($modified);
        $rgb_hex[1] = $mod_hex;
        $final = implode('', $rgb_hex);
        return $final;
    } else {
        return $original;
    }
}
function splash_of_blue($original, $amount) {
// Adds a 'splash' of blue, the amount parameter is in decimal 
// format and can be a max of 255 (16 to power of 2), if the blue 
// value is higher than 255 after being modified then it will be 
// returned as 255 (the max in RGB hex). The colour is then returned
// in hex format completely.
    $rgb_hex = str_split($original, 2);
    $red_dec = hexdec($rgb_hex[2]);
    $modified = $red_dec + $amount;
    if ($modified < 257) { 
        $mod_hex = dechex($modified);
        $rgb_hex[2] = $mod_hex;
        $final = implode('', $rgb_hex);
        return $final;
    } else {
        return $original;
    }
}
function primary_colour($colour) {
// Returns the primary/base colour of the colour given as a 
// parameter. If the colour is mainly red it returns red, blue
// it returns blue, etc, etc. Still very primitive and only returns
// either red, blue or green.
    $rgb_hex = str_split($colour, 2);
    asort($rgb_hex);
    $i = 0;
    foreach($rgb_hex as $key => $value) {
        if ($i = 2) { $colour_pos = $key; }
    }
    switch($colour_pos) {
        case 0:
            return 'red';
            break;
        case 1:
            return 'green';
            break;
        case 2:
            return 'blue';
            break;
    }
}

```

\*\*COLOURlovers Integration _requires PEAR XML\_RSS_  
\*\*

```php
/ **************************************************************** /
/* COLOURlovers INTEGRATION */
/ **************************************************************** /
/* Requires PEAR XML_RSS */
/ **************************************************************** /

//header("Content-type: text/css"); Only needed if used in an external
// CSS file save with a .php ending.

// Include the PEAR XML_RSS package.
require_once "XML/RSS.php";

// Parse the Top 10 colour palletes feed from COLOURlovers.
$feed_url = 'http://feeds.feedburner.com/ColourloversCoup0Palettes/Top?format=xml';
$rss =& new XML_RSS($feed_url);
$rss->parse();

// This loop generates a random number between 1 and 5 and then gets that items
// description (which is the data we need).
$i = 0;
$target = rand(1, 5);
foreach ($rss->getItems() as $item) {
    if ($i == $target) {
        $top = $item['description'];
    }
    $i++;
}

// Gets rid of the image data and leaves just the alt atribute which contains...
// the palletes hex values.
$corrections = array (
'|.*" alt="|' => '',
'|" />|' => ''
);
$top = preg_replace(array_keys($corrections), array_values($corrections), $top);

// This splits the one string of colours into an array
$colours = explode('/', $top);

// This chunk of code gets the darkValue for each colour and then sorts them.
$darkness_and_colours = array();
foreach($colours as $colour) {
$darkness_and_colours[$colour] = darkValue($colour);
}
arsort($darkness_and_colours);
$i = 1;

// Puts colour values into an array for easy use.
foreach($darkness_and_colours as $key => $value) {
$colours_in_order[$i] = $key;
$i++;
}

// Darkest
//$colours_in_order[1]
//$colours_in_order[2]
//$colours_in_order[3]
//$colours_in_order[4]
//$colours_in_order[5]
// Lightest

```

\*\*Final Notes  
\*\*I’m still working on this and will keep this thread updated, i thought I would just share what I have done so far, you can see it in use at [www.digitalcarnival.com](http://www.digitalcarnival.com) where it picks a random palete from the top five on COLOURlovers (the example above).
