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

Last change on this file since 40016 was 40016, checked in by da@…, 11 years ago

Seuil sur eclaircir_si_foncee et foncer_si_claire

Ajouter un seuil optionnel (nombre entre 0 et 244) aux fonctions
couleur_eclaircir_si_foncee et couleur_foncer_si_claire, indiquant
le seuil de luminosité au-delà duquel on applique l'opération.

Par défaut, la seuil est 122 pour foncer et 123 pour éclaircir.

Ce commit ne change pas les valeurs par défaut, mais pour des raisons
de simplicité d'utilisation il serait peut-être judicieux d'harmoniser
les deux valeurs, d'autant plus que la différence est probablement
imperceptible.

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