Documentation du code de SPIP et de ses plugins

Palette Factory

Documentation

Table of Contents

Packages

Application
SPIP

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_COLLECTION_METADONNEES  = ['titre', 'version', 'source', 'licence', 'description', 'recommandations']
Métadonnées d'une collection que l'utilisateur renseigne lui-même.
_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.
_EZPALETTE_IMPRESSION_NB_ETENDUE  = 40.0
Amplitude de clarté minimale, en points, exigée d'un nuancier destiné à l'impression en noir et blanc.
_EZPALETTE_TYPE_CYCLIQUE  = 'cyclic'
_EZPALETTE_TYPE_DIVERGENTE  = 'diverging'
_EZPALETTE_TYPE_PERCEPTION_SEQUENTIELLE  = 'perceptual_sequential'
_EZPALETTE_TYPE_QUALITATIVE  = 'qualitative'
_EZPALETTE_TYPE_SEQUENTIELLE  = 'sequential'
_EZPALETTE_TYPES  = [\_EZPALETTE_TYPE_SEQUENTIELLE, \_EZPALETTE_TYPE_DIVERGENTE, \_EZPALETTE_TYPE_QUALITATIVE, \_EZPALETTE_TYPE_CYCLIQUE, \_EZPALETTE_TYPE_PERCEPTION_SEQUENTIELLE]

Functions

action_recharger_palette_collections_dist()  : void
Cette action permet à l'utilisateur de recharger en base de données, de façon sécurisée, les collections de palettes standard à partir de leur fichier JSON.
ezpalette_declarer_tables_interfaces()  : array<string|int, mixed>
Déclaration des informations tierces (alias, traitements, jointures, etc) sur les tables de la base de données modifiées ou ajoutées par le plugin.
ezpalette_declarer_tables_objets_sql()  : array<string|int, mixed>
Déclaration des nouvelles tables de la base de données propres au plugin.
ezpalette_upgrade()  : void
Installation du schéma de données propre au plugin et gestion des migrations suivant les évolutions du schéma.
ezpalette_vider_tables()  : void
Suppression de l'ensemble du schéma de données propre au plugin.
ezpalette_configurer()  : array<string|int, mixed>
Renvoie la configuration statique (non éditable) du plugin.
ezpalette_autoriser()  : void
Fonction appelée par le pipeline `autoriser`, dont la seule existence déclare le fichier.
autoriser_palettes_voir_dist()  : bool
Autorisation d'accéder à la page des palettes.
autoriser_palettes_menu_dist()  : bool
Autorisation d'afficher l'entrée de menu du plugin, calée sur celle de voir la page.
autoriser_palettecollections_voir_dist()  : bool
Autorisation de voir la liste des collections de palettes.
autoriser_palettecollections_charger_dist()  : bool
Autorisation de recharger les collections standard depuis leurs fichiers JSON.
autoriser_palette_voir_dist()  : bool
Autorisation de voir une palette.
autoriser_palette_creer_dist()  : bool
Autorisation de créer une palette.
autoriser_palette_modifier_dist()  : bool
Autorisation de modifier une palette.
autoriser_palette_supprimer_dist()  : bool
Autorisation de supprimer une palette, calée sur celle de la modifier.
balise_PALETTE_APERCU_dist()  : Champ
Compile la balise `#PALETTE_APERCU` qui renvoie l'aperçu SVG d'une palette, soit ses couleurs juxtaposées en bandes de largeur égale.
balise_PALETTE_LEGENDE_dist()  : Champ
Compile la balise `#PALETTE_LEGENDE` qui renvoie la légende HTML d'une palette, soit un bandeau de couleurs accompagné de ses intitulés.
balise_PALETTE_EXPORT_dist()  : Champ
Compile la balise `#PALETTE_EXPORT` qui renvoie une palette mise en forme pour un usage extérieur.
balise_PALETTE_CRITERES_dist()  : Champ
Compile la balise `#PALETTE_CRITERES` qui traduit un jeu de filtres en critères SQL, directement utilisables comme argument `where` d'une boucle.
balise_PALETTE_SCHEMAS_dist()  : Champ
Compile la balise `#PALETTE_SCHEMAS` qui renvoie la liste des schémas, c'est-à-dire les palettes regroupées par parti pris chromatique. Elle est faite pour alimenter une boucle `DATA`, le schéma n'étant pas une table.
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.
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é.
palette_identifier()  : array<string|int, mixed>
Traduit la désignation d'une palette en critères SQL.
palette_lire()  : mixed
Retourne, pour une palette donnée, la description complète ou seulement un champ précis.
palette_repertorier()  : array<string|int, mixed>
Répertorie les palettes répondant à des critères donnés.
palette_criteres()  : array<string|int, mixed>
Traduit un jeu de filtres en critères SQL.
palette_repertorier_schemas()  : array<string|int, mixed>
Répertorie les schémas, c'est-à-dire les palettes regroupées par parti pris chromatique.
palette_existe()  : bool
Indique si une palette existe.
palette_recommander()  : array<string|int, mixed>
Recommande les schémas les mieux adaptés à un usage donné.
palette_qualifier()  : array<string|int, mixed>
Qualifie un nuancier et rend les valeurs à consigner sur la palette qui le porte.
palette_creer()  : null|int
Crée une palette personnelle, ou met à jour celle qui occupe déjà le même triplet identifiant.
palette_modifier()  : bool
Modifie une palette personnelle.
palette_supprimer()  : bool
Supprime une palette personnelle.
palette_dupliquer()  : null|int
Duplique une palette vers une collection non protégée, ce qui permet de partir d'une palette standard pour en dériver une variante personnelle.
palette_collection_charger()  : array<string|int, mixed>
Charge ou recharge en base de données les collections des palettes de couleurs standard à partir des fichiers JSON correspondants.
palette_collection_decharger()  : array<string|int, mixed>
Vide en base de données les collections des palettes de couleurs standard (non éditables) en préservant les palettes personnelles.
palette_collection_repertorier()  : array<string|int, mixed>
Liste toutes les descriptions des collections disponibles ou seulement celles filtrées selon un ou plusieurs attributs.
palette_collection_est_protegee()  : bool
Indique si une collection est protégée, c'est-à-dire si son contenu est administré par le plugin et non par l'utilisateur.
palette_collection_normaliser_identifiant()  : string
Vérifie qu'un identifiant de collection est utilisable et le normalise.
palette_collection_recalculer()  : array<string|int, mixed>
Recalcule les agrégats d'une collection à partir des palettes réellement présentes en base.
palette_collection_creer()  : array<string|int, mixed>
Crée une collection personnelle.
palette_collection_modifier()  : array<string|int, mixed>
Modifie les métadonnées d'une collection personnelle.
palette_collection_supprimer()  : array<string|int, mixed>
Supprime une collection personnelle.
palette_restituer_nuancier()  : array<string|int, mixed>
Extrait le nuancier d'une palette et vérifie qu'il est exploitable.
palette_restituer_identifiant()  : string
Construit l'identifiant lisible d'une palette, utilisable comme préfixe de classe ou de variable CSS.
palette_restituer_export()  : string
Exporte une palette dans un format d'échange.
palette_restituer_couleur()  : string
Écrit une couleur dans la notation CSS demandée.
palette_restituer_css()  : string
Produit une feuille de style déclarant une classe par couleur de la palette.
palette_restituer_css_variables()  : string
Produit une feuille de style déclarant une variable CSS par couleur de la palette.
palette_restituer_legende()  : string
Produit une légende HTML représentant la palette sous forme de bandeau de couleurs.
palette_restituer_svg()  : string
Produit un aperçu SVG de la palette, sous forme de bandes juxtaposées.

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_COLLECTION_METADONNEES

