forked from ILIAS-eLearning/ILIAS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathColor.php
131 lines (119 loc) · 2.59 KB
/
Color.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
/* Copyright (c) 2017 Nils Haagen <[email protected]> Extended GPL, see docs/LICENSE */
namespace ILIAS\Data;
/**
* Color expresses a certain color by giving the mixing ratio
* in the RGB color space.
*
* @author Nils Haagen <[email protected]>
*/
class Color
{
/**
* @var integer
*/
protected $r;
/**
* @var integer
*/
protected $g;
/**
* @var integer
*/
protected $b;
public function __construct($r, $g, $b)
{
if (!is_integer($r) or $r < 0 || $r > 255) {
throw new \InvalidArgumentException("Unexpected value for \$r: '$r'");
}
if (!is_integer($g) or $g < 0 || $g > 255) {
throw new \InvalidArgumentException("Unexpected value for \$g: '$g'");
}
if (!is_integer($b) or $b < 0 || $b > 255) {
throw new \InvalidArgumentException("Unexpected value for \$b: '$b'");
}
$this->r = $r;
$this->g = $g;
$this->b = $b;
}
/**
* Get the valule for red.
*
* @return integer
*/
public function r()
{
return $this->r;
}
/**
* Get the valule for green.
*
* @return integer
*/
public function g()
{
return $this->g;
}
/**
* Get the valule for blue.
*
* @return integer
*/
public function b()
{
return $this->b;
}
/**
* Return array with RGB-values.
*
* @return int[]
*/
public function asArray()
{
return array(
$this->r,
$this->g,
$this->b
);
}
/**
* Return color-value in hex-format.
*
* @return string
*/
public function asHex()
{
$hex = '#';
foreach ($this->asArray() as $value) {
$hex .= str_pad(dechex($value), 2, '0', STR_PAD_LEFT);
}
return $hex;
}
/**
* Return string with RGB-notation
*
* @return string
*/
public function asRGBString()
{
return 'rgb('
. implode(', ', $this->asArray())
. ')';
}
/**
* Based on https://de.wikipedia.org/wiki/Luminanz
* this function decides if the color can be considered "dark".
* With a dark background, i.e., a lighter (white) color should be used
* for the foreground.
*
* @return boolean
*/
public function isDark()
{
$sum = 0.299 * $this->r + 0.587 * $this->g + 0.114 * $this->b;
if ($sum < 128) {
return true;
}
return false;
}
}