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
|
|
|
|