Métadonnées d'une collection que l'utilisateur renseigne lui-même.

public mixed _EZPALETTE_COLLECTION_METADONNEES = ['titre', 'version', 'source', 'licence', 'description', 'recommandations']

Tout ce qui n'y figure pas est soit un attribut de contrôle géré par le plugin - l'identifiant, le drapeau editable, la date de mise à jour - soit un agrégat recalculé depuis les palettes présentes. Une interface de saisie n'a donc à proposer que ces six champs.

_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_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.

_EZPALETTE_IMPRESSION_NB_ETENDUE

Amplitude de clarté minimale, en points, exigée d'un nuancier destiné à l'impression en noir et blanc.

public mixed _EZPALETTE_IMPRESSION_NB_ETENDUE = 40.0

Une fois la couleur retirée, il ne reste que la clarté pour distinguer deux classes : un nuancier qui n'en balaie qu'une portion étroite devient un aplat uniforme. Les séquentielles de ColorBrewer s'étendent de 61 à 82 points, ses divergentes de 49 à 67 : le seuil retenu les admet toutes et écarte les nuanciers qui ne jouent que sur la teinte.

Tags
note

Ce seuil ne sert qu'à défaut de curation déclarée. Aucune mesure ne reproduit le choix d'un ColorBrewer, qui déclare Blues bonne pour l'impression et YlGn non, alors que la seconde balaie une amplitude légèrement supérieure. La mesure ne départage pas une liste d'experts, elle prend le relais quand il n'y en a pas.

_EZPALETTE_TYPE_PERCEPTION_SEQUENTIELLE

public mixed _EZPALETTE_TYPE_PERCEPTION_SEQUENTIELLE = 'perceptual_sequential'

_EZPALETTE_TYPES

public mixed _EZPALETTE_TYPES = [\_EZPALETTE_TYPE_SEQUENTIELLE, \_EZPALETTE_TYPE_DIVERGENTE, \_EZPALETTE_TYPE_QUALITATIVE, \_EZPALETTE_TYPE_CYCLIQUE, \_EZPALETTE_TYPE_PERCEPTION_SEQUENTIELLE]

Functions

action_recharger_palette_collections_dist()

Cette action permet à l'utilisateur de recharger en base de données, de façon sécurisée, les collections de palettes standard à partir de leur fichier JSON.

action_recharger_palette_collections_dist() : void

Cette action est réservée aux utilisateurs pouvant manipuler les collections de Palette Factory. Elle ne nécessite aucun argument.

Tags
uses
palette_collection_charger()
throws
Exception

ezpalette_declarer_tables_interfaces()

Déclaration des informations tierces (alias, traitements, jointures, etc) sur les tables de la base de données modifiées ou ajoutées par le plugin.

ezpalette_declarer_tables_interfaces(array<string|int, mixed> $interface) : array<string|int, mixed>

Le plugin se contente de déclarer les alias des tables et quelques traitements.

Parameters
$interface : array<string|int, mixed>

Tableau global des informations tierces sur les tables de la base de données

Tags
pipeline

declarer_tables_interfaces

Return values
array<string|int, mixed>

Tableau fourni en entrée et mis à jour avec les nouvelles informations

ezpalette_declarer_tables_objets_sql()

Déclaration des nouvelles tables de la base de données propres au plugin.

ezpalette_declarer_tables_objets_sql(array<string|int, mixed> $tables) : array<string|int, mixed>

Le plugin déclare une nouvelle table :

  • spip_palettes, qui contient les éléments descriptifs des palettes de couleurs.
Parameters
$tables : array<string|int, mixed>

Tableau global décrivant la structure des tables de la base de données

Tags
pipeline

declarer_tables_objets_sql

Return values
array<string|int, mixed>

Tableau fourni en entrée et mis à jour avec les nouvelles déclarations

ezpalette_upgrade()

Installation du schéma de données propre au plugin et gestion des migrations suivant les évolutions du schéma.

ezpalette_upgrade(string $nom_meta_base_version, string $version_cible) : void

Le plugin crée la table des palettes et charge la configuration des palettes standard.

Parameters
$nom_meta_base_version : string
$version_cible : string
Tags
throws
Exception

ezpalette_vider_tables()

Suppression de l'ensemble du schéma de données propre au plugin.

ezpalette_vider_tables(string $nom_meta_base_version) : void
Parameters
$nom_meta_base_version : string
Tags
throws
Exception

ezpalette_configurer()

Renvoie la configuration statique (non éditable) du plugin.

ezpalette_configurer() : array<string|int, mixed>
Return values
array<string|int, mixed>

Tableau de la configuration demandée.

ezpalette_autoriser()

Fonction appelée par le pipeline `autoriser`, dont la seule existence déclare le fichier.

ezpalette_autoriser() : void

autoriser_palettes_voir_dist()

Autorisation d'accéder à la page des palettes.

autoriser_palettes_voir_dist(string $faire, string $type, int $id, null|array<string|int, mixed>|int $qui, null|array<string|int, mixed> $options) : bool
Parameters
$faire : string

L'action : voir

$type : string

Le type : _palettes, qui n'est pas un objet au sens de SPIP

$id : int

Inutilisé

$qui : null|array<string|int, mixed>|int

L'initiateur de l'action

$options : null|array<string|int, mixed>

Options éventuelles

Return values
bool

autoriser_palettes_menu_dist()

Autorisation d'afficher l'entrée de menu du plugin, calée sur celle de voir la page.

autoriser_palettes_menu_dist(string $faire, string $type, int $id, null|array<string|int, mixed>|int $qui, null|array<string|int, mixed> $options) : bool
Parameters
$faire : string

L'action : menu

$type : string

Le type : _palettes

$id : int

Inutilisé

$qui : null|array<string|int, mixed>|int

L'initiateur de l'action

$options : null|array<string|int, mixed>

