Artykuły na każdy temat
[PHP] Losowy kolor w trzech postaciach
<?php
$cfg['primary_color'] = array('black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua');
function random_color($type)
{
/*
* @Name_function: random_color
* @Description: function returns a random color, depending on $type
* @Argument: $type (string)
* primary -> 16 combination
* short -> 4 096 combination
* long -> 16 777 216 combination
* @Return: (string)
*/
global $cfg;
// Jeżeli wersja PHP < 4.2.0 wtedy zachodzi potrzeba użycia generator liczb losowych
// srand(floor(time() / (60*60*24)));
if($type == 'primary')
{
$tmp['output'] = $cfg['primary_color'][array_rand($cfg['primary_color'])];
}
else if($type == 'short' || $type == 'long')
{
$tmp['output'] = '#';
for($h = 0, $tmp['how'] = ($type == 'short' ? 3 : 6); $h < $tmp['how']; ++$h)
{
$tmp['output'] .= dechex(rand(0, 15));
}
// Zbędna kosmetyka dla fanatyków
$tmp['output'] = strtoupper($tmp['output']);
}
return $tmp['output'];
}
echo random_color('primary');
echo '<br />';
echo random_color('short');
echo '<br />';
echo random_color('long');
?>
Poniżej znajduję się funkcja zmieniająca kod koloru zapisany szesnastkowo do numeru koloru zapisanego w RGB
<?php
function hex_to_rgb($r, $g, $b)
{
/*
* @Name_function: hex_to_rgb
* @Description: function changes the hex color to rgb number color
* @Argument: $hex (string)
* @Return: (int)
* @Other: General formula -> R * 256^2 + G * 256 + B
* 256^2 = pow(256, 2) = 65536
*/
// @Info: to jest stara wersja gdzie przyjmowano, że kolor jest zawsze w postaci długiej oraz funkcja przyjmuję tylko jeden parametr ($hex)
// return hexdec(substr($hex, 1, 2)) * pow(256, 2) + hexdec(substr($hex, 3, 2)) * 256 + hexdec(substr($hex, 5, 2));
return $r * 65536 + $g * 256 + $b;
}
$tmp['color'] = '#FFF';
$tmp['lenght'] = strlen($tmp['color']);
for($h = 0; $h < 3; ++$h)
{
$tmp['output'][$h] = substr($tmp['color'], ($tmp['lenght'] == 7 ? (1 + ($h * 2)) : (1 + $h)), ($tmp['lenght'] == 7 ? 2 : 1));
$tmp['output'][$h] = ($tmp['lenght'] == 7 ? $tmp['output'][$h] : str_repeat($tmp['output'][$h], 2));
}
$tmp['r'] = $tmp['output'][0];
$tmp['g'] = $tmp['output'][1];
$tmp['b'] = $tmp['output'][2];
// Porządki
unset($tmp['output'], $tmp['lenght']);
echo $tmp['color'].' = (rgb)'.hex_to_rgb(hexdec($tmp['r']), hexdec($tmp['g']), hexdec($tmp['b']));
?>
Poniżej znajduję się jedna z możliwych metod zmiany krótkiego zapisu koloru w systemie szesnastkowych na postać długą.
<?php
function short_hex_to_long_hex($hex)
{
/*
* @Name_function: short_hex_to_long_hex
* @Description: function returns converted long hex color from short hex
* @Argument: $hex (string)
* @Return: (string)
*/
if(strlen($hex) == 4)
{
$tmp['output'] = str_split($hex);
$tmp['output'][5] = $tmp['output'][6] = $tmp['output'][3];
$tmp['output'][3] = $tmp['output'][4] = $tmp['output'][2];
$tmp['output'][2] = $tmp['output'][1];
sort($tmp['output']);
$tmp['output'] = implode('', $tmp['output']);
}
return $tmp['output'];
}
?>
Poniżej znajduję się funkcja, która powie nam czy kolor napisu na wylosowanym kolorze ma być biały czy czarny.
<?php
function whether_font_color_is_white_or_black($rgb)
{
/*
* @Name_function: whether_font_color_is_white_or_black
* @Description: function says that the font color is white or black
* @Argument: $rgb (int)
* @Return: (string)
*/
return ((($rgb >> 16) + ($rgb >> 8 & 0xff) + ($rgb & 0xff)) / 3 <= 0x7f ? '#FFF' : '#000');
}
?>
Przy tworzeniu dema musiałem nieco zmodyfikowac tablice $cfg['primary_color'] i losowanie z niej. Wyglada ona nastepujaca:
<?php
$cfg['primary_color'] = array('black' => '000', 'silver' => 'C0C0C0', 'gray' => '808080', 'white' => 'FFF', 'maroon' => '800000', 'red' => 'F00', 'purple' => '800080', 'fuchsia' => 'F0F', 'green' => '008000', 'lime' => '0F0', 'olive' => '808000', 'yellow' => 'FF0', 'navy' => '000080', 'blue' => '00F', 'teal' => '008080', 'aqua' => '0FF');
?>
W funkcji random_color() uległ zmiane ten kawalek kodu:
<?php
function random_color($type)
{
// ciach
if($type == 'primary')
{
$tmp['output'] = array_rand($cfg['primary_color']);
}
// ciach
}
?>
Komentarze
Dodaj komentarz
CapaciousCore