|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
|
|
4
|
|
|
namespace projectcleverweb\color; |
|
5
|
|
|
|
|
6
|
|
|
|
|
7
|
|
|
class generate { |
|
8
|
|
|
|
|
9
|
1 |
|
public static function rgb_contrast(int $r = 0, int $g = 0, int $b = 0) :array { |
|
10
|
|
|
return [ |
|
11
|
1 |
|
'r' => ($r < 128) ? 255 : 0, |
|
12
|
1 |
|
'g' => ($g < 128) ? 255 : 0, |
|
13
|
1 |
|
'b' => ($b < 128) ? 255 : 0 |
|
14
|
|
|
]; |
|
15
|
|
|
} |
|
16
|
|
|
|
|
17
|
1 |
|
public static function rgb_invert(int $r = 0, int $g = 0, int $b = 0) :array { |
|
18
|
|
|
return [ |
|
19
|
1 |
|
'r' => 255 - $r, |
|
20
|
1 |
|
'g' => 255 - $g, |
|
21
|
1 |
|
'b' => 255 - $b |
|
22
|
|
|
]; |
|
23
|
|
|
} |
|
24
|
|
|
|
|
25
|
2 |
|
public static function yiq_score(int $r = 0, int $g = 0, int $b = 0) :float { |
|
26
|
2 |
|
return (($r * 299) + ($g * 587) + ($b * 114)) / 1000; |
|
27
|
|
|
} |
|
28
|
|
|
|
|
29
|
|
|
public static function rgb_rand(int $min_r = 0, int $max_r = 255, int $min_g = 0, int $max_g = 255, int $min_b = 0, int $max_b = 255) :array { |
|
30
|
|
|
return [ |
|
31
|
|
|
'r' => rand(abs((int) $min_r) % 256, abs((int) $max_r) % 256), |
|
32
|
|
|
'g' => rand(abs((int) $min_g) % 256, abs((int) $max_g) % 256), |
|
33
|
|
|
'b' => rand(abs((int) $min_b) % 256, abs((int) $max_b) % 256) |
|
34
|
|
|
]; |
|
35
|
|
|
} |
|
36
|
|
|
|
|
37
|
|
|
public static function hsl_rand(int $min_h = 0, int $max_h = 255, int $min_s = 0, int $max_s = 255, int $min_l = 0, int $max_l = 255) :array { |
|
38
|
|
|
return [ |
|
39
|
|
|
'h' => rand(abs((int) $min_h) % 256, abs((int) $max_h) % 256), |
|
40
|
|
|
's' => rand(abs((int) $min_s) % 256, abs((int) $max_s) % 256), |
|
41
|
|
|
'l' => rand(abs((int) $min_l) % 256, abs((int) $max_l) % 256) |
|
42
|
|
|
]; |
|
43
|
|
|
} |
|
44
|
|
|
|
|
45
|
1 |
|
public static function blend(float $r1, float $g1, float $b1, float $a1, float $r2, float $g2, float $b2, float $a2, float $amount = 50.0) :array { |
|
46
|
1 |
|
$x1 = regulate::div(100 - $amount, 100); |
|
47
|
1 |
|
$x2 = regulate::div($amount, 100); |
|
48
|
|
|
return [ |
|
49
|
1 |
|
'r' => round(($r1 * $x1) + ($r2 * $x2), 0), |
|
50
|
1 |
|
'g' => round(($g1 * $x1) + ($g2 * $x2), 0), |
|
51
|
1 |
|
'b' => round(($b1 * $x1) + ($b2 * $x2), 0), |
|
52
|
1 |
|
'a' => ($a1 * $x1) + ($a2 * $x2) |
|
53
|
|
|
]; |
|
54
|
|
|
} |
|
55
|
|
|
|
|
56
|
|
|
public static function web_safe(int $r = 0, int $g = 0, int $b = 0) :string { |
|
57
|
|
|
return convert::rgb_to_hex( |
|
58
|
|
|
round($r / 0x33) * 0x33, |
|
59
|
|
|
round($g / 0x33) * 0x33, |
|
60
|
|
|
round($b / 0x33) * 0x33 |
|
61
|
|
|
); |
|
62
|
|
|
} |
|
63
|
|
|
} |
|
64
|
|
|
|