Options éventuelles

Return values
bool

autoriser_palettecollections_voir_dist()

Autorisation de voir la liste des collections de palettes.

autoriser_palettecollections_voir_dist(string $faire, string $type, int $id, null|array<string|int, mixed>|int $qui, null|array<string|int, mixed> $options) : bool
Parameters
$faire : string

L'action : voir

$type : string

Le type : _palettecollections

$id : int

Inutilisé

$qui : null|array<string|int, mixed>|int

L'initiateur de l'action

$options : null|array<string|int, mixed>

Options éventuelles

Return values
bool

autoriser_palettecollections_charger_dist()

Autorisation de recharger les collections standard depuis leurs fichiers JSON.

autoriser_palettecollections_charger_dist(string $faire, string $type, int $id, null|array<string|int, mixed>|int $qui, null|array<string|int, mixed> $options) : bool

L'opération vide et réécrit la table pour les collections concernées : elle est réservée aux administrateurs complets. Jusqu'ici l'autorisation n'était pas déclarée et le contrôle ne tenait qu'à la retombée sur autoriser_defaut_dist(), ce qui produisait le bon résultat mais par accident.

Parameters
$faire : string

L'action : charger

$type : string

Le type : _palettecollections

$id : int

Inutilisé

$qui : null|array<string|int, mixed>|int

L'initiateur de l'action

$options : null|array<string|int, mixed>

Options éventuelles

Return values
bool

autoriser_palette_voir_dist()

Autorisation de voir une palette.

autoriser_palette_voir_dist(string $faire, string $type, int $id, null|array<string|int, mixed>|int $qui, null|array<string|int, mixed> $options) : bool
Parameters
$faire : string

L'action : voir

$type : string

Le type d'objet : palette

$id : int

Identifiant de la palette

$qui : null|array<string|int, mixed>|int

L'initiateur de l'action

$options : null|array<string|int, mixed>

Options éventuelles

Return values
bool

autoriser_palette_creer_dist()

Autorisation de créer une palette.

autoriser_palette_creer_dist(string $faire, string $type, int $id, null|array<string|int, mixed>|int $qui, null|array<string|int, mixed> $options) : bool
Parameters
$faire : string

L'action : creer

$type : string

Le type d'objet : palette

$id : int

Inutilisé

$qui : null|array<string|int, mixed>|int

L'initiateur de l'action

$options : null|array<string|int, mixed>

Options éventuelles

Return values
bool

autoriser_palette_modifier_dist()

Autorisation de modifier une palette.

autoriser_palette_modifier_dist(string $faire, string $type, int $id, null|array<string|int, mixed>|int $qui, null|array<string|int, mixed> $options) : bool

Une palette n'est modifiable que si sa collection ne l'est pas elle-même rechargée depuis un fichier JSON, ce que porte sa colonne editable.

Parameters
$faire : string

L'action : modifier

$type : string

Le type d'objet : palette

$id : int

Identifiant de la palette

$qui : null|array<string|int, mixed>|int

L'initiateur de l'action

$options : null|array<string|int, mixed>

Options éventuelles

Tags
uses
palette_lire()
Return values
bool

autoriser_palette_supprimer_dist()

Autorisation de supprimer une palette, calée sur celle de la modifier.

autoriser_palette_supprimer_dist(string $faire, string $type, int $id, null|array<string|int, mixed>|int $qui, null|array<string|int, mixed> $options) : bool
Parameters
$faire : string

L'action : supprimer

$type : string

Le type d'objet : palette

$id : int

Identifiant de la palette

$qui : null|array<string|int, mixed>|int

L'initiateur de l'action

$options : null|array<string|int, mixed>

Options éventuelles

Return values
bool

balise_PALETTE_APERCU_dist()

Compile la balise `#PALETTE_APERCU` qui renvoie l'aperçu SVG d'une palette, soit ses couleurs juxtaposées en bandes de largeur égale.

balise_PALETTE_APERCU_dist(Champ $p) : Champ

La signature de la balise est : #PALETTE_APERCU{palette[, largeur, hauteur, etiquettes]}.

Parameters
$p : Champ

Pile au niveau de la balise.

Tags
balise
uses
palette_restituer_svg()
Return values
Champ

Pile complétée par le code à générer.

balise_PALETTE_LEGENDE_dist()

Compile la balise `#PALETTE_LEGENDE` qui renvoie la légende HTML d'une palette, soit un bandeau de couleurs accompagné de ses intitulés.

balise_PALETTE_LEGENDE_dist(Champ $p) : Champ

La signature de la balise est : #PALETTE_LEGENDE{palette[, orientation, titre, classe]}.

Parameters
$p : Champ

Pile au niveau de la balise.

Tags
balise
uses
palette_restituer_legende()
Return values
Champ

Pile complétée par le code à générer.

balise_PALETTE_EXPORT_dist()

Compile la balise `#PALETTE_EXPORT` qui renvoie une palette mise en forme pour un usage extérieur.

balise_PALETTE_EXPORT_dist(Champ $p) : Champ

La signature de la balise est : #PALETTE_EXPORT{palette[, format]}.

Parameters
$p : Champ

Pile au niveau de la balise.

Tags
balise
uses
palette_restituer_export()
Return values
Champ

Pile complétée par le code à générer.

balise_PALETTE_CRITERES_dist()

Compile la balise `#PALETTE_CRITERES` qui traduit un jeu de filtres en critères SQL, directement utilisables comme argument `where` d'une boucle.

balise_PALETTE_CRITERES_dist(Champ $p) : Champ

La signature de la balise est : #PALETTE_CRITERES{filtres}.

Elle sert aux seuils de qualité — contraste et amplitude de clarté — qui ne se comparent pas à l'identique et ne peuvent donc pas s'écrire en critère optionnel {champ?}. Les valeurs vides sont écartées avant traduction : un filtre non renseigné dans un formulaire ne doit ajouter aucune condition.

Parameters
$p : Champ

Pile au niveau de la balise.

Tags
balise
uses
palette_criteres()
Return values
Champ

Pile complétée par le code à générer.

balise_PALETTE_SCHEMAS_dist()

Compile la balise `#PALETTE_SCHEMAS` qui renvoie la liste des schémas, c'est-à-dire les palettes regroupées par parti pris chromatique. Elle est faite pour alimenter une boucle `DATA`, le schéma n'étant pas une table.

balise_PALETTE_SCHEMAS_dist(Champ $p) : Champ

La signature de la balise est : #PALETTE_SCHEMAS{[filtres]}.

Parameters
$p : Champ

Pile au niveau de la balise.

Tags
balise
uses
palette_repertorier_schemas()
Return values
Champ

Pile complétée par le code à générer.

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
see
colorimetrie_srgb_corriger_gamma()

