COLORIMETRIE
Table of Contents
Constants
- _EZPALETTE_CIE_EPSILON = 0.008855999999999999
- Constantes de la CIE définissant le raccord entre la partie cubique et la partie linéaire des fonctions de transfert de CIE L*a*b* et CIE L*u*v*.
- _EZPALETTE_CIE_KAPPA = 903.3
- _EZPALETTE_D65_X = 95.047
- Coordonnées XYZ du blanc de référence D65, sur l'échelle 0-100.
- _EZPALETTE_D65_Y = 100.0
- _EZPALETTE_D65_Z = 108.883
- _EZPALETTE_GAMUT_TOLERANCE = 0.5 / 255
- Tolérance retenue pour juger qu'une couleur tient dans le gamut sRGB, exprimée en composante normalisée.
Functions
- colorimetrie_srgb_lineariser() : float
- Linéarise une composante sRGB en supprimant sa correction gamma.
- colorimetrie_srgb_corriger_gamma() : float
- Applique la correction gamma à une composante sRGB linéaire.
- colorimetrie_hex_to_dec() : array<string|int, mixed>
- Convertit une couleur hexadécimale en composantes RGB décimales.
- colorimetrie_dec_to_hex() : string
- Convertit des composantes RGB décimales en couleur hexadécimale.
- colorimetrie_hex_to_hsl() : array<string|int, mixed>
- Convertit une couleur hexadécimale en HSL.
- colorimetrie_hsl_to_hex() : string
- Convertit des coordonnées HSL en couleur hexadécimale.
- colorimetrie_rgb_to_xyz() : array<string|int, mixed>
- Convertit des composantes RGB décimales en coordonnées XYZ, en prenant D65 pour blanc de référence.
- colorimetrie_xyz_to_srgb_normalise() : array<string|int, mixed>
- Convertit des coordonnées XYZ en composantes sRGB normalisées, sans écrêtage.
- colorimetrie_xyz_to_rgb() : array<string|int, mixed>
- Convertit des coordonnées XYZ en composantes RGB décimales, en prenant D65 pour blanc de référence.
- colorimetrie_xyz_to_lab() : array<string|int, mixed>
- Convertit des coordonnées XYZ en CIE L*a*b*, en prenant D65 pour blanc de référence.
- colorimetrie_lab_to_xyz() : array<string|int, mixed>
- Convertit des coordonnées CIE L*a*b* en XYZ, en prenant D65 pour blanc de référence.
- colorimetrie_xyz_to_luv() : array<string|int, mixed>
- Convertit des coordonnées XYZ en CIE L*u*v*, en prenant D65 pour blanc de référence.
- colorimetrie_luv_to_xyz() : array<string|int, mixed>
- Convertit des coordonnées CIE L*u*v* en XYZ, en prenant D65 pour blanc de référence.
- colorimetrie_cartesien_to_polaire() : array<string|int, mixed>
- Convertit des coordonnées cartésiennes en coordonnées polaires (chroma et teinte).
- colorimetrie_lab_to_polarlab() : array<string|int, mixed>
- Convertit des coordonnées CIE L*a*b* en polarLAB.
- colorimetrie_polarlab_to_lab() : array<string|int, mixed>
- Convertit des coordonnées polarLAB en CIE L*a*b*.
- colorimetrie_luv_to_polarluv() : array<string|int, mixed>
- Convertit des coordonnées CIE L*u*v* en polarLUV, c'est-à-dire en HCL.
- colorimetrie_polarluv_to_luv() : array<string|int, mixed>
- Convertit des coordonnées polarLUV, c'est-à-dire HCL, en CIE L*u*v*.
- colorimetrie_xyz_to_oklab() : array<string|int, mixed>
- Convertit des coordonnées XYZ en Oklab, en prenant D65 pour blanc de référence.
- colorimetrie_oklab_to_xyz() : array<string|int, mixed>
- Convertit des coordonnées Oklab en XYZ, en prenant D65 pour blanc de référence.
- colorimetrie_oklab_to_oklch() : array<string|int, mixed>
- Convertit des coordonnées Oklab en Oklch, leur forme polaire.
- colorimetrie_oklch_to_oklab() : array<string|int, mixed>
- Convertit des coordonnées Oklch en Oklab.
- colorimetrie_hex_to_lab() : array<string|int, mixed>
- Convertit une couleur hexadécimale en CIE L*a*b*.
- colorimetrie_hex_to_polarlab() : array<string|int, mixed>
- Convertit une couleur hexadécimale en polarLAB.
- colorimetrie_polarlab_to_hex() : string
- Convertit des coordonnées polarLAB en couleur hexadécimale.
- colorimetrie_hex_to_hcl() : array<string|int, mixed>
- Convertit une couleur hexadécimale en HCL, c'est-à-dire en polarLUV.
- colorimetrie_hcl_to_hex() : string
- Convertit des coordonnées HCL, c'est-à-dire polarLUV, en couleur hexadécimale.
- colorimetrie_hex_to_oklab() : array<string|int, mixed>
- Convertit une couleur hexadécimale en Oklab.
- colorimetrie_oklab_to_hex() : string
- Convertit des coordonnées Oklab en couleur hexadécimale.
- colorimetrie_hex_to_oklch() : array<string|int, mixed>
- Convertit une couleur hexadécimale en Oklch.
- colorimetrie_oklch_to_hex() : string
- Convertit des coordonnées Oklch en couleur hexadécimale.
- colorimetrie_polarlab_est_dans_gamut() : bool
- Indique si une couleur exprimée en polarLAB est représentable en sRGB.
- colorimetrie_polarlab_chroma_maximal() : float
- Calcule le chroma le plus élevé qu'une teinte et une clarté données autorisent en sRGB.
- colorimetrie_interpoler() : string
- Interpole entre deux couleurs, dans l'espace demandé.
- colorimetrie_simuler_deficience() : string
- Simule la perception d'une couleur par une personne dont la vision des couleurs est déficiente.
- colorimetrie_luminance_relative() : float
- Calcule la luminance relative d'une couleur, telle que définie par les WCAG.
- colorimetrie_delta_e_76() : float
- Calcule l'écart perceptuel ΔE*ab entre deux couleurs, selon la formule CIE 1976.
- colorimetrie_contraste_wcag() : float
- Calcule le rapport de contraste entre deux couleurs, tel que défini par les WCAG.
- colorimetrie_lab_delta_e_2000() : float
- Calcule l'écart perceptuel ΔE₀₀ entre deux couleurs exprimées en CIE L*a*b*, selon la formule CIEDE2000.
- colorimetrie_delta_e_2000() : float
- Calcule l'écart perceptuel ΔE₀₀ entre deux couleurs hexadécimales, selon la formule CIEDE2000.
Constants
_EZPALETTE_CIE_EPSILON
Constantes de la CIE définissant le raccord entre la partie cubique et la partie linéaire des fonctions de transfert de CIE L*a*b* et CIE L*u*v*.
public
mixed
_EZPALETTE_CIE_EPSILON
= 0.008855999999999999
_EZPALETTE_CIE_KAPPA
public
mixed
_EZPALETTE_CIE_KAPPA
= 903.3
_EZPALETTE_D65_X
Coordonnées XYZ du blanc de référence D65, sur l'échelle 0-100.
public
mixed
_EZPALETTE_D65_X
= 95.047
_EZPALETTE_D65_Y
public
mixed
_EZPALETTE_D65_Y
= 100.0
_EZPALETTE_D65_Z
public
mixed
_EZPALETTE_D65_Z
= 108.883
_EZPALETTE_GAMUT_TOLERANCE
Tolérance retenue pour juger qu'une couleur tient dans le gamut sRGB, exprimée en composante normalisée.
public
mixed
_EZPALETTE_GAMUT_TOLERANCE
= 0.5 / 255
Elle vaut un demi-niveau de quantification sur huit bits : en deçà, l'écrêtage ne modifie pas l'octet rendu, et la couleur est donc représentable en pratique. Un seuil infinitésimal écarterait des couleurs qui s'affichent pourtant à l'identique.
Functions
colorimetrie_srgb_lineariser()
Linéarise une composante sRGB en supprimant sa correction gamma.
colorimetrie_srgb_lineariser(float $coordonnee) : float
La fonction opère sur une seule composante (R, G ou B), pas sur une couleur complète, et travaille en valeurs
normalisées : elle attend un flottant dans l'intervalle [0, 1] et rend un flottant dans le même intervalle. La
normalisation est donc à la charge de l'appelant, qui divise la composante 0-255 par 255 : pour la couleur
rgb(150, 160, 14), on appelle colorimetrie_srgb_lineariser(150 / 255), etc.
La valeur d'entrée est une valeur encodée, à peu près perceptuelle, telle que stockée dans un fichier ou une
feuille de style ; la valeur de sortie est proportionnelle à l'intensité lumineuse. Cette conversion est un
préalable obligatoire à tout calcul linéaire sur la lumière : passage à XYZ et calcul de la luminance relative.
Ainsi, 14 / 255 vaut 0,0549 en encodé mais seulement 0,0044 en lumière.
En pratique, la fonction n'est pas appelée directement : colorimetrie_rgb_to_xyz() et colorimetrie_luminance_relative()
s'en chargent pour les trois composantes.
Parameters
- $coordonnee : float
-
Composante sRGB encodée et normalisée, dans l'intervalle [0, 1]
Tags
Return values
float —Composante linéarisée, dans l'intervalle [0, 1]
colorimetrie_srgb_corriger_gamma()
Applique la correction gamma à une composante sRGB linéaire.
colorimetrie_srgb_corriger_gamma(float $coordonnee) : float
Réciproque exacte de colorimetrie_srgb_lineariser() : elle attend une composante linéaire normalisée et rend la
composante encodée correspondante, toujours normalisée. Il revient à l'appelant de la dénormaliser en la
multipliant par 255.
Une couleur hors du gamut sRGB produit ici des composantes linéaires négatives, prises en charge par la partie
linéaire de la fonction : elles traversent la conversion sans produire de NAN et sont écrêtées plus loin, au
moment de la dénormalisation.
Parameters
- $coordonnee : float
-
Composante sRGB linéaire normalisée, dans l'intervalle [0, 1]
Tags
Return values
float —Composante encodée en gamma, dans l'intervalle [0, 1]
colorimetrie_hex_to_dec()
Convertit une couleur hexadécimale en composantes RGB décimales.
colorimetrie_hex_to_dec(string $hex) : array<string|int, mixed>
C'est la porte d'entrée de tout le fichier : chaque chaîne de conversion partant d'une couleur hexadécimale commence ici. Elle est donc la seule à valider son entrée, ce qui dispense les autres de le faire.
Sont acceptées les notations sur trois ou six caractères hexadécimaux, avec ou sans # et quelle que soit la
casse. Toute autre entrée rend le noir et est journalisée : elle ne peut pas être devinée, et la laisser passer
serait pire. hexdec() en tirerait en effet une couleur en ignorant silencieusement les caractères invalides —
bonjour donnerait rgb(11, 0, 0) — au prix, depuis PHP 8.3, d'une dépréciation par composante.
Parameters
- $hex : string
-
Couleur hexadécimale, avec ou sans #, sur 3 ou 6 caractères
Tags
Return values
array<string|int, mixed> —Composantes RGB, index r, g et b, chacune dans l'intervalle 0-255. Le noir si l'entrée n'est
pas une couleur hexadécimale
colorimetrie_dec_to_hex()
Convertit des composantes RGB décimales en couleur hexadécimale.
colorimetrie_dec_to_hex(int $r, int $g, int $b) : string
Les composantes sont ramenées dans l'intervalle 0-255 : une couleur hors du gamut sRGB est donc écrêtée sur le bord du gamut plutôt que rejetée.
Parameters
- $r : int
-
Rouge, 0-255
- $g : int
-
Vert, 0-255
- $b : int
-
Bleu, 0-255
Return values
string —Couleur hexadécimale au format #RRGGBB
colorimetrie_hex_to_hsl()
Convertit une couleur hexadécimale en HSL.
colorimetrie_hex_to_hsl(string $hex) : array<string|int, mixed>
Parameters
- $hex : string
-
Couleur hexadécimale
Return values
array<string|int, mixed> —Coordonnées HSL :
- index
h: teinte, 0-360 - index
s: saturation, 0-1 - index
l: luminosité, 0-1
colorimetrie_hsl_to_hex()
Convertit des coordonnées HSL en couleur hexadécimale.
colorimetrie_hsl_to_hex(float $h, float $s, float $l) : string
Parameters
- $h : float
-
Teinte, 0-360
- $s : float
-
Saturation, 0-1
- $l : float
-
Luminosité, 0-1
Return values
string —Couleur hexadécimale au format #RRGGBB
colorimetrie_rgb_to_xyz()
Convertit des composantes RGB décimales en coordonnées XYZ, en prenant D65 pour blanc de référence.
colorimetrie_rgb_to_xyz(int $r, int $g, int $b) : array<string|int, mixed>
Parameters
- $r : int
-
Rouge, 0-255
- $g : int
-
Vert, 0-255
- $b : int
-
Bleu, 0-255
Return values
array<string|int, mixed> —Coordonnées XYZ sur l'échelle 0-100, index x, y et z
colorimetrie_xyz_to_srgb_normalise()
Convertit des coordonnées XYZ en composantes sRGB normalisées, sans écrêtage.
colorimetrie_xyz_to_srgb_normalise(float $x, float $y, float $z) : array<string|int, mixed>
Étape commune à colorimetrie_xyz_to_rgb() et aux fonctions d'interrogation du gamut : elle applique la matrice XYZ
vers sRGB, puis la correction gamma, et rend les trois composantes telles quelles.
Une couleur représentable en sRGB a ses trois composantes dans l'intervalle [0, 1] ; une composante hors de cet
intervalle signale une couleur hors du gamut. C'est précisément l'information que l'écrêtage de
colorimetrie_xyz_to_rgb() détruit, et la raison d'être de cette fonction.
Parameters
- $x : float
-
Coordonnée X, 0-100
- $y : float
-
Coordonnée Y, 0-100
- $z : float
-
Coordonnée Z, 0-100
Tags
Return values
array<string|int, mixed> —Composantes sRGB normalisées et non écrêtées, index r, g et b
colorimetrie_xyz_to_rgb()
Convertit des coordonnées XYZ en composantes RGB décimales, en prenant D65 pour blanc de référence.
colorimetrie_xyz_to_rgb(float $x, float $y, float $z) : array<string|int, mixed>
Une couleur hors du gamut sRGB est écrêtée composante par composante. L'opération n'est pas neutre : elle
déplace la teinte et écrase le chroma, sans le signaler. Pour construire une rampe régulière, interroger le
gamut au préalable avec colorimetrie_polarlab_chroma_maximal().
Parameters
- $x : float
-
Coordonnée X, 0-100
- $y : float
-
Coordonnée Y, 0-100
- $z : float
-
Coordonnée Z, 0-100
Tags
Return values
array<string|int, mixed> —Composantes [r, g, b] entières, écrêtées dans l'intervalle 0-255
colorimetrie_xyz_to_lab()
Convertit des coordonnées XYZ en CIE L*a*b*, en prenant D65 pour blanc de référence.
colorimetrie_xyz_to_lab(float $x, float $y, float $z) : array<string|int, mixed>
Parameters
- $x : float
-
Coordonnée X, 0-100
- $y : float
-
Coordonnée Y, 0-100
- $z : float
-
Coordonnée Z, 0-100
Return values
array<string|int, mixed> —Coordonnées LAB, index l (0-100), a et b
colorimetrie_lab_to_xyz()
Convertit des coordonnées CIE L*a*b* en XYZ, en prenant D65 pour blanc de référence.
colorimetrie_lab_to_xyz(float $l, float $a, float $b) : array<string|int, mixed>
Parameters
- $l : float
-
Clarté L*, 0-100
- $a : float
-
Coordonnée a*
- $b : float
-
Coordonnée b*
Return values
array<string|int, mixed> —Coordonnées XYZ sur l'échelle 0-100, index x, y et z
colorimetrie_xyz_to_luv()
Convertit des coordonnées XYZ en CIE L*u*v*, en prenant D65 pour blanc de référence.
colorimetrie_xyz_to_luv(float $x, float $y, float $z) : array<string|int, mixed>
Parameters
- $x : float
-
Coordonnée X, 0-100
- $y : float
-
Coordonnée Y, 0-100
- $z : float
-
Coordonnée Z, 0-100
Return values
array<string|int, mixed> —Coordonnées LUV, index l (0-100), u et v
colorimetrie_luv_to_xyz()
Convertit des coordonnées CIE L*u*v* en XYZ, en prenant D65 pour blanc de référence.
colorimetrie_luv_to_xyz(float $l, float $u, float $v) : array<string|int, mixed>
Parameters
- $l : float
-
Clarté L*, 0-100
- $u : float
-
Coordonnée u*
- $v : float
-
Coordonnée v*
Return values
array<string|int, mixed> —Coordonnées XYZ sur l'échelle 0-100, index x, y et z
colorimetrie_cartesien_to_polaire()
Convertit des coordonnées cartésiennes en coordonnées polaires (chroma et teinte).
colorimetrie_cartesien_to_polaire(float $abscisse, float $ordonnee) : array<string|int, mixed>
Fonction interne commune au polarLAB et au polarLUV, qui ne diffèrent que par le plan sur lequel la transformation polaire est appliquée.
Parameters
- $abscisse : float
-
Coordonnée a*, u* ou a
- $ordonnee : float
-
Coordonnée b*, v* ou b
Return values
array<string|int, mixed> —Coordonnées polaires, index c (chroma) et h (teinte en degrés, 0-360)
colorimetrie_lab_to_polarlab()
Convertit des coordonnées CIE L*a*b* en polarLAB.
colorimetrie_lab_to_polarlab(float $l, float $a, float $b) : array<string|int, mixed>
Parameters
- $l : float
-
Clarté L*, 0-100
- $a : float
-
Coordonnée a*
- $b : float
-
Coordonnée b*
Return values
array<string|int, mixed> —Coordonnées polarLAB, index l, c (chroma) et h (teinte, 0-360)
colorimetrie_polarlab_to_lab()
Convertit des coordonnées polarLAB en CIE L*a*b*.
colorimetrie_polarlab_to_lab(float $h, float $c, float $l) : array<string|int, mixed>
Parameters
- $h : float
-
Teinte, 0-360
- $c : float
-
Chroma
- $l : float
-
Clarté L*, 0-100
Return values
array<string|int, mixed> —Coordonnées LAB, index l, a et b
colorimetrie_luv_to_polarluv()
Convertit des coordonnées CIE L*u*v* en polarLUV, c'est-à-dire en HCL.
colorimetrie_luv_to_polarluv(float $l, float $u, float $v) : array<string|int, mixed>
Parameters
- $l : float
-
Clarté L*, 0-100
- $u : float
-
Coordonnée u*
- $v : float
-
Coordonnée v*
Return values
array<string|int, mixed> —Coordonnées HCL, index l, c (chroma) et h (teinte, 0-360)
colorimetrie_polarluv_to_luv()
Convertit des coordonnées polarLUV, c'est-à-dire HCL, en CIE L*u*v*.
colorimetrie_polarluv_to_luv(float $h, float $c, float $l) : array<string|int, mixed>
Parameters
- $h : float
-
Teinte, 0-360
- $c : float
-
Chroma
- $l : float
-
Clarté L*, 0-100
Return values
array<string|int, mixed> —Coordonnées LUV, index l, u et v
colorimetrie_xyz_to_oklab()
Convertit des coordonnées XYZ en Oklab, en prenant D65 pour blanc de référence.
colorimetrie_xyz_to_oklab(float $x, float $y, float $z) : array<string|int, mixed>
Oklab poursuit le même but que CIE Lab* — une distance euclidienne qui approche la distance perçue — mais son
ajustement est plus récent et corrige deux défauts bien identifiés de son aîné : la teinte des bleus dérive vers
le violet lorsqu'on éclaircit, et les dégradés passant par le bleu virent au violet en leur milieu. C'est
l'espace que retient CSS pour ses fonctions oklab() et oklch(), et celui que recommandent aujourd'hui la
plupart des outils pour construire un dégradé.
Ses échelles ne sont pas celles du reste du fichier : la clarté va de 0 à 1 et non de 0 à 100, et les
coordonnées a et b restent comprises entre -0,4 et 0,4 environ. C'est la convention d'Ottosson, reprise
telle quelle par CSS ; la renormaliser sur 0-100 rendrait les valeurs incomparables à toute autre
implémentation, ce qui coûterait plus cher que l'irrégularité.
Parameters
- $x : float
-
Coordonnée X, 0-100
- $y : float
-
Coordonnée Y, 0-100
- $z : float
-
Coordonnée Z, 0-100
Tags
Return values
array<string|int, mixed> —Coordonnées Oklab : index l (clarté, 0-1), a et b
colorimetrie_oklab_to_xyz()
Convertit des coordonnées Oklab en XYZ, en prenant D65 pour blanc de référence.
colorimetrie_oklab_to_xyz(float $l, float $a, float $b) : array<string|int, mixed>
Parameters
- $l : float
-
Clarté, 0-1
- $a : float
-
Coordonnée a
- $b : float
-
Coordonnée b
Return values
array<string|int, mixed> —Coordonnées XYZ sur l'échelle 0-100, index x, y et z
colorimetrie_oklab_to_oklch()
Convertit des coordonnées Oklab en Oklch, leur forme polaire.
colorimetrie_oklab_to_oklch(float $l, float $a, float $b) : array<string|int, mixed>
C'est à Oklab ce que polarLAB est à CIE Lab* : les mêmes couleurs, décrites par une teinte et un chroma
plutôt que par deux coordonnées cartésiennes. C'est la forme qu'expose CSS sous le nom oklch().
Parameters
- $l : float
-
Clarté, 0-1
- $a : float
-
Coordonnée a
- $b : float
-
Coordonnée b
Return values
array<string|int, mixed> —Coordonnées Oklch : index l (clarté, 0-1), c (chroma, 0-0,4 environ) et h (teinte, 0-360)
colorimetrie_oklch_to_oklab()
Convertit des coordonnées Oklch en Oklab.
colorimetrie_oklch_to_oklab(float $h, float $c, float $l) : array<string|int, mixed>
Parameters
- $h : float
-
Teinte, 0-360
- $c : float
-
Chroma, 0-0,4 environ
- $l : float
-
Clarté, 0-1
Return values
array<string|int, mixed> —Coordonnées Oklab, index l, a et b
colorimetrie_hex_to_lab()
Convertit une couleur hexadécimale en CIE L*a*b*.
colorimetrie_hex_to_lab(string $hex) : array<string|int, mixed>
C'est la conversion à préférer dès qu'un même jeu de couleurs doit être comparé plusieurs fois : ΔE opère sur
des coordonnées LAB, et colorimetrie_delta_e_2000() refait cette conversion à chaque appel. Comparer n couleurs
deux à deux coûte donc n² conversions si l'on passe par elle, contre n en convertissant d'abord puis en
appelant colorimetrie_lab_delta_e_2000().
Parameters
- $hex : string
-
Couleur hexadécimale
Tags
Return values
array<string|int, mixed> —Coordonnées LAB, index l, a et b
colorimetrie_hex_to_polarlab()
Convertit une couleur hexadécimale en polarLAB.
colorimetrie_hex_to_polarlab(string $hex) : array<string|int, mixed>
Parameters
- $hex : string
-
Couleur hexadécimale
Return values
array<string|int, mixed> —Coordonnées polarLAB, index l, c et h
colorimetrie_polarlab_to_hex()
Convertit des coordonnées polarLAB en couleur hexadécimale.
colorimetrie_polarlab_to_hex(float $h, float $c, float $l) : string
Parameters
- $h : float
-
Teinte, 0-360
- $c : float
-
Chroma
- $l : float
-
Clarté, 0-100
Return values
string —Couleur hexadécimale au format #RRGGBB
colorimetrie_hex_to_hcl()
Convertit une couleur hexadécimale en HCL, c'est-à-dire en polarLUV.
colorimetrie_hex_to_hcl(string $hex) : array<string|int, mixed>
Parameters
- $hex : string
-
Couleur hexadécimale
Return values
array<string|int, mixed> —Coordonnées HCL, index l, c et h
colorimetrie_hcl_to_hex()
Convertit des coordonnées HCL, c'est-à-dire polarLUV, en couleur hexadécimale.
colorimetrie_hcl_to_hex(float $h, float $c, float $l) : string
Parameters
- $h : float
-
Teinte, 0-360
- $c : float
-
Chroma
- $l : float
-
Clarté, 0-100
Return values
string —Couleur hexadécimale au format #RRGGBB
colorimetrie_hex_to_oklab()
Convertit une couleur hexadécimale en Oklab.
colorimetrie_hex_to_oklab(string $hex) : array<string|int, mixed>
Parameters
- $hex : string
-
Couleur hexadécimale
Return values
array<string|int, mixed> —Coordonnées Oklab, index l (0-1), a et b
colorimetrie_oklab_to_hex()
Convertit des coordonnées Oklab en couleur hexadécimale.
colorimetrie_oklab_to_hex(float $l, float $a, float $b) : string
Parameters
- $l : float
-
Clarté, 0-1
- $a : float
-
Coordonnée a
- $b : float
-
Coordonnée b
Return values
string —Couleur hexadécimale au format #RRGGBB
colorimetrie_hex_to_oklch()
Convertit une couleur hexadécimale en Oklch.
colorimetrie_hex_to_oklch(string $hex) : array<string|int, mixed>
Parameters
- $hex : string
-
Couleur hexadécimale
Return values
array<string|int, mixed> —Coordonnées Oklch, index l (0-1), c et h
colorimetrie_oklch_to_hex()
Convertit des coordonnées Oklch en couleur hexadécimale.
colorimetrie_oklch_to_hex(float $h, float $c, float $l) : string
Parameters
- $h : float
-
Teinte, 0-360
- $c : float
-
Chroma, 0-0,4 environ
- $l : float
-
Clarté, 0-1
Return values
string —Couleur hexadécimale au format #RRGGBB
colorimetrie_polarlab_est_dans_gamut()
Indique si une couleur exprimée en polarLAB est représentable en sRGB.
colorimetrie_polarlab_est_dans_gamut(float $h, float $c, float $l) : bool
Les espaces perceptuels décrivent bien plus de couleurs qu'un écran n'en sait afficher : un triplet polarLAB
parfaitement valide peut n'avoir aucun équivalent sRGB. Dans ce cas colorimetrie_polarlab_to_hex() rend tout de même
une couleur, écrêtée composante par composante, dont la teinte et le chroma ne sont plus ceux demandés. Cette
fonction permet de le savoir avant de convertir.
Le test porte sur les composantes sRGB non écrêtées, à _EZPALETTE_GAMUT_TOLERANCE près : est tenue pour
représentable une couleur dont l'écrêtage ne changerait pas le rendu sur huit bits.
Parameters
- $h : float
-
Teinte, 0-360
- $c : float
-
Chroma
- $l : float
-
Clarté, 0-100
Tags
Return values
bool —true si la couleur est représentable en sRGB
colorimetrie_polarlab_chroma_maximal()
Calcule le chroma le plus élevé qu'une teinte et une clarté données autorisent en sRGB.
colorimetrie_polarlab_chroma_maximal(float $h, float $l[, float $precision = 0.05 ]) : float
C'est l'outil qui permet de construire une rampe honnête. Laisser l'écrêtage des composantes faire son œuvre déplace la teinte et écrase la clarté ; plafonner le chroma demandé sur ce maximum les préserve toutes deux, la seule concession étant une couleur moins vive là où le gamut ne suit pas. Deux stratégies s'offrent alors :
- plafonner couleur par couleur, chacune sur son propre maximum : la rampe reste aussi vive que possible, mais son chroma varie avec la clarté ;
- plafonner toute la rampe sur le plus petit des maxima : le chroma devient constant, au prix des couleurs les plus vives.
Sur un bleu de teinte 296 étalé de la clarté 20 à 90, le premier réglage ramène la dérive de teinte de 5,5° à moins de 0,25° et rend les clartés demandées à l'unité près.
La valeur rendue est le premier franchissement du bord du gamut en partant de l'axe des gris : tous les chromas qui lui sont inférieurs sont représentables, ce qui est la propriété dont une rampe a besoin.
Parameters
- $h : float
-
Teinte, 0-360
- $l : float
-
Clarté, 0-100
- $precision : float = 0.05
-
Largeur de l'intervalle en deçà de laquelle la dichotomie s'arrête
Tags
Return values
float —Chroma maximal représentable, nul si la clarté elle-même est hors de l'intervalle 0-100
colorimetrie_interpoler()
Interpole entre deux couleurs, dans l'espace demandé.
colorimetrie_interpoler(string $hex1, string $hex2, float $ratio[, string $espace = 'oklab' ]) : string
Le chemin suivi d'une couleur à l'autre dépend entièrement de l'espace : entre le bleu et le jaune, RGB traverse un gris terne, HSL parcourt les verts saturés, les espaces perceptuels tiennent le milieu. C'est pourquoi l'espace est un paramètre et non un détail d'implémentation.
Oklab est retenu par défaut. C'est aujourd'hui le meilleur choix pour un dégradé : il corrige la dérive des bleus vers le violet dont souffre CIE Lab*, précisément sur le trajet qu'empruntent le plus souvent les nuanciers séquentiels et divergents.
Dans les espaces à teinte — HSL, polarLAB, HCL, Oklch — l'interpolation suit le plus court des deux arcs du cercle chromatique. Lorsqu'une des deux couleurs est achromatique, sa teinte, fixée à zéro par convention, est remplacée par celle de l'autre extrémité : sans cette précaution, un dégradé vers le blanc virerait au rouge.
Parameters
- $hex1 : string
-
Couleur de départ, hexadécimale
- $hex2 : string
-
Couleur d'arrivée, hexadécimale
- $ratio : float
-
Position sur le trajet, de 0 pour la couleur de départ à 1 pour celle d'arrivée. Une valeur hors de cet intervalle est ramenée à ses bornes
- $espace : string = 'oklab'
-
Espace d'interpolation :
oklab,oklch,lab,polarlab,hcl,hslourgb. Toute autre valeur revient au défaut,oklab
Return values
string —Couleur hexadécimale au format #RRGGBB
colorimetrie_simuler_deficience()
Simule la perception d'une couleur par une personne dont la vision des couleurs est déficiente.
colorimetrie_simuler_deficience(string $hex[, string $type = 'deuteranopie' ]) : string
Une palette cartographique n'est lisible que si ses couleurs restent distinctes pour tout le monde. Cette fonction rend la couleur telle qu'elle est perçue, ce qui permet de comparer les couleurs simulées entre elles : deux couleurs qui se confondent après simulation se confondront pour le lecteur concerné.
Trois déficiences sont couvertes, toutes trois dans leur forme complète, ou dichromatique :
protanopie: absence des cônes sensibles au rouge ;deuteranopie: absence des cônes sensibles au vert, de loin la plus fréquente ;tritanopie: absence des cônes sensibles au bleu, la plus rare.
La simulation est une transformation linéaire des composantes RGB linéaires : elle modélise une réponse des photorécepteurs, qui dépend de la lumière reçue et non de la valeur encodée. C'est aussi pourquoi le résultat peut sortir du gamut, auquel cas il est écrêté comme partout ailleurs dans ce fichier.
Parameters
- $hex : string
-
Couleur hexadécimale
- $type : string = 'deuteranopie'
-
Déficience simulée :
deuteranopie,protanopieoutritanopie. Tout autre valeur rend la couleur inchangée
Tags
Return values
string —Couleur perçue, hexadécimale au format #RRGGBB
colorimetrie_luminance_relative()
Calcule la luminance relative d'une couleur, telle que définie par les WCAG.
colorimetrie_luminance_relative(int $r, int $g, int $b) : float
Parameters
- $r : int
-
Rouge, 0-255
- $g : int
-
Vert, 0-255
- $b : int
-
Bleu, 0-255
Tags
Return values
float —Luminance relative, 0 pour le noir et 1 pour le blanc
colorimetrie_delta_e_76()
Calcule l'écart perceptuel ΔE*ab entre deux couleurs, selon la formule CIE 1976.
colorimetrie_delta_e_76(string $hex1, string $hex2) : float
L'écart est la distance euclidienne entre les deux couleurs dans l'espace CIE Lab*, dont c'est précisément la raison d'être : y être équidistant approche l'équidistance perceptuelle.
Ordres de grandeur usuels : en deçà de 1 l'écart n'est pas perceptible, autour de 2,3 il correspond au seuil de discrimination, au-delà de 5 les deux couleurs se distinguent au premier coup d'œil.
Parameters
- $hex1 : string
-
Première couleur hexadécimale
- $hex2 : string
-
Seconde couleur hexadécimale
Tags
Return values
float —Écart perceptuel, nul si les deux couleurs sont identiques
colorimetrie_contraste_wcag()
Calcule le rapport de contraste entre deux couleurs, tel que défini par les WCAG.
colorimetrie_contraste_wcag(string $hex1, string $hex2) : float
Le rapport vaut 1 pour deux couleurs de même luminance et 21 entre le noir et le blanc. Les WCAG exigent 4,5 pour le niveau AA sur du texte courant, 7 pour le niveau AAA.
Parameters
- $hex1 : string
-
Première couleur hexadécimale
- $hex2 : string
-
Seconde couleur hexadécimale
Return values
float —Rapport de contraste, compris entre 1 et 21
colorimetrie_lab_delta_e_2000()
Calcule l'écart perceptuel ΔE₀₀ entre deux couleurs exprimées en CIE L*a*b*, selon la formule CIEDE2000.
colorimetrie_lab_delta_e_2000(float $l1, float $a1, float $b1, float $l2, float $a2, float $b2) : float
CIEDE2000 est la formule recommandée par la CIE depuis 2001 et normalisée par l'ISO/CIE 11664-6. Elle corrige les défauts les mieux documentés du ΔE*ab de 1976, qui surestime les écarts dans les bleus saturés et les sous-estime près des neutres — précisément les régions où se situent la plupart des palettes cartographiques.
Elle pondère les trois composantes de l'écart par des facteurs dépendant de la position dans l'espace, et ajoute un terme de rotation qui rend compte de l'inclinaison des ellipses de discrimination dans les bleus.
Parameters
- $l1 : float
-
Clarté de la première couleur
- $a1 : float
-
Coordonnée a* de la première couleur
- $b1 : float
-
Coordonnée b* de la première couleur
- $l2 : float
-
Clarté de la seconde couleur
- $a2 : float
-
Coordonnée a* de la seconde couleur
- $b2 : float
-
Coordonnée b* de la seconde couleur
Tags
Return values
float —Écart perceptuel, nul si les deux couleurs sont identiques
colorimetrie_delta_e_2000()
Calcule l'écart perceptuel ΔE₀₀ entre deux couleurs hexadécimales, selon la formule CIEDE2000.
colorimetrie_delta_e_2000(string $hex1, string $hex2) : float
Ordres de grandeur usuels : en deçà de 1 l'écart n'est pas perceptible, autour de 2,3 il correspond au seuil de discrimination, au-delà de 5 les deux couleurs se distinguent au premier coup d'œil.
Parameters
- $hex1 : string
-
Première couleur hexadécimale
- $hex2 : string
-
Seconde couleur hexadécimale
Return values
float —Écart perceptuel, nul si les deux couleurs sont identiques