source: spip-zone/_core_/plugins/filtres_images/filtres/couleurs.php @ 100447

Last change on this file since 100447 was 100447, checked in by marcimat@…, 4 years ago

PHPDoc de couleur_luminance et couleur_saturation.

File size: 6.5 KB
Line 
1<?php
2/***************************************************************************\
3 *  SPIP, Systeme de publication pour l'internet                           *
4 *                                                                         *
5 *  Copyright (c) 2001-2016                                                *
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
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16include_spip('inc/filtres_images_lib_mini');
17
18/**
19 * Toutes les fonctions couleur_xx de ce fichier :
20 *  - prennent une couleur hexa sur 6 caracteres en entree (les couleurs web nommees sont admises aussi)
21 *  - fournissent une couleur hexa en sortie
22 *  - sont chainables les unes derrieres les autres dans toutes les combinaisons possibles
23 */
24
25// http://code.spip.net/@couleur_extraire
26function couleur_extraire($img, $x = 10, $y = 6) {
27        include_spip('filtres/images_lib');
28
29        return _image_couleur_extraire($img, $x, $y);
30}
31
32
33// http://code.spip.net/@couleur_web
34function couleur_web($couleur) {
35        include_spip('filtres/images_lib');
36        $rvb = _couleur_hex_to_dec($couleur);
37
38        $rvb = array_map('multiple_de_trois', $rvb);
39
40        return _couleur_dec_to_hex($rvb['red'], $rvb['green'], $rvb['blue']);
41}
42
43// http://code.spip.net/@couleur_4096
44function couleur_4096($couleur) {
45        $r = (substr($couleur, 0, 1));
46        $v = (substr($couleur, 2, 1));
47        $b = (substr($couleur, 4, 1));
48
49        return "$r$r$v$v$b$b";
50}
51
52
53// http://code.spip.net/@couleur_extreme
54function couleur_extreme($couleur, $limite = 0.5) {
55        // force la couleur au noir ou au blanc le plus proche
56        // -> donc couleur foncee devient noire
57        //    et couleur claire devient blanche
58        // -> la limite est une valeur de 0 a 255, permettant de regler le point limite entre le passage noir ou blanc
59
60        $couleurs = _couleur_hex_to_dec($couleur);
61        $red = $couleurs["red"];
62        $green = $couleurs["green"];
63        $blue = $couleurs["blue"];
64
65
66        /*     
67        $moyenne = round(($red+$green+$blue)/3);
68
69        if ($moyenne > $limite) $couleur_texte = "ffffff";
70        else $couleur_texte = "000000";
71        */
72
73        include_spip('filtres/images_lib');
74        $hsl = _couleur_rgb2hsl($red, $green, $blue);
75
76        if ($hsl["l"] > $limite) {
77                $couleur_texte = "ffffff";
78        } else {
79                $couleur_texte = "000000";
80        }
81
82        return $couleur_texte;
83}
84
85// http://code.spip.net/@couleur_inverser
86function couleur_inverser($couleur) {
87        $couleurs = _couleur_hex_to_dec($couleur);
88        $red = 255 - $couleurs["red"];
89        $green = 255 - $couleurs["green"];
90        $blue = 255 - $couleurs["blue"];
91
92        $couleur = _couleur_dec_to_hex($red, $green, $blue);
93
94        return $couleur;
95}
96
97// http://code.spip.net/@couleur_foncer_si_claire
98function couleur_foncer_si_claire($couleur, $seuil = 122) {
99        // ne foncer que les couleurs claires
100        // utile pour ecrire sur fond blanc,
101        // mais sans changer quand la couleur est deja foncee
102        $couleurs = _couleur_hex_to_dec($couleur);
103        $red = $couleurs["red"];
104        $green = $couleurs["green"];
105        $blue = $couleurs["blue"];
106
107        $moyenne = round(($red + $green + $blue) / 3);
108
109        if ($moyenne > $seuil) {
110                include_spip("inc/filtres_images_mini");
111
112                return couleur_foncer($couleur);
113        } else {
114                return $couleur;
115        }
116}
117
118// http://code.spip.net/@couleur_eclaircir_si_foncee
119function couleur_eclaircir_si_foncee($couleur, $seuil = 123) {
120        $couleurs = _couleur_hex_to_dec($couleur);
121        $red = $couleurs["red"];
122        $green = $couleurs["green"];
123        $blue = $couleurs["blue"];
124
125        $moyenne = round(($red + $green + $blue) / 3);
126
127        if ($moyenne < $seuil) {
128                include_spip("inc/filtres_images_mini");
129
130                return couleur_eclaircir($couleur);
131        } else {
132                return $couleur;
133        }
134}
135
136/**
137 * Modifie la saturation de la couleur transmise
138 *
139 * Change la saturation en forçant le résultat sur une échelle absolue.
140 *
141 * @link http://www.spip.net/3326
142 * @example
143 *     - `[(#VAL{fc3924}|couleur_saturation{0})]` retourne blanc (ffffff),
144 *     - `[(#VAL{fc3924}|couleur_saturation{1})]` retourne la couleur avec sa saturation au maximum (fb1800)
145 *     - `[(#VAL{fc3924}|couleur_saturation{0.2})]` retourne la couleur avec 20% de saturation (fed0cc)
146 *
147 * @uses _couleur_hex_to_dec()
148 * @uses _couleur_dec_to_hex()
149 *
150 * @param string $couleur
151 *      Couleur en écriture hexadécimale, tel que `ff3300`
152 * @param float $val
153 *      Pourcentage désiré (entre 0 et 1)
154 * @return string
155 *      Couleur en écriture hexadécimale.
156**/
157function couleur_saturation($couleur, $val) {
158        if ($couleur == "ffffff") {
159                $couleur = "eeeeee";
160        }
161
162        $couleurs = _couleur_hex_to_dec($couleur);
163        $r = 255 - $couleurs["red"];
164        $g = 255 - $couleurs["green"];
165        $b = 255 - $couleurs["blue"];
166
167        $max = max($r, $g, $b);
168
169        $r = 255 - $r / $max * 255 * $val;
170        $g = 255 - $g / $max * 255 * $val;
171        $b = 255 - $b / $max * 255 * $val;
172
173        $couleur = _couleur_dec_to_hex($r, $g, $b);
174
175        return $couleur;
176
177}
178
179/**
180 * Modifie la luminance de la couleur transmise
181 *
182 * Change la luminance en forçant le résultat sur une échelle absolue.
183 *
184 * @link http://www.spip.net/3326
185 * @example
186 *     - `[(#VAL{fc3924}|couleur_luminance{0})]` retourne blanc (ffffff),
187 *     - `[(#VAL{fc3924}|couleur_luminance{1})]` retourne noir (000000)
188 *     - `[(#VAL{fc3924}|couleur_luminance{0.5})]` retourne une luminance moyenne (fb1b03)
189 *     - `[(#VAL{fc3924}|couleur_luminance{0.2})]` retourne la couleur avec 20% de luminance (fda49a)
190 *
191 * @uses _couleur_hex_to_dec()
192 * @uses couleur_saturation()
193 * @uses _couleur_rgb2hsl()
194 * @uses _couleur_hsl2rgb()
195 * @uses _couleur_dec_to_hex()
196 *
197 * @param string $couleur
198 *      Couleur en écriture hexadécimale, tel que `ff3300`
199 * @param float $val
200 *      Pourcentage désiré (entre 0 et 1)
201 * @return string
202 *      Couleur en écriture hexadécimale.
203**/
204function couleur_luminance($couleur, $val) {
205        include_spip('filtres/images_lib');
206
207        $couleurs = _couleur_hex_to_dec($couleur);
208        $r = $couleurs["red"];
209        $g = $couleurs["green"];
210        $b = $couleurs["blue"];
211
212        // Cas etonnant: quand gris parfait, la correction de HSL ne fonctionne pas
213        // en revanche, couleur_saturation retourne exactement la bonne valeur
214        if ($r == $g && $g == $b) {
215                return couleur_saturation($couleur, $val);
216        }
217
218
219        $couleur = _couleur_rgb2hsl($r, $g, $b);
220        $h = $couleur["h"];
221        $s = $couleur["s"];
222        $l = $couleur["l"];
223
224        $rgb = _couleur_hsl2rgb($h, $s, 1 - $val);
225        $r = $rgb["r"];
226        $g = $rgb["g"];
227        $b = $rgb["b"];
228
229        $retour = _couleur_dec_to_hex($r, $g, $b);
230
231        return $retour;
232}
Note: See TracBrowser for help on using the repository browser.