Opération réciproque

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
see
colorimetrie_srgb_lineariser()

Opération réciproque

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
note

Le noir n'est pas une valeur d'erreur : c'est une couleur comme une autre, et rien ne distingue en retour une entrée invalide d'un #000000 légitime. C'est un choix assumé, qui préserve la garantie tenue partout dans ce fichier — aucune conversion n'échoue ni ne rend NAN — et qui laisse le signalement au journal. Un appelant qui doit valider une saisie contrôle le format en amont plutôt que d'interpréter ce retour.

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
see
colorimetrie_polarlab_est_dans_gamut()

Test de représentabilité qui s'appuie dessus

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
see
colorimetrie_xyz_to_srgb_normalise()

Même conversion, sans écrêtage ni dénormalisation

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
note

La conversion passe par la réponse des trois types de cônes, compressée par une racine cubique. La racine est prise en conservant le signe : une couleur hors du gamut donne des réponses négatives, sur lesquelles pow() rendrait NAN. Le fichier garantit partout qu'aucune conversion ne produit de NAN.

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 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
see
colorimetrie_lab_delta_e_2000()

Écart perceptuel entre deux couleurs déjà converties

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
see
colorimetrie_polarlab_chroma_maximal()

Chroma le plus élevé qui satisfasse ce test

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
note

Il serait tentant de chercher ce maximum par une simple dichotomie sur tout l'intervalle. Ce serait supposer le gamut étoilé par rapport à l'axe des gris, ce qu'il n'est pas : le cube sRGB projeté dans CIE Lab* présente des pointes, dont la plus marquée est le sommet du jaune. À sa clarté, 97,1, le rayon de teinte 102,9 est représentable de 0 à 28,5, ne l'est plus jusqu'à 96,4, puis l'est de nouveau sur le seul voisinage du sommet, à 96,9. Une dichotomie franchirait cette lacune et rendrait un maximum inatteignable depuis l'axe des gris. La recherche procède donc en deux temps : un balayage par pas d'une unité repère le premier chroma non représentable, puis une dichotomie affine la frontière dans l'intervalle ainsi encadré. Une lacune plus étroite qu'une unité de chroma resterait invisible, ce qui est sans conséquence : l'écart est très inférieur au seuil de perception.

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, hsl ou rgb. 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, protanopie ou tritanopie. Tout autre valeur rend la couleur inchangée

Tags
note

Les matrices sont celles de Machado, Oliveira et Fernandes (2009), prises à la sévérité maximale. Ce modèle a remplacé la construction géométrique de Brettel, Viénot et Mollon dans la plupart des outils, pour deux raisons : il rend mieux compte des déficiences partielles, et il s'exprime comme une simple matrice.

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
note

Les WCAG situent le raccord de la fonction de transfert à 0,03928 là où la spécification sRGB retient 0,04045. Les deux valeurs circulent, l'écart est infime et sans conséquence visible : on retient ici la fonction de transfert sRGB, ce qui garantit la cohérence avec le reste du fichier.

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
note

Il s'agit bien de la formule de 1976 et non de CIE2000, plus précise mais nettement plus coûteuse. CIE2000 corrige la surestimation des écarts dans les bleus saturés et la sous-estimation dans les gris ; pour comparer des couleurs voisines d'un même nuancier, l'écart entre les deux formules reste marginal.

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
note

L'implémentation suit les notes de Sharma, Wu et Dalal (2005), qui recensent les pièges de cette formule : convention de teinte pour les couleurs achromatiques, moyenne d'angles à cheval sur l'origine, signe du terme de rotation. Elle est vérifiée contre leurs 34 paires de référence, conçues pour débusquer ces erreurs.

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

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 : rgb par défaut, ou l'un de ceux qu'accepte colorimetrie_interpoler()oklab, oklch, lab, polarlab, hcl, hsl

Tags
note

La méthode reste rgb par défaut, celle des nuanciers déjà produits par le plugin. Un mélange destiné à être lu comme un dégradé continu gagne à demander oklab.

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
note

L'étalement n'est pas une solution générale, et le contrôle vaut mieux que la confiance : passer le résultat à nuancier_verifier_daltonisme() reste la seule façon de savoir. Mesuré sur le pire des trois déficiences, un étalement de 25 fait passer un nuancier de quatre couleurs de 6,6 à 10,2 de ΔE₀₀ — soit au-dessus du seuil de lisibilité — et un nuancier de cinq couleurs de 4,4 à 7,2. Au-delà de six couleurs le gain s'évanouit : huit teintes à chroma commun sont trop serrées pour qu'un échelonnement de clarté les sauve. Pour un nuancier qualitatif nombreux qui doive être lisible, mieux vaut puiser dans une collection éprouvée — Okabe-Ito ou les jeux de Paul Tol, qui renoncent à l'espacement régulier des teintes — que d'en générer un.

note

L'étalement n'améliore pas les choses de façon monotone : un échelonnement faible peut rapprocher deux clartés d'un couple déjà confondu et dégrader légèrement le résultat. Les valeurs utiles se situent à partir de 25.

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
note

La fonction mesure sans juger : elle ne rend aucun verdict d'uniformité. Aucun seuil d'acceptation ne fait autorité — mesurés sur les collections embarquées, les coefficients médians vont de 13% pour cmocean à 25% pour colorbrewer, viridis se situant à 24% alors qu'il est conçu pour l'uniformité perceptuelle. Fixer une limite reviendrait à recaler des palettes de référence. Il revient à l'appelant d'apprécier la mesure.

note

La régularité des écarts suppose un ordre entre les couleurs : la mesure n'a de sens que pour les nuanciers ordonnés — séquentiels, divergents, cycliques. L'appliquer à un nuancier qualitatif, dont les couleurs sont interchangeables, n'aurait pas de signification.

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 Renvoie null si 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
note

Cette fonction mesure sans juger, comme les autres fonctions de qualification. Une progression non monotone n'est un défaut que pour un séquentiel : c'est le comportement attendu d'un divergent, dont la clarté culmine au point neutre, et d'un qualitatif, dont les couleurs n'ont pas d'ordre à porter.

Return values
null|array<string|int, mixed>

Mesures de la progression :

  • index clarte_min et clarte_max : clartés extrêmes rencontrées, 0-100
  • index etendue : amplitude balayée, en points de clarté
  • index monotone : true si la clarté progresse toujours dans le même sens, false si 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 Renvoie null si 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.
  • sequential et perceptual_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
note

Appliquer le critère des couples à tout aurait produit un contrôle inutilisable : mesuré ainsi, aucune des palettes que ColorBrewer déclare sûres ne l'est, viridis comprise. Avec les critères ci-dessus, les palettes déclarées sûres passent et RdYlGn comme Spectral, déclarées non sûres, échouent — ces deux-là sur le critère des arcs, à 0,5 et 2,0 de ΔE₀₀ quand les sûres se tiennent au-dessus de 13.

