-
Notifications
You must be signed in to change notification settings - Fork 0
Documentation pour PHP (Français)
- Utiliser colori.php
- Créer une couleur
- Propriétés d'une couleur
- Exprimer une couleur dans différents formats
- Modifier une couleur
- Fusionner des couleurs
- Comparer deux couleurs
- Autres fonctions
(Note : colori signifie couleurs en italien. Le singulier est colore.)
Il suffit de télécharger le fichier colori.php, puis de l'importer dans votre code PHP comme suit :
require_once 'colori.php';
Le fichier colori.php commence par class Couleur
. Vous pouvez remplacer Couleur
par un autre nom pour nommer la classe différemment. Dans cette documentation, nous utiliserons Colore
.
Pour avoir accès aux fonctions de colori.php, vous devez créer un objet de classe Colore
:
$rosso = new Colore('red');
// Ce qui aura pour résultat :
$rosso == object(Colore)[1]
public 'r' => float 1,
public 'g' => float 0,
public 'b' => float 0,
public 'a' => float 1,
public 'h' => float 0,
public 's' => float 1,
public 'l' => float 0.5,
public 'w' => float 0,
public 'b' => float 0,
public 'c' => float 0.54291,
public 'c' => float 80.815,
public 'c' => float 69.893,
public 'c' => float 106.85,
public 'c' => float 0.11349
Le paramètre à fournir en entrée de new Colore(parametre)
doit être une chaîne de caractères dans un format valide selon la spécification CSS des formats de couleurs.
Créons les objets $rosso
, représentant la couleur rouge, et $rossoTrasparente
, représentant la couleur rouge d'opacité 0.6, à partir de leurs expressions dans les différents formats reconnus par CSS.
// Crée la couleur à partir de son nom
$rosso = new Colore('red');
// Crée la couleur à partir de son expression au format hexadécimal
$rosso = new Colore('#FF0000');
$rossoTrasparente = new Colore('#FF000099');
// ou
$rosso = new Colore('#F00');
$rossoTrasparente = new Colore('#F009');
// Crée la couleur à partir de son expression au format RGB
$rosso = new Colore('rgb(255, 0, 0)');
$rossoTrasparente = new Colore('rgb(255, 0, 0, 0.6)');
// ou
$rosso = new Colore('rgb(255 0 0)');
$rossoTrasparente = new Colore('rgb(255 0 0 / 0.6)');
Vous pouvez remplacer
rgb
parrgba
, cela aura le même effet.
// Crée la couleur à partir de son expression au format HSL
$rosso = new Colore('hsl(0, 100%, 50%)');
$rossoTrasparente = new Colore('hsl(0, 100%, 50%, 0.6)');
// ou
$rosso = new Colore('hsl(0 100% 50%)');
$rossoTrasparente = new Colore('hsl(0 100% 50% / 0.6)');
Vous pouvez remplacer
hsl
parhsla
, cela aura le même effet.
// Crée la couleur à partir de son expression au format HWB
$rosso = new Colore('hwb(0 0% 0%)');
$rossoTrasparente = new Colore('hwb(0 0% 0% / 0.6)');
// Crée la couleur à partir de son expression au format LAB
$rosso = new Colore('lab(54% 81 70)');
$rossoTrasparente = new Colore('lab(54% 81 70 / 0.6)');
// Crée la couleur à partie de son expression au format LCH
$rosso = new Colore('lch(54% 107 41)');
$rossoTrasparente = new Colore('lch(54% 107 41 / 0.6)');
L'espace de couleurs CIELAB (utilisé par les formats LAB et LCH) contient des couleurs qui ne sont pas dans l'espace de couleurs sRGB (utilisé par les formats RGB, HSL et HWB). Puisque CSS ne supporte pas encore nativement les couleurs au format LAB ou LCH, passer une telle couleur à
new Colore()
la convertira en la couleur la plus proche dans l'espace sRGB.Pour cette raison, vous pourriez remarquer certaines contradictions, par exemple :
$a = new Colore('lab(50% 118 43)'); $a->rgb == 'rgb(232, 0, 78)' // mais : $b = new Colore('rgb(232, 0, 78)') $b->lab == 'lab(50% 76 28)'$a = new Colore('lch(50% 125 20)'); $a->rgb == 'rgb(232, 0, 78)' // mais : $b = new Colore('rgb(232, 0, 78)') $b->lch == 'lch(50% 81 20)'
Lorsque un objet de classe Colore
est créé en utilisant new Colore(expression)
, 14 propriétés différentes de la couleur sont calculées. Elles correspondent à tous les paramètres des différents formats de couleurs :
-
Les propriétés
r
,g
etb
sont les valeurs de rouge, vert et bleu de la couleur lorsqu'elle est exprimée au formatrgb(r, g, b)
. Ces valeurs sont habituellement données entre 0 et 255 ou en pourcentages. -
La propriété
h
est la valeur de teinte de la couleur lorsqu'elle est exprimée au formathsl(h, s, l)
ouhwb(h, w, bk)
. Cette valeur est un angle, habituellement donné en degrés (de 0 à 360), grades (de 0 à 400), radians (de 0 à 2π) ou tours (de 0 à 1). -
Les propriétés
s
etl
sont respectivement les valeurs de saturation et de luminosité de la couleur lorsqu'elle est exprimée au formathsl(h, s, l)
. Ces valeurs sont données en pourcentages. -
Les propriétés
w
etbk
sont les valeurs de blancheur et noirceur de la couleur lorsqu'elle est exprimée au formathwb(h w bk)
. Ces valeurs sont données en pourcentages. -
La propriété
ciel
est la luminosité de la couleur dans l'espace de couleurs CIELAB, lorsqu'elle est exprimée aux formatslab(ciel ciea cieb)
oulch(ciel ciec cieh)
. Cette valeur est donnée en pourcentage. La spécification autorise des valeurs supérieures à 100% pour une compatibilité avec le standard HDR. -
Les propriétés
ciea
etcieb
sont respectivement les valeurs de la couleur sur les axes "a" et "b" de l'espace de couleurs CIELAB, lorsqu'elle est exprimée au formatlab(ciel ciea cieb)
. Elles peuvent prendre n'importe quelle valeur numérique, mais sont en général contenues dans l'intervalle [-160, 160]. -
La propriété
ciec
est la valeur de chroma de la couleur losqu'elle est exprimée au formatlch(ciel ciec cieh)
. Elle peut prendre n'importe quelle valeur numérique positive, mais est en général contenue dans l'intervalle [0, 230]. -
La propriété
cieh
est la valeur de teinte de la couleur lorsqu'elle est exprimée au formatlch(ciel ciec cieh)
. Cette valeur est un angle, habituellement donné en degrés (de 0 à 360), grades (de 0 à 400), radians (de 0 à 2π) ou tours (de 0 à 1). Elle est similaire à la propriétéh
du format HSL, mais sa valeur est définie d'une manière légèrement différente. -
La propriété
a
est l'opacité de la couleur. C'est le 4ème paramètre optionnel dans chaque format de couleur vu précédemment. Cette valeur est habituellement donnée dans l'intervalle [0, 1] ou en pourcentage.
Certaines couleurs ont un nom selon la spécification CSS. Pour ces couleurs-là, le paramètre name
renverra leur nom :
(new Colore('red'))->name() == 'red'
Note : si une couleur n'est pas exactement égale à une couleur nommée (par exemple à cause d'un arrondi dans un calcul), la propriété name
renverra quand même le nom de la couleur dont elle est proche :
(new Colore('red'))->rgb() == 'rgb(255, 0, 0)'
(new Colore('rgb(255, 0.1, 0.1)'))->name() == 'red'
La propriété exactName
récupère le nom uniquement quand la couleur y correspond avec exactitude :
(new Colore('red'))->rgb() == 'rgb(255, 0, 0)'
(new Colore('rgb(255, 0.1, 0.1)'))->exactName() == null
La propriété luminance
renvoie la valeur de luminance de la couleur, telle que définie par le W3C.
rosso.luminance == 0.2126
Les propriétés hex
, rgb
, hsl
, hwb
, lab
et lch
permettent de récupérer l'expression de la couleur au format correspondant :
$rosso = new Colore('red');
$rosso->hex() == '#ff0000'
$rosso->rgb() == 'rgb(255, 0, 0)'
$rosso->hsl() == 'hsl(0, 100%, 50%)'
$rosso->hwb() == 'hwb(0 0% 0%)'
$rosso->lab() == 'lab(54% 81 70)'
$rosso->lch() == 'lch(54% 107 41)'
Les couleurs transparentes (a < 1
) sont aussi supportées :
$rossoTrasparente = new Colore('rgb(255, 0, 0, 0.6)');
$rossoTrasparente->hex() == '#ff000099'
$rossoTrasparente->rgb() == 'rgb(255, 0, 0, 0.6)'
$rossoTrasparente->hsl() == 'hsl(0, 100%, 50%, 0.6)'
$rossoTrasparente->hwb() == 'hwb(0 0% 0% / 0.6)'
$rossoTrasparente->lab() == 'lab(54% 81 70 / 0.6)'
$rossoTrasparente->lch() == 'lch(54% 107 41 / 0.6)'
Ces propriétés masquent l'opacité quand elle est égale à 1. Les propriétés hexa
, rgba
, hsla
, hwba
, laba
et lcha
permettent de l'afficher dans tous les cas :
$rosso = new Colore('red');
$rosso->hexa() == '#ff0000ff'
$rosso->rgba() == 'rgb(255, 0, 0, 1)'
$rosso->hsla() == 'hsl(0, 100%, 50%, 1)'
$rosso->hwba() == 'hwb(0 0% 0% / 1)'
$rosso->laba() == 'lab(54% 81 70 / 1)'
$rosso->lcha() == 'lch(54% 107 41 / 1)'
La méthode change
permet de modifier n'importe quelle propriété d'une couleur, et renvoie un objet de classe Colore
dont toutes les propriétés ont été recalculées suite à la modification.
$result = $color->change($prop, $val, $options = (object)['replace' => <Boolean>, 'scale' => <Boolean>]);
Elle s'applique à un objet de classe Colore
, ici $color
.
Elle prend comme arguments :
-
$prop
: une chaîne de caractères correspondant au nom de la propriété à modifier, par exemple'r'
,'g'
,'b'
, etc. -
$val
: un nombre ou pourcentage correspondant à la valeur qui sera additionnée à la valeur précédente de la propriété. -
$options
: un objet contenant les propriétés suivantes :-
replace
(défaut =false
) : un booléen. Sitrue
, la valeur de$val
remplacera la valeur précédente de la propriété, au lieu de s'y additionner. -
scale
(défaut =false
) : un booléen. Sitrue
, la valeur de$val
sera multipliée à la valeur précédente de la propriété, au lieu de s'y additionner.
-
Elle renvoie un objet de classe Colore
, ici $result
, qui est une copie de $color
dont la propriété $prop
a été modifiée.
// Réduisons la luminosité du rouge de 10% :
$rosso = new Colore('red');
$nuovoColore = $rosso->change('l', '-10%');
// ce qui donne :
$rosso->hsl() == 'hsl(0, 100%, 50%)'
$nuovoColore->hsl() == 'hsl(0, 100%, 40%)'
// Remplaçons la luminosité du rouge par 10% :
$rosso = new Colore('red');
$nuovoColore = $rosso->change('l', '10%', (object)['replace' => true ]);
// ce qui donne :
$rosso->hsl() == 'hsl(0, 100%, 50%)'
$nuovoColore->hsl() == 'hsl(0, 100%, 10%)';
// Augmentons la luminosité du rouge de 50% de sa valeur actuelle :
$rosso->hsl() == 'hsl(0, 100%, 50%)'
$nuovoColore = $rosso->change('l', '150%', (object)['scale' => true]);
// ce qui donne :
$rosso->hsl() == 'hsl(0, 100%, 50%)'
$nuovoColore->hsl() == 'hsl(0, 100%, 75%)';
La méthode replace
est équivalente à change
avec l'option { replace: true }
.
$result = $color->replace($prop, $val);
Elle s'applique à un objet de classe Colore
, ici $color
.
Elle prend comme arguments :
-
$prop
: une chaîne de caractères correspondant au nom de la propriété à modifier, par exemple'r'
,'g'
,'b'
, etc. -
$val
: un nombre ou pourcentage correspondant à la valeur qui remplacera la valeur précédente de la propriété.
Elle renvoie un objet de classe Colore
, ici $result
, qui est une copie de $color
dont la propriété $prop
a été remplacée.
// Remplaçons la luminosité du rouge par 10% :
$rosso = new Colore('red');
$nuovoColore = $rosso->replace('l', '10%');
// ce qui donne :
$nuovoColore->hsl() == 'hsl(0, 100%, 10%)';
La méthode scale
est équivalente à change
avec l'option (object)["scale" => true]
.
$result = $color->scale($prop, $val);
Elle s'applique à un objet de classe Colore
, ici $color
.
Elle prend comme arguments :
-
$prop
: une chaîne de caractères correspondant au nom de la propriété à modifier, par exemple'r'
,'g'
,'b'
, etc. -
$val
: un nombre ou pourcentage correspondant à la valeur qui sera multipliée à la valeur précédente de la propriété.
Elle renvoie un objet de classe Colore
, ici $result
, qui est une copie de $color
dont la propriété $prop
a été modifiée.
// Augmentons la luminosité du rouge de 50% de sa valeur actuelle :
$rosso = new Colore('red');
$nuovoColore = $rosso->scale('l', '150%');
// ce qui donne :
$rosso->hsl() == 'hsl(0, 100%, 50%)'
$nuovoColore->hsl() == 'hsl(0, 100%, 75%)'
La méthode greyscale
(ou grayscale
) transforme une couleur en un gris ayant la même luminosité qu'elle.
$result = $color->greyscale();
Elle s'applique à un objet de class Colore
, ici $color
.
Elle ne prend aucun argument.
Elle renvoie un objet de classe Colore
, ici $result
, qui est une copie de $color
dont la saturation a été réduite à 0.
// Prenons du bleu
$blu = new Colore('blue');
$blu->hsl() == 'hsl(240, 100%, 50%)'
// Appliquons sepia au bleu
$grigio = $blu->greyscale();
$grigio->hsl() == 'hsl(240, 0%, 50%)'
La méthode sepia
transforme une couleur en un ton sépia.
$result = $color->sepia();
Elle s'applique à un objet de class Colore
, ici $color
.
Elle ne prend aucun argument.
Elle renvoie un objet de classe Colore
, ici $result
, qui est une modification de $color
vers les tons sépia.
// Prenons du bleu
$blu = new Colore('blue');
$blu->rgb() == 'rgb(0, 0, 255)'
// Appliquons greyscale au bleu
$seppia = $blu->sepia();
$seppia->rgb() == 'rgb(48, 43, 33)'
La méthode complement
calcule la couleur complémentaire.
$result = $color->complement();
Elle s'applique à un objet de classe Colore
, ici $color
.
Elle ne prend aucun argument.
Elle renvoie un objet de classe Colore
, ici $result
, qui est la couleur complémentaire de $color
.
// La couleur complémentaire du rouge est le cyan / aqua
$rosso = new Colore('red');
$rosso->complement()->name() == 'aqua'
// La couleur complémentaire du blanc est le blanc lui-même
$bianco = new Couleur('white');
$bianco->complement()->name() == 'white'
La méthode negative
(ou invert
) calcule la couleur négative.
$result = $color->negative();
Elle s'applique à un objet de classe Colore
, ici $color
.
Elle ne prend aucun argument.
Elle renvoie un objet de classe Colore
, ici $result
, qui est la couleur négative de $color
.
// La couleur négative du blanc est le noir
$bianco = new Colore('white');
$bianco->negative()->name() == 'black'
// La couleur négative du rouge est le cyan
$rosso = new Colore('red');
$rosso->negative()->name() == 'aqua'
La méthode statique blend
permet de fusionner plusieurs couleurs. En d'autres termes, elle calcule la couleur que vous verriez à l'écran si vous superposiez plusieurs couleurs.
$result = Colore::blend($color1, $color2, $color3, ...);
Elle prend comme arguments :
- un nombre arbitraire d'objets de type
Colore
ou de chaînes de caractères dans un format compatible avecnew Colore()
. Chaque couleur sera superposée à la précédente.
Elle renvoie un objet de type Colore
qui est la couleur que l'on voit en superposant toutes les couleurs fournies en argument l'une après l'autre.
Attention, si vous superposez une couleur opaque (telle que
$color->a == 1
) à une autre couleur, alors le résultat sera cette même couleur opaque ; puisqu'elle n'est pas transparente, elle ne laisse pas entrevoir la couleur en-dessous.blend
est donc principalement utile pour superposer des couleurs transparentes (telles que$color->a < 1
).
// Prenons du rouge et superposons du bleu avec opacité 0.5
$bluTrasparente = (new Colore('blue'))->replace('a', .5);
$result = Colore::blend('red', $bluTrasparente);
// Le résultat est violet, comme on s'y attend
$result->name() == 'purple'
// Superposons toujours du rouge et du bleu, mais ajoutons-y du vert
// avec opacité 0.4
$verdeTrasparente = (new Colore('green'))->replace('a', .4);
$result = Colore::blend('red', $bluTrasparente, $verdeTrasparente);
// Le résultat est un violet désaturé, presque gris
$result->rgb() == 'rgb(77, 51, 77)'
La méthode blend
permettait de résoudre l'égalité suivante pour obtenir $result
:
$result = Colore::blend($background, $overlay);
La méthode statique unblend
, quant à elle, permet résoudre la même équation lorsqu'on veut trouver $background
. Autrement dit, elle prend une couleur $result
et dé-fusionne $overlay
d'avec elle.
$background = Colore::unblend($result, $overlay);
$result = Colore::unblend($color1, $color2, $color3, ...);
Elle prend comme arguments :
- un nombre arbitraire d'objets de type
Colore
ou de chaînes de caractères dans un format compatible avecnew Colore()
. Chaque couleur sera retirée à la précédente.
Elle renvoie un objet de type Colore
qui est la couleur obtenue après avoir dé-fusionné toutes les couleurs fournies en argument une par une.
// Avec blend, nous avons vu que fusionner du rouge et du bleu transparent
// donnait du violet. En toute logique, retirer le bleu transparent du violet
// devrait donc nous donner du rouge à nouveau.
$bluTrasparente = (new Colore('blue'))->replace('a', .5);
$result = Colore::unblend('purple', $bluTrasparente);
// C'est le cas !
$result->name() == 'red'
La méthode blend
permettait de résoudre l'égalité suivante pour obtenir $result
:
$result = Colore::blend($background, $overlay)
La méthode statique whatToBlend
, quant à elle, permet re résoudre la même équation lorsqu'on veut trouver $overlay
. Autrement dit, elle prend deux couleurs $background
et $result
et calcule quelle couleur $overlay
devrait être fusionnée avec $background
pour obtenir la couleur $result
.
$overlay = Colore::whatToBlend($background, $result)
$overlay = Colore::whatToBlend($background, $result, $alpha, $alphaStep);
Elle prend comme arguments :
-
$background
et$result
: deux objets de typeColore
ou chaînes de caractères dans un format compatible avecnew Colore()
. -
$alpha
: un nombre, la valeur (optionnelle) d'opacité que vous souhaitez obtenir pour$overlay
. En effet, plusieurs couleurs différentes peuvent être solutions de cette équation. Si tel est le cas, fournir cette valeur$alpha
permet d'obtenir une solution unique. -
$alphaStep
(défaut =0.1
) : un nombre, la valeur (optionnelle) d'écart entre l'opacité des solutions données parwhatToBlend
, dans le cas où il en existe plusieurs.
// whatToBlend donne la liste des couleurs qui peuvent être
// superposées au rouge pour obtenir du violet :
$result = Colore::whatToBlend('red', 'purple');
array_map($result, fn($c) => $c->rgb()) == [
'rgb(0, 0, 255, 0.5)',
'rgb(43, 0, 213, 0.6)',
'rgb(74, 0, 183, 0.7)',
'rgb(96, 0, 160, 0.8)',
'rgb(114, 0, 142, 0.9)',
'purple'
];
// Si on précise qu'on veut une solution d'opacité 0.5, on obtient
// bien du bleu d'opacité 0.5. C'est bien la valeur de bluTrasparente
// dans les exemples de blend et unblend !
$result = Colore::whatToBlend('red', 'purple', 0.5);
$result->rgb() == 'rgb(0, 0, 255, 0.5)'
La méthode statique contrast
calcule le contraste entre deux couleurs.
$result = Colore::contrast($color1, $color2);
Elle prend comme arguments :
-
$color1
et$color2
: deux objets de typeColore
ou chaînes de caractères dans un format compatible avecnew Colore()
.
Elle renvoie un nombre entre 1 et 21.
Colore::contrast('white', 'black') == 21
Colore::contrast('skyblue', 'darkblue') == 8.7835
Pour qu'un texte soit facilement lisible sur une surface colorée, il est nécessaire que le contraste entre la couleur de cette surface et la couleur du texte soit suffisamment élevé. La méthode contrast
peut par exemple être pratique pour vérifier si deux couleurs vérifient les recommandations du WCAG.
La méthode contrastedText
détermine si du texte noir ou blanc serait le plus visible sur une surface colorée.
$result = $color->contrastedText();
Elle s'applique à un objet de type Colore
, ici $color
.
Elle ne prend aucun argument.
Elle renvoie la chaîne de caractères 'white'
ou 'black'
.
// Sur une surface bleue ciel, le texte noir
// est plus lisible que le texte blanc
$bluCielo = new Colore('skyblue');
$bluCielo->contrastedText() == 'black'
// Sur une surface bleue foncé, le texte blanc
// est plus lisible que le texte noir
$bluScuro = new Colore('darkblue');
$bluScuro->contrastedText() == 'white'
La méthode improveContrast
modifie la couleur à laquelle elle est appliquée, plus particulièrement en augmentant ou diminuant sa luminosité CIE ciel
, pour lui donner un meilleur contraste avec une autre couleur.
$result = $color->improveContrast($referenceColor, $desiredContrast, $step, $options = (object)["lower" => <Boolean>, "towards" => <Boolean>, "maxIterations" => <Boolean>]);
Elle s'applique à un objet de type Colore
; dans cet exemple, il s'agit de $color
.
Elle prend comme arguments :
-
$referenceColor
: un objet de typeColore
ou une chaîne de caractères dans un format compatible avecnew Colore()
, utilisé comme couleur de référence : la méthode cherche à améliorer la valeur deColore::contrast($color, $referenceColor)
. -
$desiredContrast
: un nombre utilisé comme la valeur de contraste que la méthode essaiera d'atteindre. -
$step
(défaut =2
) : un nombre utilisé comme la quantité qui sera ajoutée ou retirée de la luminosité CIE de$color
; c'est-à-dire qu'à chaque étape,$color->ciel
augmente ou diminue de$step
%. -
$options
: un objet contenant les propriétés suivantes :-
lower
(défaut =false
): peut prendre les valeurs suivantes :-
false
:improveContrast
ne fera rien siColore::contrast($color, $referenceColor) > $desiredContrast
. -
true
: quandColore::contrast($color, $referenceColor) > $desiredContrast
,$color
sera modifiée pour réduire le contraste afin qu'il se rapproche le plus possible de$desiredContrast
.
-
-
towards
(défaut =null
) : détermine siimproveContrast
doit augmenter le contraste en éclaircissant ou en assombrissant$color
. Peut prendre les valeurs suivantes :-
'black'
:improveContrast
essaiera uniquement d'améliorer le contraste et assombrissant$color
. -
'white'
:improveContrast
essaiera uniquement d'améliorer le contraste et éclaircissant$color
. -
null
:improveContrast
essaiera de déterminer automatiquement s'il vaut mieux assombrir ou éclaircir$color
. Si elle n'y parvient pas, la valeur choisie sera'black'
.
-
-
maxIterations
(défaut =100
) : le nombre maximum de fois queimproveContrast
modifiera la couleur pour améliorer le contraste.
-
Elle renvoie un objet de classe Colore
, ici $result
, qui est une copie de $color
à laquelle ont été appliquées les modifications de la propriété ciel
telles que Colore::contrast($result, $referenceColor) > $desiredContrast
.
// Prenons l'exemple d'un fond bleu clair, sur lequel
// on veut placer du texte bleu ciel.
$bluChiaro = new Couleur('lightblue');
$bluCielo = new Couleur('skyblue');
Colore::contrast($bluChiaro, $bluCielo) == 1.1396
// Le contraste entre les couleurs bleu ciel et bleu clair
// est trop faible pour être bien lisible. Le WCAG recommande
// un contraste d'au moins 4.5. Modifions la couleur bleu ciel
// pour atteindre cette valeur.
$nuovoBlue = $bluCielo->improveContrast($bluChiaro, 4.5);
// On peut voir que le nouveau bleu est beaucoup plus
// sombre que le bleu ciel dont on est parti.
$bluCielo->hsl() == 'hsl(197, 71%, 73%)'
$nuovoBlu->hsl() == 'hsl(193, 100%, 24%)'
// Le contraste souhaité est atteint !
Colore::contrast($bluChiaro, $nuovoBlue) == 4.6554
La méthode statique distance
mesure à quel point deux couleurs sont différentes.
$result = Colore::distance($color1, $color2, $format, $tolerance);
Elle prend comme arguments :
-
$color1
et$color2
: deux objets de typeColore
ou chaînes de caractères dans un format compatible avecnew Colore()
. -
$format
: une chaîne de caractères, détermine quel format des couleurs sera utilisé pour mesurer leur distance. Peut prendre les valeurs suivantes :-
'rgb'
,'hsl'
,'hwb'
,'lab'
ou'lch'
: la distance entre les deux couleurs sera calculée en additionnant la différence des valeurs de chaque propriété du format choisi. -
null
(défaut) : la distance sera calculée en faisant la moyenne des distances pour tous les formats.
-
-
$tolerance
(défaut =0.02
) : un nombre qui représente une certaine tolérance pour ignorer certaines propriétés quand elles n'ont aucun effet. Par exemple, dans le format HSL, si L = 0, alors la couleur est noire indépendament des valeurs de H et S. Pour pouvoir tenir compte de ce fait même quand des arrondis ont rendu la valeur L des couleurs légèrement supérieure à 0, la méthodedistance
ignore H et S quand$color1->l < $tolerance && $color2->l < $tolerance
.
Elle renvoie un nombre positif.
// Ce sont des couleurs identiques
Colore::distance('red', 'red') == 0
// Ce sont des couleurs bien différentes
Colore::distance('red', 'blue') == 1.3467999999999998
// Malgré des valeurs très différentes de H et S,
// les deux couleurs sont du noir
Colore::distance('hsl(200, 50%, 0%)', 'hsl(50, 35%, 0%)') == 0
La méthode statique same
détermine si deux couleurs sont identiques.
$result = Colore::same($color1, $color2, $tolerance);
Elle prend comme arguments :
-
$color1
et$color2
: deux objets de typeColore
ou chaînes de caractères dans un format compatible avecnew Colore()
. -
$tolerance
(défaut =0.02
) : un nombre qui représente la distance minimale entre deux couleurs pour qu'elles soient considérées différentes.
Elle renvoie true
si les couleurs sont considérées identiques, false
sinon.
// Ce sont des couleurs identiques
Colore::same('red', 'red') == true
// Ce sont des couleurs différentes
Colore::same('red', 'blue') == false
// Malgré des valeurs très différentes de H et S,
// les deux couleurs sont du noir
Colore::same('hsl(200, 50%, 0%)', 'hsl(50, 35%, 0%)') == true
// Les deux couleurs sont tellement proches
// qu'elles sont considérées identiques
Colore::same('rgb(0, 0, 255)', 'rgb(0, 0, 254)') == true
La méthode statique gradient
génère un dégradé entre deux couleurs qui évite de passer par une zone désaturée (voir cet article).
$result = Colore::gradient($start, $end, $steps, $format);
Elle prend comme arguments :
-
$start
et$end
: deux objets de typeColore
ou chaînes de caractères dans un format compatible avecnew Colore()
. -
$steps
(défaut =5
) : le nombre d'étapes - c'est-à-dire le nombre de couleurs qui seront calculées - pour passer de$start
à$end
. Plus ce nombre est élevé, plus le dégradé sera fluide et évitera la zone désaturée. -
$format
(défaut ='lch'
) : une chaîne de caractères contenant le nom du format dont les propriétés seront utilisées pour calculer le dégradé. Les valeurs supportées sont'rgb'
,'hsl'
,'hwb'
,'lab'
et'lch'
.
Elle renvoie un Array
de longueur $steps + 1
d'objets de type Colore
, de la forme [$start, $color2, $color3, ..., $end]
.
$colori = Colore::gradient('orchid', 'palegreen');
// Pour utiliser le dégradé en CSS, plaçons les couleurs dans la syntaxe de dégradé CSS
$gradiente = 'linear-gradient(to right, ' . implode(', ', array_map(function($c) { return $c->name() ?? $c->rgb() })) . ')';
// En plaçant ceci comme valeur de background-image en CSS, le dégradé serait affiché
$$gradiente == 'linear-gradient(to right, orchid, rgb(255, 122, 167), rgb(255, 153, 134), rgb(253, 182, 89), rgb(210, 220, 98), palegreen)'
// Calculons un dégradé entre les mêmes couleurs, mais en utilisant le format HSL
$colori = Colore::gradient('orchid', 'palegreen', 5, 'hsl');
// Pour utiliser le dégradé en CSS, plaçons les couleurs dans la syntaxe de dégradé CSS
$gradiente = 'linear-gradient(to right, ' . implode(', ', array_map(function($c) { return $c->name() ?? $c->rgb() })) . ')';
// En plaçant ceci comme valeur de background-image en CSS, le dégradé serait affiché
$gradiente == 'linear-gradient(to right, orchid, rgb(227, 118, 158), darksalmon, rgb(241, 221, 133), rgb(204, 246, 142), palegreen)'