Newer
Older
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/

cedric@yterium.com
a validé
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}

kent1@arscenic.info
a validé
include_spip('inc/filtres_images_lib_mini');
/**
* Toutes les fonctions couleur_xx de ce fichier :

cedric@yterium.com
a validé
* - prennent une couleur hexa sur 6 caracteres en entree (les couleurs web nommees sont admises aussi)
* - fournissent une couleur hexa en sortie
* - sont chainables les unes derrieres les autres dans toutes les combinaisons possibles
*/

spip.franck@lien-d-amis.net
a validé
// http://code.spip.net/@couleur_extraire

cedric@yterium.com
a validé
function couleur_extraire($img, $x = 10, $y = 6) {

cedric@yterium.com
a validé

spip.franck@lien-d-amis.net
a validé
// http://code.spip.net/@couleur_web
function couleur_web($couleur) {
include_spip('filtres/images_lib');
$rvb = _couleur_hex_to_dec($couleur);

cedric@yterium.com
a validé
$rvb = array_map('multiple_de_trois', $rvb);
return _couleur_dec_to_hex($rvb['red'], $rvb['green'], $rvb['blue']);

spip.franck@lien-d-amis.net
a validé
// http://code.spip.net/@couleur_4096
function couleur_4096($couleur) {
$r = (substr($couleur, 0, 1));
$v = (substr($couleur, 2, 1));
$b = (substr($couleur, 4, 1));

cedric@yterium.com
a validé

fil@rezo.net
a validé
// Lire la luminance relative d'une couleur
// de 0 à 1
// cf. https://fr.wikipedia.org/wiki/Luminance#Luminance_relative
// cf. https://bl.ocks.org/Fil/cf03a054826ee5b3013577ecc0b009e6
// http://code.spip.net/@couleur_luminance_relative
function couleur_luminance_relative($couleur) {
$c = _couleur_hex_to_dec($couleur);
return (0.2126 * $c['red'] + 0.7152 * $c['green'] + 0.0722 * $c['blue']) / 255;
}

spip.franck@lien-d-amis.net
a validé
// http://code.spip.net/@couleur_extreme

cedric@yterium.com
a validé
function couleur_extreme($couleur, $limite = 0.5) {
// force la couleur au noir ou au blanc le plus proche
// -> donc couleur foncee devient noire
// et couleur claire devient blanche
// -> la limite est une valeur de 0 a 255, permettant de regler le point limite entre le passage noir ou blanc

fil@rezo.net
a validé
if (couleur_luminance_relative($couleur) > $limite) {

cedric@yterium.com
a validé
$couleur_texte = "ffffff";
} else {
$couleur_texte = "000000";
}
return $couleur_texte;
}

spip.franck@lien-d-amis.net
a validé
// http://code.spip.net/@couleur_inverser

cedric@yterium.com
a validé
function couleur_inverser($couleur) {
$couleurs = _couleur_hex_to_dec($couleur);

marcimat@rezo.net
a validé
$red = 255 - $couleurs["red"];
$green = 255 - $couleurs["green"];
$blue = 255 - $couleurs["blue"];
$couleur = _couleur_dec_to_hex($red, $green, $blue);

cedric@yterium.com
a validé

spip.franck@lien-d-amis.net
a validé
// http://code.spip.net/@couleur_foncer_si_claire

cedric@yterium.com
a validé
function couleur_foncer_si_claire($couleur, $seuil = 122) {
// ne foncer que les couleurs claires
// utile pour ecrire sur fond blanc,
// mais sans changer quand la couleur est deja foncee

fil@rezo.net
a validé
if (couleur_luminance_relative($couleur) > $seuil / 255) {
include_spip("inc/filtres_images_mini");
return couleur_foncer($couleur);

cedric@yterium.com
a validé
} else {
return $couleur;

spip.franck@lien-d-amis.net
a validé
// http://code.spip.net/@couleur_eclaircir_si_foncee

cedric@yterium.com
a validé
function couleur_eclaircir_si_foncee($couleur, $seuil = 123) {

fil@rezo.net
a validé
if (couleur_luminance_relative($couleur) < $seuil / 255) {
include_spip("inc/filtres_images_mini");
return couleur_eclaircir($couleur);

cedric@yterium.com
a validé
} else {
return $couleur;
/**
* Modifie la saturation de la couleur transmise
*
* Change la saturation en forçant le résultat sur une échelle absolue.
*
* @link http://www.spip.net/3326
* @example
* - `[(#VAL{fc3924}|couleur_saturation{0})]` retourne blanc (ffffff),
* - `[(#VAL{fc3924}|couleur_saturation{1})]` retourne la couleur avec sa saturation au maximum (fb1800)
* - `[(#VAL{fc3924}|couleur_saturation{0.2})]` retourne la couleur avec 20% de saturation (fed0cc)
*
* @uses _couleur_hex_to_dec()
* @uses _couleur_dec_to_hex()
*
* @param string $couleur
* Couleur en écriture hexadécimale, tel que `ff3300`
* @param float $val
* Pourcentage désiré (entre 0 et 1)
* @return string
* Couleur en écriture hexadécimale.
**/
function couleur_saturation($couleur, $val) {

cedric@yterium.com
a validé
if ($couleur == "ffffff") {
$couleur = "eeeeee";
}
$couleurs = _couleur_hex_to_dec($couleur);

marcimat@rezo.net
a validé
$r = 255 - $couleurs["red"];
$g = 255 - $couleurs["green"];
$b = 255 - $couleurs["blue"];

cedric@yterium.com
a validé
$max = max($r, $g, $b);

marcimat@rezo.net
a validé
$r = 255 - $r / $max * 255 * $val;
$g = 255 - $g / $max * 255 * $val;
$b = 255 - $b / $max * 255 * $val;
$couleur = _couleur_dec_to_hex($r, $g, $b);

cedric@yterium.com
a validé

cedric@yterium.com
a validé
/**
* Modifie la luminance de la couleur transmise
*
* Change la luminance en forçant le résultat sur une échelle absolue.
*
* @link http://www.spip.net/3326
* @example
* - `[(#VAL{fc3924}|couleur_luminance{0})]` retourne blanc (ffffff),
* - `[(#VAL{fc3924}|couleur_luminance{1})]` retourne noir (000000)
* - `[(#VAL{fc3924}|couleur_luminance{0.5})]` retourne une luminance moyenne (fb1b03)
* - `[(#VAL{fc3924}|couleur_luminance{0.2})]` retourne la couleur avec 20% de luminance (fda49a)
*
* @uses _couleur_hex_to_dec()
* @uses couleur_saturation()
* @uses _couleur_rgb2hsl()
* @uses _couleur_hsl2rgb()
* @uses _couleur_dec_to_hex()
*
* @param string $couleur
* Couleur en écriture hexadécimale, tel que `ff3300`
* @param float $val
* Pourcentage désiré (entre 0 et 1)
* @return string
* Couleur en écriture hexadécimale.
**/

arno@rezo.net
a validé
function couleur_luminance($couleur, $val) {
include_spip('filtres/images_lib');
$couleurs = _couleur_hex_to_dec($couleur);

cedric@yterium.com
a validé
$r = $couleurs["red"];
$g = $couleurs["green"];
$b = $couleurs["blue"];

arno@rezo.net
a validé
// Cas etonnant: quand gris parfait, la correction de HSL ne fonctionne pas
// en revanche, couleur_saturation retourne exactement la bonne valeur

cedric@yterium.com
a validé
if ($r == $g && $g == $b) {
return couleur_saturation($couleur, $val);
}

arno@rezo.net
a validé

arno@rezo.net
a validé
$couleur = _couleur_rgb2hsl($r, $g, $b);
$h = $couleur["h"];
$s = $couleur["s"];
$l = $couleur["l"];

cedric@yterium.com
a validé

marcimat@rezo.net
a validé
$rgb = _couleur_hsl2rgb($h, $s, 1 - $val);

arno@rezo.net
a validé
$r = $rgb["r"];
$g = $rgb["g"];
$b = $rgb["b"];

cedric@yterium.com
a validé

arno@rezo.net
a validé
$retour = _couleur_dec_to_hex($r, $g, $b);

cedric@yterium.com
a validé

arno@rezo.net
a validé
return $retour;
}