note

Le contrôle ne reproduit pas le jugement d'expert d'un ColorBrewer et ne prétend pas s'y substituer. Quand une collection déclare l'aptitude de ses palettes, cette déclaration reste la meilleure source ; le calcul vaut pour les palettes personnelles, qui n'en ont aucune.

note

Les critères qui comparent des couples s'appliquent sur au plus $classes couleurs, extraites régulièrement du nuancier. Une rampe continue de 256 couleurs n'est jamais lue couleur par couleur : elle est discrétisée en une poignée de classes avant d'atterrir sur une carte. La contrôler à pleine résolution reviendrait à déclarer illisible toute rampe continue, puisque deux couleurs voisines y sont par construction presque identiques — la palette balance de cmocean tombe ainsi à 0,54 de ΔE₀₀ à 256 couleurs, contre 15,2 une fois ramenée à onze classes. Le verdict porte donc sur le nuancier tel qu'il sera employé, et non sur sa définition. Accessoirement, c'est ce qui rend le contrôle praticable : sans cette réduction, une cinquantaine de rampes continues consomment à elles seules l'essentiel du temps de qualification d'une collection.

Return values
null|array<string|int, mixed>

Mesures du contrôle :

  • index critere : couples, arcs ou progression
  • index seuil : seuil effectivement appliqué, dans l'unité du critère — un écart ΔE₀₀ pour couples et arcs, une amplitude de clarté pour progression
  • index lisible : true si les trois déficiences sont lisibles
  • un index par déficience — protanopie, deuteranopie et tritanopie — 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 : true si la mesure atteint le seuil Renvoie null si le nuancier compte moins de deux couleurs.

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
note

L'échelle est ici linéaire : la couleur ne dépend que de la position de la valeur entre les deux bornes. Pour une répartition fondée sur la distribution réelle de la série — quantiles, ruptures naturelles, écart-type — il faut d'abord discrétiser la série, puis retenir la couleur du rang de la classe obtenue.

Return values
null|string

Couleur hexadécimale, ou null si le nuancier est vide

palette_identifier()

Traduit la désignation d'une palette en critères SQL.

palette_identifier(mixed $palette) : array<string|int, mixed>

Une palette a deux identités : id_palette, la clé technique attribuée à l'enregistrement, et le triplet collection + scheme + taille, qui est la façon dont on la nomme en cartographie — le Blues de ColorBrewer, en cinq classes. Aucune des deux ne prime : l'une vient de la base, l'autre du domaine. Toutes les fonctions qui opèrent sur une palette existante acceptent donc indifféremment l'une ou l'autre, sous un unique argument $palette.

Trois formes sont reconnues :

  • un entier, ou la chaîne de chiffres qui en vient d'un formulaire : la clé technique ;
  • un tableau portant les index collection, scheme et taille : le triplet ;
  • une palette chargée, telle que la rend palette_lire() : elle porte les deux, et sa clé technique est retenue puisque c'est la clé primaire.
Parameters
$palette : mixed

Désignation de la palette, sous l'une des trois formes reconnues

Tags
note

La collection fait partie de l'identité et n'est pas facultative. Une version antérieure permettait de chercher un schéma sans elle : la requête rendait alors la première palette venue, Blues existant aussi bien chez ColorBrewer que chez CARTOColors. Une désignation incomplète est désormais refusée plutôt que résolue au hasard.

Return values
array<string|int, mixed>

Critères SQL désignant la palette, ou tableau vide si la désignation est incomplète ou invalide

palette_lire()

Retourne, pour une palette donnée, la description complète ou seulement un champ précis.

palette_lire(mixed $palette[, null|string $information = '' ][, null|bool $traiter_typo = false ]) : mixed

Les champs sérialisés — le nuancier et les mesures de qualification — sont toujours désérialisés : leur forme en base est un détail de stockage dont l'appelant n'a pas à connaître. Les champs textuels rédigés en SPIP, soit la seule description, sont rendus bruts par défaut et ne subissent le traitement typographique que sur demande, car celui-ci produit du HTML qui n'a de sens qu'à l'affichage.

Parameters
$palette : mixed

Désignation de la palette, voir palette_identifier()

$information : null|string = ''

Champ précis à retourner, ou vide pour retourner toute la description

$traiter_typo : null|bool = false

Indique si les champs textuels doivent être traités par typo() plutôt que rendus bruts. Vaut false par défaut. Les champs sérialisés sont eux toujours désérialisés

Tags
used-by
autoriser_palette_modifier_dist()
Return values
mixed

Description complète de la palette, ou le seul champ demandé, ou null si la palette n'existe pas ou si le champ demandé lui est étranger

palette_repertorier()

Répertorie les palettes répondant à des critères donnés.

palette_repertorier([array<string|int, mixed> $filtres = [] ]) : array<string|int, mixed>
Parameters
$filtres : array<string|int, mixed> = []

Critères de sélection, tous facultatifs :

  • string collection : collection d'origine
  • string scheme : identifiant du schéma
  • string type : type de palette, parmi les constantes _EZPALETTE_TYPE_*
  • int taille : nombre de couleurs
  • bool editable : palettes personnelles si vrai, standard si faux
  • bool daltonisme : palettes adaptées au daltonisme si vrai
  • bool clarte_monotone : palettes dont la clarté progresse dans un seul sens si vrai, ce qui est la marque d'un nuancier qui encode un ordre et résiste au tirage en noir et blanc
  • float contraste_min : rapport de contraste WCAG minimal exigé entre deux couleurs consécutives, 4,5 correspondant au niveau AA
  • float clarte_etendue : amplitude de clarté minimale exigée, en points. En deçà de 40, une rampe ne se lit plus en noir et blanc
Tags
note

Une palette dont la mesure est indéterminée — moins de deux couleurs — n'est retenue par aucun critère de qualité. C'est le comportement voulu : à défaut de savoir, on n'affirme pas.

Return values
array<string|int, mixed>

Liste des palettes, ordonnée par collection, schéma puis taille

palette_criteres()

Traduit un jeu de filtres en critères SQL.

palette_criteres([array<string|int, mixed> $filtres = [] ]) : array<string|int, mixed>

Partagé par palette_repertorier() et palette_repertorier_schemas(), qui sélectionnent le même ensemble de palettes et n'en diffèrent que par le regroupement.

Parameters
$filtres : array<string|int, mixed> = []

Critères de sélection, voir palette_repertorier()

Tags
used-by
balise_PALETTE_CRITERES_dist()
Return values
array<string|int, mixed>

Critères SQL, tableau vide si aucun filtre n'est fourni

palette_repertorier_schemas()

Répertorie les schémas, c'est-à-dire les palettes regroupées par parti pris chromatique.

