[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / extensions / filtres_images / filtres / couleurs.php
1 <?php
2 /***************************************************************************\
3 * SPIP, Systeme de publication pour l'internet *
4 * *
5 * Copyright (c) 2001-2014 *
6 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
7 * *
8 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
9 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
10 \***************************************************************************/
11
12 if (!defined('_ECRIRE_INC_VERSION')) return;
13
14 include_spip('inc/filtres_images_lib_mini');
15
16 /**
17 * Toutes les fonctions couleur_xx de ce fichier :
18 * - prennent une couleur hexa sur 6 caracteres en entree (les couleurs web nommees sont admises aussi)
19 * - fournissent une couleur hexa en sortie
20 * - sont chainables les unes derrieres les autres dans toutes les combinaisons possibles
21 */
22
23 // http://doc.spip.org/@couleur_extraire
24 function couleur_extraire ($img, $x=10, $y=6) {
25 include_spip('filtres/images_lib');
26 return _image_couleur_extraire($img, $x, $y);
27 }
28
29
30
31 // http://doc.spip.org/@couleur_web
32 function couleur_web($couleur) {
33 include_spip('filtres/images_lib');
34 $rvb = _couleur_hex_to_dec($couleur);
35
36 $rvb = array_map('multiple_de_trois',$rvb);
37
38 return _couleur_dec_to_hex($rvb['red'],$rvb['green'],$rvb['blue']);
39 }
40
41 // http://doc.spip.org/@couleur_4096
42 function couleur_4096($couleur) {
43 $r = (substr($couleur, 0, 1));
44 $v = (substr($couleur, 2, 1));
45 $b = (substr($couleur, 4, 1));
46
47 return "$r$r$v$v$b$b";
48 }
49
50
51 // http://doc.spip.org/@couleur_extreme
52 function couleur_extreme ($couleur, $limite=0.5) {
53 // force la couleur au noir ou au blanc le plus proche
54 // -> donc couleur foncee devient noire
55 // et couleur claire devient blanche
56 // -> la limite est une valeur de 0 a 255, permettant de regler le point limite entre le passage noir ou blanc
57
58 $couleurs = _couleur_hex_to_dec($couleur);
59 $red = $couleurs["red"];
60 $green = $couleurs["green"];
61 $blue = $couleurs["blue"];
62
63
64 /*
65 $moyenne = round(($red+$green+$blue)/3);
66
67 if ($moyenne > $limite) $couleur_texte = "ffffff";
68 else $couleur_texte = "000000";
69 */
70
71 include_spip('filtres/images_lib');
72 $hsl = _couleur_rgb2hsl ($red, $green, $blue);
73
74 if ($hsl["l"] > $limite) $couleur_texte = "ffffff";
75 else $couleur_texte = "000000";
76
77 return $couleur_texte;
78 }
79
80 // http://doc.spip.org/@couleur_inverser
81 function couleur_inverser ($couleur) {
82 $couleurs = _couleur_hex_to_dec($couleur);
83 $red = 255 - $couleurs["red"];
84 $green = 255 - $couleurs["green"];
85 $blue = 255 - $couleurs["blue"];
86
87 $couleur = _couleur_dec_to_hex($red, $green, $blue);
88
89 return $couleur;
90 }
91
92 // http://doc.spip.org/@couleur_foncer_si_claire
93 function couleur_foncer_si_claire ($couleur) {
94 // ne foncer que les couleurs claires
95 // utile pour ecrire sur fond blanc,
96 // mais sans changer quand la couleur est deja foncee
97 $couleurs = _couleur_hex_to_dec($couleur);
98 $red = $couleurs["red"];
99 $green = $couleurs["green"];
100 $blue = $couleurs["blue"];
101
102 $moyenne = round(($red+$green+$blue)/3);
103
104 if ($moyenne > 122) {
105 include_spip("inc/filtres_images_mini");
106 return couleur_foncer($couleur);
107 }
108 else return $couleur;
109 }
110
111 // http://doc.spip.org/@couleur_eclaircir_si_foncee
112 function couleur_eclaircir_si_foncee ($couleur) {
113 $couleurs = _couleur_hex_to_dec($couleur);
114 $red = $couleurs["red"];
115 $green = $couleurs["green"];
116 $blue = $couleurs["blue"];
117
118 $moyenne = round(($red+$green+$blue)/3);
119
120 if ($moyenne < 123) {
121 include_spip("inc/filtres_images_mini");
122 return couleur_eclaircir($couleur);
123 }
124 else return $couleur;
125 }
126
127 // http://doc.spip.org/@couleur_saturation
128 function couleur_saturation($couleur, $val) {
129 if ($couleur == "ffffff") $couleur = "eeeeee";
130
131 $couleurs = _couleur_hex_to_dec($couleur);
132 $r= 255 - $couleurs["red"];
133 $g= 255 - $couleurs["green"];
134 $b= 255 - $couleurs["blue"];
135
136 $max = max($r,$g,$b);
137
138 $r = 255 - $r / $max * 255 * $val;
139 $g = 255 - $g / $max * 255 * $val;
140 $b = 255 - $b / $max * 255 * $val;
141
142 $couleur = _couleur_dec_to_hex($r, $g, $b);
143
144 return $couleur;
145
146 }
147
148 // http://doc.spip.org/@couleur_luminance
149 function couleur_luminance($couleur, $val) {
150 include_spip('filtres/images_lib');
151
152 $couleurs = _couleur_hex_to_dec($couleur);
153 $r= $couleurs["red"];
154 $g= $couleurs["green"];
155 $b= $couleurs["blue"];
156
157 // Cas etonnant: quand gris parfait, la correction de HSL ne fonctionne pas
158 // en revanche, couleur_saturation retourne exactement la bonne valeur
159 if ($r == $g && $g == $b) return couleur_saturation($couleur, $val);
160
161
162 $couleur = _couleur_rgb2hsl($r, $g, $b);
163 $h = $couleur["h"];
164 $s = $couleur["s"];
165 $l = $couleur["l"];
166
167 $rgb = _couleur_hsl2rgb ($h, $s, 1-$val);
168 $r = $rgb["r"];
169 $g = $rgb["g"];
170 $b = $rgb["b"];
171
172 $retour = _couleur_dec_to_hex($r, $g, $b);
173
174 return $retour;
175 }
176
177 ?>