nuancier.php
Ce fichier contient l'API de manipulation des nuanciers.
Un nuancier est un simple tableau de couleurs hexadécimales, indexé de zéro et ordonné. C'est le contenu du
champ nuancier d'une palette, considéré indépendamment de la palette qui le porte : un nuancier n'a ni nom, ni
collection, ni description.
Les fonctions se répartissent en trois natures :
- produire un nuancier, qu'il soit créé à partir d'une ou deux couleurs de référence ou dérivé d'un nuancier existant ;
- qualifier un nuancier, c'est-à-dire mesurer ses propriétés perceptuelles sans le modifier ;
- interroger un nuancier pour obtenir la couleur correspondant à une valeur, ce qui constitue la jonction avec la discrétisation d'une série de données.
Cette couche s'appuie sur inc/colorimetrie.php et ne connaît rien de la base de données.
Tags
Table of Contents
Functions
- nuancier_teinte_unique() : array<string|int, mixed>
- Produit un nuancier de teintes uniques en faisant varier la luminosité et la saturation d'une couleur.
- nuancier_teinte_bipolaire() : array<string|int, mixed>
- Produit un nuancier bipolaire, divergeant depuis une couleur centrale vers deux couleurs extrêmes.
- nuancier_couleur_melangee() : array<string|int, mixed>
- Produit un nuancier par mélange progressif de deux couleurs.
- nuancier_analogique() : array<string|int, mixed>
- Produit un nuancier analogique, composé de teintes voisines sur le cercle chromatique.
- nuancier_complementaire() : array<string|int, mixed>
- Produit un nuancier complémentaire, réunissant les variations d'une couleur et celles de son opposée sur le cercle chromatique.
- nuancier_triadique() : array<string|int, mixed>
- Produit un nuancier triadique, réunissant les variations de trois teintes espacées de 120° sur le cercle chromatique.
- nuancier_sequentiel() : array<string|int, mixed>
- Produit un nuancier séquentiel en interpolant la clarté et le chroma à teinte constante.
- nuancier_divergent() : array<string|int, mixed>
- Produit un nuancier divergent, joignant deux teintes extrêmes en passant par un point neutre.
- nuancier_qualitatif() : array<string|int, mixed>
- Produit un nuancier qualitatif, composé de teintes réparties régulièrement sur le cercle chromatique à chroma constant.
- nuancier_multi_teintes() : array<string|int, mixed>
- Produit un nuancier multi-teintes, en déclinant chaque teinte fournie sur une plage de clarté.
- nuancier_inverser() : array<string|int, mixed>
- Renverse l'ordre des couleurs d'un nuancier.
- nuancier_extraire() : array<string|int, mixed>
- Extrait d'un nuancier un sous-ensemble de couleurs réparties régulièrement, extrémités comprises.
- nuancier_uniformite() : null|array<string|int, mixed>
- Mesure l'uniformité perceptuelle d'un nuancier, c'est-à-dire la régularité des écarts entre ses couleurs consécutives.
- nuancier_contraste_minimal() : null|float
- Détermine le rapport de contraste le plus faible entre les couleurs consécutives d'un nuancier.
- nuancier_progression_clarte() : null|array<string|int, mixed>
- Décrit la progression de clarté d'un nuancier.
- nuancier_verifier_daltonisme() : null|array<string|int, mixed>
- Vérifie qu'un nuancier reste lisible pour les principales déficiences de la vision des couleurs.
- nuancier_couleur_a_pourcentage() : null|string
- Renvoie la couleur d'un nuancier correspondant à une position exprimée en pourcentage.
- nuancier_couleur_pour_valeur() : null|string
- Renvoie la couleur d'un nuancier représentant une valeur située dans un intervalle donné.
Functions
nuancier_teinte_unique()
Produit un nuancier de teintes uniques en faisant varier la luminosité et la saturation d'une couleur.
nuancier_teinte_unique(string $hex, int $taille[, null|float $luminosite_min = null ][, null|float $luminosite_max = null ][, null|float $saturation_min = null ][, null|float $saturation_max = null ]) : array<string|int, mixed>
Parameters
- $hex : string
-
Couleur de référence, au format hexadécimal
- $taille : int
-
Nombre de couleurs à produire
- $luminosite_min : null|float = null
-
Luminosité de départ, 0-1. Par défaut celle de la couleur de référence
- $luminosite_max : null|float = null
-
Luminosité d'arrivée, 0-1. Par défaut 0,95 si la luminosité de départ est elle-même laissée par défaut, sinon celle de la couleur de référence
- $saturation_min : null|float = null
-
Saturation de départ, 0-1. Par défaut celle de la couleur de référence
- $saturation_max : null|float = null
-
Saturation d'arrivée, 0-1. Par défaut celle de la couleur de référence
Return values
array<string|int, mixed> —Nuancier, ou tableau vide si la taille demandée est nulle ou négative
nuancier_teinte_bipolaire()
Produit un nuancier bipolaire, divergeant depuis une couleur centrale vers deux couleurs extrêmes.
nuancier_teinte_bipolaire(string $hex1, string $hex2, int $taille[, null|string $hex_central = null ]) : array<string|int, mixed>
Parameters
- $hex1 : string
-
Couleur de la première extrémité
- $hex2 : string
-
Couleur de la seconde extrémité
- $taille : int
-
Nombre total de couleurs, un nombre impair étant recommandé pour ménager une couleur centrale
- $hex_central : null|string = null
-
Couleur du point de bascule, blanche par défaut
Return values
array<string|int, mixed> —Nuancier
nuancier_couleur_melangee()
Produit un nuancier par mélange progressif de deux couleurs.
nuancier_couleur_melangee(string $hex1, string $hex2, int $taille[, string $methode = 'rgb' ]) : array<string|int, mixed>
Le trajet d'une couleur à l'autre est délégué à colorimetrie_interpoler(), ce qui ouvre cette production à tous les
espaces qu'elle connaît : rgb rejoint la couleur d'arrivée en ligne droite et traverse souvent un gris terne,
hsl suit le cercle chromatique, oklab donne le dégradé le plus régulier à l'œil.
Parameters
- $hex1 : string
-
Couleur de départ
- $hex2 : string
-
Couleur d'arrivée
- $taille : int
-
Nombre de couleurs à produire
- $methode : string = 'rgb'
-
Espace d'interpolation :
rgbpar défaut, ou l'un de ceux qu'acceptecolorimetrie_interpoler()—oklab,oklch,lab,polarlab,hcl,hsl
Tags
Return values
array<string|int, mixed> —Nuancier
nuancier_analogique()
Produit un nuancier analogique, composé de teintes voisines sur le cercle chromatique.
nuancier_analogique(string $hex, int $taille[, float $ecart_teinte = 30.0 ]) : array<string|int, mixed>
Parameters
- $hex : string
-
Couleur de référence
- $taille : int
-
Nombre de couleurs à produire
- $ecart_teinte : float = 30.0
-
Écart de teinte entre deux couleurs consécutives, en degrés. Un écart de 15 à 30° préserve la parenté visuelle des couleurs
Return values
array<string|int, mixed> —Nuancier
nuancier_complementaire()
Produit un nuancier complémentaire, réunissant les variations d'une couleur et celles de son opposée sur le cercle chromatique.
nuancier_complementaire(string $hex[, int $variations = 3 ]) : array<string|int, mixed>
Parameters
- $hex : string
-
Couleur de référence
- $variations : int = 3
-
Nombre de variations produites pour chacune des deux teintes
Return values
array<string|int, mixed> —Nuancier de 2 × $variations couleurs
nuancier_triadique()
Produit un nuancier triadique, réunissant les variations de trois teintes espacées de 120° sur le cercle chromatique.
nuancier_triadique(string $hex[, int $variations = 2 ]) : array<string|int, mixed>
Parameters
- $hex : string
-
Couleur de référence
- $variations : int = 2
-
Nombre de variations produites pour chacune des trois teintes
Return values
array<string|int, mixed> —Nuancier de 3 × $variations couleurs
nuancier_sequentiel()
Produit un nuancier séquentiel en interpolant la clarté et le chroma à teinte constante.
nuancier_sequentiel(string $hex_base, int $taille[, null|float $luminosite_min = null ][, null|float $luminosite_max = null ][, null|float $chroma_min = null ][, null|float $chroma_max = null ]) : array<string|int, mixed>
L'interpolation se fait dans un espace perceptuellement régulier, ce qui donne des écarts visuels réguliers entre couleurs consécutives — propriété recherchée pour représenter une variable ordonnée sur une carte.
Le chroma de chaque couleur est plafonné sur ce que le gamut sRGB autorise à sa clarté, faute de quoi la conversion écrêterait les composantes une à une : la rampe y perdrait sa teinte et n'atteindrait pas les clartés demandées. Chaque couleur est plafonnée sur son propre maximum plutôt que la rampe entière sur le plus petit d'entre eux, afin de rester aussi vive que possible ; le chroma varie donc le long de la rampe, ce qui est le comportement des nuanciers séquentiels de référence.
Parameters
- $hex_base : string
-
Couleur de référence, dont la teinte est conservée
- $taille : int
-
Nombre de couleurs à produire
- $luminosite_min : null|float = null
-
Clarté de départ, 0-100. Vaut 20 par défaut
- $luminosite_max : null|float = null
-
Clarté d'arrivée, 0-100. Vaut 90 par défaut
- $chroma_min : null|float = null
-
Chroma de départ. Par défaut celui de la couleur de référence
- $chroma_max : null|float = null
-
Chroma d'arrivée. Par défaut celui de la couleur de référence
Return values
array<string|int, mixed> —Nuancier
nuancier_divergent()
Produit un nuancier divergent, joignant deux teintes extrêmes en passant par un point neutre.
nuancier_divergent(string $hex1, string $hex2, int $taille[, float $luminosite_centrale = 90.0 ][, float $chroma_central = 5.0 ]) : array<string|int, mixed>
Parameters
- $hex1 : string
-
Couleur de la première extrémité
- $hex2 : string
-
Couleur de la seconde extrémité
- $taille : int
-
Nombre total de couleurs, un nombre impair ménageant une couleur centrale
- $luminosite_centrale : float = 90.0
-
Clarté du point neutre, 0-100. Une valeur de 85 à 95 le rend discret
- $chroma_central : float = 5.0
-
Chroma du point neutre. Une valeur de 0 à 10 le rend quasi achromatique
Return values
array<string|int, mixed> —Nuancier
nuancier_qualitatif()
Produit un nuancier qualitatif, composé de teintes réparties régulièrement sur le cercle chromatique à chroma constant.
nuancier_qualitatif(int $taille[, float $luminosite = 65.0 ][, float $chroma = 60.0 ][, float $teinte_debut = 0.0 ][, float $etalement_clarte = 0.0 ]) : array<string|int, mixed>
Les couleurs y sont perceptuellement équivalentes : aucune ne domine visuellement les autres, ce qui convient à la représentation de modalités sans ordre.
À clarté constante, ce nuancier n'est pas lisible par un daltonien. Un protanope ou un deutéranope ne perçoit
plus l'axe rouge-vert : le cercle chromatique s'effondre sur un seul axe, et il ne lui reste, pour distinguer
deux couleurs, que cet axe résiduel et la clarté — précisément ce que la clarté constante lui retire. C'est à
quoi répond $etalement_clarte, qui échelonne les couleurs de part et d'autre de $luminosite.
Parameters
- $taille : int
-
Nombre de couleurs à produire. Au-delà de huit, les teintes deviennent difficiles à distinguer
- $luminosite : float = 65.0
-
Clarté centrale, 0-100
- $chroma : float = 60.0
-
Chroma commun
- $teinte_debut : float = 0.0
-
Teinte de la première couleur, en degrés
- $etalement_clarte : float = 0.0
-
Amplitude de clarté balayée par le nuancier, en points de clarté. Nulle par défaut, les couleurs partageant alors la même clarté. Les clartés obtenues sont ramenées dans l'intervalle 0-100
Tags
Return values
array<string|int, mixed> —Nuancier
nuancier_multi_teintes()
Produit un nuancier multi-teintes, en déclinant chaque teinte fournie sur une plage de clarté.
nuancier_multi_teintes(array<string|int, mixed> $teintes, int $taille[, float $luminosite_min = 30.0 ][, float $luminosite_max = 90.0 ][, float $chroma = 50.0 ]) : array<string|int, mixed>
Parameters
- $teintes : array<string|int, mixed>
-
Liste des teintes, en degrés
- $taille : int
-
Nombre total de couleurs, réparties entre les teintes
- $luminosite_min : float = 30.0
-
Clarté de départ de chaque déclinaison, 0-100
- $luminosite_max : float = 90.0
-
Clarté d'arrivée de chaque déclinaison, 0-100
- $chroma : float = 50.0
-
Chroma commun
Return values
array<string|int, mixed> —Nuancier d'au plus $taille couleurs
nuancier_inverser()
Renverse l'ordre des couleurs d'un nuancier.
nuancier_inverser(array<string|int, mixed> $nuancier) : array<string|int, mixed>
Parameters
- $nuancier : array<string|int, mixed>
-
Nuancier à renverser
Return values
array<string|int, mixed> —Nuancier renversé
nuancier_extraire()
Extrait d'un nuancier un sous-ensemble de couleurs réparties régulièrement, extrémités comprises.
nuancier_extraire(array<string|int, mixed> $nuancier, int $nombre) : array<string|int, mixed>
Parameters
- $nuancier : array<string|int, mixed>
-
Nuancier de départ
- $nombre : int
-
Nombre de couleurs à extraire
Return values
array<string|int, mixed> —Nuancier extrait, ou le nuancier de départ si celui-ci ne compte pas assez de couleurs, ou un tableau vide si le nombre demandé est nul ou négatif
nuancier_uniformite()
Mesure l'uniformité perceptuelle d'un nuancier, c'est-à-dire la régularité des écarts entre ses couleurs consécutives.
nuancier_uniformite(array<string|int, mixed> $nuancier) : null|array<string|int, mixed>
Un nuancier uniforme fait progresser la perception au même rythme que la donnée représentée : c'est la propriété qui distingue les palettes conçues pour la cartographie thématique des simples dégradés. Plus le coefficient de variation est faible, plus les écarts sont réguliers.
Parameters
- $nuancier : array<string|int, mixed>
-
Nuancier à mesurer
Tags
Return values
null|array<string|int, mixed> —Mesures du nuancier :
- index
delta_e_moyen: écart perceptuel ΔE₀₀ moyen entre couleurs consécutives - index
ecart_type: dispersion de ces écarts - index
coefficient_variation: dispersion rapportée à la moyenne, en pourcentage Renvoienullsi le nuancier compte moins de deux couleurs, ou si toutes ses couleurs sont identiques : la régularité des écarts n'a alors pas de sens.
nuancier_contraste_minimal()
Détermine le rapport de contraste le plus faible entre les couleurs consécutives d'un nuancier.
nuancier_contraste_minimal(array<string|int, mixed> $nuancier) : null|float
C'est le maillon faible du nuancier : deux plages voisines d'une carte présentant ce rapport seront les plus difficiles à distinguer.
Parameters
- $nuancier : array<string|int, mixed>
-
Nuancier à mesurer
Return values
null|float —Rapport de contraste minimal, ou null si le nuancier compte moins de deux couleurs
nuancier_progression_clarte()
Décrit la progression de clarté d'un nuancier.
nuancier_progression_clarte(array<string|int, mixed> $nuancier[, float $tolerance = 0.5 ]) : null|array<string|int, mixed>
C'est la mesure qui distingue un nuancier séquentiel de tous les autres. Un séquentiel représente une variable ordonnée, et ce qui porte cet ordre n'est pas la teinte mais la clarté : c'est elle qui survit au daltonisme, au tirage en noir et blanc et à la photocopie. Un nuancier séquentiel dont la clarté n'est pas monotone est défectueux, même si ses écarts perceptuels sont parfaitement réguliers.
nuancier_uniformite() ne sait pas faire cette différence : un divergent bien construit affiche un aussi bon
coefficient de variation qu'un séquentiel, ses couleurs étant régulièrement espacées de part et d'autre de son
point neutre. Les deux mesures sont complémentaires — la régularité des écarts d'un côté, le sens de la
progression de l'autre.
Parameters
- $nuancier : array<string|int, mixed>
-
Nuancier à mesurer
- $tolerance : float = 0.5
-
Écart de clarté en deçà duquel deux couleurs consécutives sont tenues pour de même clarté. La valeur par défaut absorbe le bruit de la quantification sur huit bits, très inférieur au seuil de perception
Tags
Return values
null|array<string|int, mixed> —Mesures de la progression :
- index
clarte_minetclarte_max: clartés extrêmes rencontrées, 0-100 - index
etendue: amplitude balayée, en points de clarté - index
monotone:truesi la clarté progresse toujours dans le même sens,falsesi elle change de sens ou reste plate - index
sens:croissante,decroissante, ou chaîne vide si la progression n'est pas monotone - index
pas_minimal: plus petit écart de clarté entre deux couleurs consécutives, soit le maillon faible en noir et blanc Renvoienullsi le nuancier compte moins de deux couleurs.
nuancier_verifier_daltonisme()
Vérifie qu'un nuancier reste lisible pour les principales déficiences de la vision des couleurs.
nuancier_verifier_daltonisme(array<string|int, mixed> $nuancier[, string $type = '' ][, float $seuil = 10.0 ][, int $classes = 12 ]) : null|array<string|int, mixed>
Un nuancier cartographique ne remplit son office que si ses couleurs restent distinctes pour tout le monde. La fonction simule la perception de chaque couleur, puis mesure l'écart perceptuel le plus faible entre deux d'entre elles : c'est le couple qui se confondra en premier.
Le critère dépend du type du nuancier, parce que « rester lisible » n'y veut pas dire la même chose. Sur une carte, un nuancier qualitatif se lit en comparant deux plages quelconques à la légende, tandis qu'un séquentiel se lit comme un gradient : ce qu'il faut y préserver n'est pas la distinction de chaque couple mais l'ordre.
qualitative, et tout type non reconnu : tous les couples doivent rester distinguables. C'est le critère le plus exigeant, retenu par prudence pour les types dont on ne sait rien.sequentialetperceptual_sequential: la progression de clarté doit survivre, c'est-à-dire rester monotone et conserver la moitié au moins de son amplitude. C'est ce qui rend sûrs les séquentiels monochromes, dont les couleurs sont pourtant voisines deux à deux.diverging: les deux arcs doivent rester discernables l'un de l'autre. L'échec caractéristique d'un divergent n'est pas la confusion de deux voisines mais celle de ses deux versants, qui fait perdre le sens de l'écart au point neutre.
Parameters
- $nuancier : array<string|int, mixed>
-
Nuancier à contrôler
- $type : string = ''
-
Type du nuancier, qui détermine le critère appliqué
- $seuil : float = 10.0
-
Écart perceptuel ΔE₀₀ en deçà duquel deux couleurs sont tenues pour confondues. Sans effet sur le critère de progression, dont le seuil se déduit du nuancier lui-même
- $classes : int = 12
-
Nombre maximal de classes sur lesquelles porte la comparaison des couples. La valeur par défaut est le plus grand nombre de couleurs que publient les collections de référence, et au-delà duquel une carte choroplèthe cesse d'être lisible
Tags
Return values
null|array<string|int, mixed> —Mesures du contrôle :
- index
critere:couples,arcsouprogression - index
seuil: seuil effectivement appliqué, dans l'unité du critère — un écart ΔE₀₀ pourcouplesetarcs, une amplitude de clarté pourprogression - index
lisible:truesi les trois déficiences sont lisibles - un index par déficience —
protanopie,deuteranopieettritanopie— portant :- index
mesure: grandeur mesurée, dans l'unité du critère. Nulle si la progression est rompue, ce qui la place sous n'importe quel seuil - index
couple: les deux couleurs d'origine à l'origine de la mesure, vide pour le critère de progression - index
lisible:truesi la mesure atteint le seuil Renvoienullsi le nuancier compte moins de deux couleurs.
- index
nuancier_couleur_a_pourcentage()
Renvoie la couleur d'un nuancier correspondant à une position exprimée en pourcentage.
nuancier_couleur_a_pourcentage(array<string|int, mixed> $nuancier, float $pourcentage) : null|string
Parameters
- $nuancier : array<string|int, mixed>
-
Nuancier à interroger
- $pourcentage : float
-
Position dans le nuancier, 0-100. Les valeurs hors bornes sont ramenées aux extrémités
Return values
null|string —Couleur hexadécimale, ou null si le nuancier est vide
nuancier_couleur_pour_valeur()
Renvoie la couleur d'un nuancier représentant une valeur située dans un intervalle donné.
nuancier_couleur_pour_valeur(array<string|int, mixed> $nuancier, float $valeur, float $min, float $max) : null|string
C'est la jonction entre une série de données et un nuancier : à chaque valeur correspond une couleur, ce qui constitue le principe même de la carte choroplèthe.
Parameters
- $nuancier : array<string|int, mixed>
-
Nuancier à interroger
- $valeur : float
-
Valeur à représenter. Les valeurs hors bornes sont ramenées aux extrémités
- $min : float
-
Borne inférieure de l'intervalle
- $max : float
-
Borne supérieure de l'intervalle
Tags
Return values
null|string —Couleur hexadécimale, ou null si le nuancier est vide