palette_repertorier_schemas([array<string|int, mixed> $filtres = [] ][, int $taille_apercu = 7 ]) : array<string|int, mixed>

Un schémaBlues, RdBu — n'est pas une table : c'est le regroupement des palettes d'une même collection qui ne diffèrent que par leur nombre de couleurs. Il porte ce qui ne dépend pas de la taille : le type, la description, l'aptitude déclarée au daltonisme.

C'est l'unité de navigation naturelle. Les collections embarquées comptent 83 schémas pour 858 palettes, soit dix déclinaisons par schéma et jamais moins de six : une liste de palettes est dix fois plus longue qu'une liste de schémas pour la même information chromatique.

Parameters
$filtres : array<string|int, mixed> = []

Critères de sélection, voir palette_repertorier(). Les critères de taille et de qualité s'appliquent aux palettes avant regroupement : un schéma est retenu dès qu'une seule de ses palettes les satisfait, et les tailles rendues sont celles qui les satisfont

$taille_apercu : int = 7

Taille dont le nuancier illustre le schéma. Les 83 schémas embarqués ont tous une déclinaison de sept couleurs ; à défaut, c'est celle dont la taille en est la plus proche qui sert d'aperçu

Tags
see
palette_repertorier()

Les mêmes palettes, sans regroupement

used-by
balise_PALETTE_SCHEMAS_dist()
Return values
array<string|int, mixed>

Liste des schémas, ordonnée par collection puis schéma, chacun décrit par :

  • index collection, scheme, type, description, daltonisme, editable
  • index tailles : les tailles disponibles, entiers ordonnés
  • index nb_tailles : leur nombre
  • index taille_min et taille_max : les bornes
  • index apercu : le nuancier représentatif, tableau de couleurs hexadécimales

palette_existe()

Indique si une palette existe.

palette_existe(mixed $palette) : bool
Parameters
$palette : mixed

Désignation de la palette, voir palette_identifier()

Return values
bool

palette_recommander()

Recommande les schémas les mieux adaptés à un usage donné.

palette_recommander(array<string|int, mixed> $filtres) : array<string|int, mixed>

La recommandation s'appuie sur les listes déclarées par chaque collection dans son fichier JSON, restreintes aux schémas effectivement présents en base pour les critères demandés.

La curation prime sur la mesure. Quand une collection déclare une liste, elle fait foi : c'est un jugement d'expert, souvent éprouvé à la photocopieuse, qu'aucune de nos mesures ne reproduit. Les mesures prennent le relais là où il n'y a rien à respecter, c'est-à-dire pour les collections personnelles, qui ne déclarent jamais de recommandations — sans quoi elles ne seraient jamais recommandables.

Le contexte fait exception pour le daltonisme : la colonne daltonisme reprend, pour les collections standard, le drapeau que la collection déclare elle-même. L'appliquer ne contredit donc aucune curation, et le faire en base plutôt qu'après coup permet de la combiner aux autres critères.

Parameters
$filtres : array<string|int, mixed>

Critères de recommandation :

  • string type : type de palette, parmi les constantes _EZPALETTE_TYPE_* (obligatoire)
  • int taille : nombre de couleurs souhaité
  • string contexte : usage visé, parmi defaut, daltonisme et impression_nb
  • string collection : restreindre à une collection
  • bool daltonisme : ne retenir que les schémas adaptés au daltonisme
Tags
note

Le contexte impression_nb n'impose pas de progression de clarté monotone, alors que ce serait tentant : une palette divergente n'est jamais monotone — sa clarté culmine au point neutre — et l'exiger écarterait RdBu et BrBG, précisément les deux que ColorBrewer déclare bonnes pour l'impression. Le critère retenu est la seule amplitude de clarté, voir _EZPALETTE_IMPRESSION_NB_ETENDUE.

Return values
array<string|int, mixed>

Schémas recommandés, indexés par collection/scheme, chacun décrit par sa collection, son schéma, son type, son aptitude au daltonisme, les tailles disponibles et sa description

palette_qualifier()

Qualifie un nuancier et rend les valeurs à consigner sur la palette qui le porte.

palette_qualifier(array<string|int, mixed> $nuancier[, string $type = '' ][, null|bool $daltonisme_declare = null ]) : array<string|int, mixed>

C'est le point de calcul unique des mesures stockées : le chargement d'une collection, la création et la modification d'une palette l'appellent tous les trois. Ajouter une mesure ne demande donc de toucher qu'ici, et les trois chemins d'écriture ne peuvent pas diverger.

Les mesures se répartissent en deux natures, et c'est ce qui décide de leur forme de stockage :

  • celles qui servent à choisir une palette sont des colonnes, donc filtrables et triables depuis une boucle sans une ligne de PHP : le contraste minimal, l'aptitude au daltonisme, le caractère monotone de la clarté et l'amplitude qu'elle balaie ;
  • celles qui servent à décrire une palette déjà retenue tiennent dans un seul tableau qualification, sérialisé en JSON. Il absorbe une nouvelle mesure sans toucher au schéma.
Parameters
$nuancier : array<string|int, mixed>

Nuancier à qualifier

$type : string = ''

Type de la palette, qui détermine le critère de contrôle du daltonisme

$daltonisme_declare : null|bool = null

Aptitude au daltonisme déclarée par la collection, null si aucune

Tags
note

L'aptitude au daltonisme a deux sources. Quand la collection la déclare, cette déclaration prime : elle engage la réputation de sa source, qui l'a établie sur des critères d'expert que le calcul n'approche qu'imparfaitement. Le calcul prend le relais pour les palettes personnelles, qui n'ont aucune déclaration — sans quoi elles seraient invisibles à un filtre d'accessibilité. Le tableau qualification conserve les deux, de sorte que la provenance reste lisible.

Return values
array<string|int, mixed>

Valeurs à consigner :

  • index contraste_min, daltonisme, clarte_monotone et clarte_etendue : colonnes de la table, les deux booléens sous la forme oui ou non employée par le reste du plugin
  • index qualification : tableau des mesures détaillées, à sérialiser avant enregistrement

palette_creer()

Crée une palette personnelle, ou met à jour celle qui occupe déjà le même triplet identifiant.

palette_creer(string $collection_id, string $scheme, int $taille, array<string|int, mixed> $nuancier[, array<string|int, mixed> $options = [] ]) : null|int
Parameters
$collection_id : string

Collection de destination, qui ne peut pas être protégée

$scheme : string

Identifiant du schéma

$taille : int

Nombre de couleurs, qui doit coïncider avec la taille du nuancier

$nuancier : array<string|int, mixed>

Jeu de couleurs hexadécimales

$options : array<string|int, mixed> = []

Attributs facultatifs :

  • string type : type de palette, qualitative par défaut
  • string description : description libre
  • bool daltonisme : aptitude au daltonisme
Tags
note

Cette fonction est la seule à ne pas prendre de désignation $palette : à la création, le triplet ne désigne rien, il décrit ce que l'on va créer. Ses composants sont donc explicites — et dans l'ordre du triplet, la collection d'abord, puisqu'une palette appartient toujours à une collection.

Return values
null|int

Identifiant de la palette créée ou mise à jour, ou null en cas d'erreur

palette_modifier()

Modifie une palette personnelle.

palette_modifier(mixed $palette, array<string|int, mixed> $modifications) : bool
Parameters
$palette : mixed

Désignation de la palette, voir palette_identifier()

$modifications : array<string|int, mixed>

Champs à modifier, parmi scheme, type, nuancier, description et daltonisme. Le nuancier peut être fourni sous forme de tableau

Return values
bool

Vrai si la modification a eu lieu

palette_supprimer()

Supprime une palette personnelle.

palette_supprimer(mixed $palette) : bool
Parameters
$palette : mixed

Désignation de la palette, voir palette_identifier()

Return values
bool

Vrai si la suppression a eu lieu

palette_dupliquer()

Duplique une palette vers une collection non protégée, ce qui permet de partir d'une palette standard pour en dériver une variante personnelle.

palette_dupliquer(mixed $palette, string $nouveau_scheme[, string $collection_id = 'perso' ]) : null|int
Parameters
$palette : mixed

Désignation de la palette à dupliquer, voir palette_identifier()

$nouveau_scheme : string

Identifiant du schéma de la copie

$collection_id : string = 'perso'

Collection de destination, perso par défaut

Return values
null|int

Identifiant de la copie, ou null en cas d'erreur

palette_collection_charger()

Charge ou recharge en base de données les collections des palettes de couleurs standard à partir des fichiers JSON correspondants.

palette_collection_charger([null|string $collection_id = null ]) : array<string|int, mixed>

Il est possible de charger une collection donnée ou de charger toutes les collections disponibles.

Parameters
$collection_id : null|string = null

Identifiant de la collection ou null pour charger toutes les collections. L'identifiant de la collection coincide avec le nom du fichier JSON contenant les informations de configuration de la collection.

Tags
throws
Exception
used-by
action_recharger_palette_collections_dist()
Return values
array<string|int, mixed>

Tableau résultat de l'action : soit une erreur, soit une information sur le déroulement correct. Les index sont :

  • int level : la gravité telle que définie pour les logs de spip
  • string code : le code de l'information ou de l'erreur qui représente aussi l'item de langue
  • array parameters : tableau associatif des paramètres de l'erreur à fournir à l'item de langue

palette_collection_decharger()

Vide en base de données les collections des palettes de couleurs standard (non éditables) en préservant les palettes personnelles.

palette_collection_decharger([null|string $collection_id = null ]) : array<string|int, mixed>

Il est possible de vider une collection donnée ou toutes les collections standard enregistrées.

Parameters
$collection_id : null|string = null

Identifiant de la collection ou null pour décharger toutes les collections.

Tags
throws
Exception
Return values
array<string|int, mixed>

Tableau résultat de l'action : soit une erreur, soit une information sur le déroulement correct. Les index sont :

  • int level : la gravité telle que définie pour les logs de spip
  • string code : le code de l'information ou de l'erreur qui représente aussi l'item de langue
  • array parameters : tableau associatif des paramètres de l'erreur à fournir à l'item de langue

palette_collection_repertorier()

Liste toutes les descriptions des collections disponibles ou seulement celles filtrées selon un ou plusieurs attributs.

palette_collection_repertorier([null|array<string|int, mixed> $filtres = [] ]) : array<string|int, mixed>

La fonction lit la meta ezpalette_collections.

Parameters
$filtres : null|array<string|int, mixed> = []

Tableau associatif [champ] = valeur de critères de filtres sur les descriptions de feed. Les opérateurs possibles sont l'égalité et la non égalité qui s'exprime en préfixant la valeur par !.

Return values
array<string|int, mixed>

Renvoie la liste des descriptions des collections enregistrées

palette_collection_est_protegee()

Indique si une collection est protégée, c'est-à-dire si son contenu est administré par le plugin et non par l'utilisateur.

palette_collection_est_protegee(string $collection_id) : bool

Les collections standard sont décrites par un fichier JSON du dossier palettes/ et intégralement rechargées depuis celui-ci : toute palette personnelle qu'on y déposerait disparaîtrait au premier rechargement. Une collection inconnue n'est en revanche pas protégée, ce qui permet d'en créer une simplement en employant un nom nouveau.

Parameters
$collection_id : string

Identifiant de la collection

Return values
bool

Vrai si la collection est administrée par le plugin

palette_collection_normaliser_identifiant()

Vérifie qu'un identifiant de collection est utilisable et le normalise.

palette_collection_normaliser_identifiant(string $collection_id) : string

L'identifiant sert de clé de configuration et de valeur en base : il est réduit aux minuscules, aux chiffres, au tiret et au souligné.

Parameters
$collection_id : string

Identifiant proposé

Return values
string

Identifiant normalisé, ou chaîne vide s'il ne comporte aucun caractère exploitable

palette_collection_recalculer()

Recalcule les agrégats d'une collection à partir des palettes réellement présentes en base.

palette_collection_recalculer(string $collection_id) : array<string|int, mixed>

Types proposés, nombre de schémas et de palettes, tailles disponibles : ces informations décrivent le contenu de la collection et ne sont donc jamais saisies, mais déduites. Les collections standard les obtiennent lors de leur chargement depuis leur fichier JSON ; pour une collection personnelle, il revient à l'appelant de demander ce recalcul après avoir créé, modifié ou supprimé des palettes.

Parameters
$collection_id : string

Identifiant de la collection

Return values
array<string|int, mixed>

Tableau résultat de l'action, aux index level, code et parameters

palette_collection_creer()

Crée une collection personnelle.

palette_collection_creer(string $collection_id[, array<string|int, mixed> $metadonnees = [] ]) : array<string|int, mixed>

Une collection personnelle se distingue d'une collection standard par son drapeau editable : elle n'est pas adossée à un fichier JSON, n'est donc jamais rechargée, et ses palettes survivent aux rechargements des autres collections.

Parameters
$collection_id : string

Identifiant souhaité, normalisé automatiquement

$metadonnees : array<string|int, mixed> = []

Métadonnées de la collection, parmi titre, version, source, licence, description et recommandations. À défaut de titre, l'identifiant en tient lieu

Return values
array<string|int, mixed>

Tableau résultat de l'action, aux index level, code et parameters. En cas de succès, l'index parameters porte l'identifiant retenu, qui peut différer de celui demandé

palette_collection_modifier()

Modifie les métadonnées d'une collection personnelle.

palette_collection_modifier(string $collection_id, array<string|int, mixed> $modifications) : array<string|int, mixed>

Les collections standard sont administrées par leur fichier JSON : les modifier en base n'aurait pas de sens, puisque le prochain chargement écraserait la modification.

Parameters
$collection_id : string

Identifiant de la collection

$modifications : array<string|int, mixed>

Métadonnées à modifier, parmi celles déclarées par _EZPALETTE_COLLECTION_METADONNEES

Return values
array<string|int, mixed>

Tableau résultat de l'action, aux index level, code et parameters

palette_collection_supprimer()

Supprime une collection personnelle.

palette_collection_supprimer(string $collection_id[, bool $avec_palettes = false ]) : array<string|int, mixed>

La suppression est refusée si la collection contient encore des palettes, à moins de le demander explicitement : effacer d'un geste un ensemble de palettes composées à la main mérite une confirmation.

Parameters
$collection_id : string

Identifiant de la collection

$avec_palettes : bool = false

Supprimer aussi les palettes de la collection

Return values
array<string|int, mixed>

Tableau résultat de l'action, aux index level, code et parameters

palette_restituer_nuancier()

Extrait le nuancier d'une palette et vérifie qu'il est exploitable.

palette_restituer_nuancier(array<string|int, mixed> $palette) : array<string|int, mixed>
Parameters
$palette : array<string|int, mixed>

Palette, ou nuancier seul

Return values
array<string|int, mixed>

Nuancier réindexé de zéro, ou tableau vide si la palette n'en contient pas

palette_restituer_identifiant()

Construit l'identifiant lisible d'une palette, utilisable comme préfixe de classe ou de variable CSS.

palette_restituer_identifiant(array<string|int, mixed> $palette[, null|string $defaut = 'palette' ]) : string

Deux palettes affichées sur la même page produiraient des sélecteurs identiques si le préfixe était constant : le dériver du schéma et de la collection les rend distincts.

Parameters
$palette : array<string|int, mixed>

Palette

$defaut : null|string = 'palette'

Préfixe employé si la palette ne porte pas de schéma

Return values
string

Identifiant en minuscules, réduit aux lettres, chiffres et tirets

palette_restituer_export()

Exporte une palette dans un format d'échange.

palette_restituer_export(array<string|int, mixed> $palette[, string $format = 'json' ]) : string

Le format json est le seul à restituer les attributs de la palette et les mentions de sa collection : les autres formats sont destinés à être intégrés dans du code et ne rendent que les couleurs.

Les formats css et oklch produisent le même bloc de variables CSS et ne diffèrent que par l'écriture des couleurs : hexadécimale pour le premier, oklch() pour le second. Voir palette_restituer_couleur() sur ce que cette notation apporte et sur les navigateurs qui l'interprètent.

Parameters
$palette : array<string|int, mixed>

Palette à exporter

$format : string = 'json'

Format visé : json, csv, scss, css, oklch, js ou php

Tags
used-by
balise_PALETTE_EXPORT_dist()
Return values
string

Palette formatée, ou chaîne vide si le nuancier est vide ou le format inconnu

palette_restituer_couleur()

Écrit une couleur dans la notation CSS demandée.

palette_restituer_couleur(string $hex[, string $notation = 'hex' ]) : string

Deux notations sont proposées. hex est celle du nuancier, comprise partout. oklch décrit la même couleur par sa clarté, son chroma et sa teinte : elle est lisible — on voit du premier coup d'œil qu'une palette progresse en clarté à teinte constante — et surtout modifiable dans la feuille de style, où oklch(from var(--x) l c h) permet de dériver une variante sans repasser par PHP.

Parameters
$hex : string

Couleur hexadécimale

$notation : string = 'hex'

Notation visée, hex ou oklch. Toute autre valeur revient à hex

Tags
note

oklch() est interprétée par tous les navigateurs à jour depuis 2023, mais ignorée par les plus anciens, qui laisseront la propriété sans valeur. C'est pourquoi hex reste la notation par défaut : une feuille de style qui doit fonctionner partout la conserve, une feuille destinée à être retouchée gagne à passer en oklch.

Return values
string

Couleur écrite dans la notation demandée

palette_restituer_css()

Produit une feuille de style déclarant une classe par couleur de la palette.

palette_restituer_css(array<string|int, mixed> $palette[, array<string|int, mixed> $options = [] ]) : string
Parameters
$palette : array<string|int, mixed>

Palette

$options : array<string|int, mixed> = []

Options de mise en forme :

  • string prefixe : préfixe des classes, dérivé de la palette par défaut
  • string propriete : propriété CSS affectée, background-color par défaut
  • string notation : écriture des couleurs, hex par défaut ou oklch
Return values
string

Feuille de style, ou chaîne vide si le nuancier est vide

palette_restituer_css_variables()

Produit une feuille de style déclarant une variable CSS par couleur de la palette.

palette_restituer_css_variables(array<string|int, mixed> $palette[, array<string|int, mixed> $options = [] ]) : string
Parameters
$palette : array<string|int, mixed>

Palette

$options : array<string|int, mixed> = []

Options de mise en forme :

  • string prefixe : préfixe des variables, dérivé de la palette par défaut
  • string notation : écriture des couleurs, hex par défaut ou oklch
Return values
string

Feuille de style, ou chaîne vide si le nuancier est vide

palette_restituer_legende()

Produit une légende HTML représentant la palette sous forme de bandeau de couleurs.

palette_restituer_legende(array<string|int, mixed> $palette[, array<string|int, mixed> $options = [] ]) : string
Parameters
$palette : array<string|int, mixed>

Palette

$options : array<string|int, mixed> = []

Options de mise en forme :

  • array intitules : intitulé de chaque couleur, la couleur elle-même par défaut
  • string orientation : horizontal par défaut, ou vertical
  • string classe : classe CSS du bandeau
  • string titre : titre affiché, la description de la palette par défaut
Tags
used-by
balise_PALETTE_LEGENDE_dist()
Return values
string

Fragment HTML, ou chaîne vide si le nuancier est vide

palette_restituer_svg()

Produit un aperçu SVG de la palette, sous forme de bandes juxtaposées.

palette_restituer_svg(array<string|int, mixed> $palette[, array<string|int, mixed> $options = [] ]) : string
Parameters
$palette : array<string|int, mixed>

Palette

$options : array<string|int, mixed> = []

Options de mise en forme :

  • int largeur : largeur totale en pixels, 300 par défaut
  • int hauteur : hauteur totale en pixels, 50 par défaut
  • bool etiquettes : inscrire le code de chaque couleur dans sa bande
Tags
used-by
balise_PALETTE_APERCU_dist()
Return values
string

Document SVG, ou chaîne vide si le nuancier est vide

Search results