Zunächst einmal denke ich, Sie bei Particletree einen Blick auf dieser ausgezeichneten Blog-Post zu nehmen.
Davon abgesehen, würde ich ihre smarty_modifier_contrast() Funktion verwenden und es ein wenig ändern, um Ihre spezifischen Bedürfnisse zu adressieren, so etwas wie:
function color_contrast($bgcolor, $color1, $color2, $color3, ...)
{
return (hexdec($bgcolor) > 0xffffff/2) ? min(array_slice(func_get_args(), 1)) : max(array_slice(func_get_args(), 1));
}
So würden Sie brauchen nur jede beliebige Farbe für die verwenden Hintergrund (vergessen Sie nicht, die fallen!) und dann alle anderen Farben an das Array übergeben, in diesem Fall habe ich eine variable Anzahl von Argumenten verwendet, aber Sie können es ändern, so dass es eine einzige akzeptiert Reihe von Farben - es wird dann automatisch die dunkelste oder die hellste Farbe auswählen, abhängig von der $bgcolor
und gut genug Kontrast zur besseren Lesbarkeit bieten:
function color_contrast($bgcolor, $colors = array())
{
return (hexdec($bgcolor) > 0xffffff/2) ? min($colors) : max($colors);
}
die $bgcolor
zu wählen, können Sie es dem Zufall tun, wie ich vor der Verwendung, sagte eine zweite Funktion, die Sie mit dieser Aufgabe wie Sättigung oder Luminanz helfen Das hängt wirklich davon ab, was du suchst.
Haben Sie so etwas wie $ newRed = (($ rgb [ 'red'] + 0x80) * 0xFF) bedeuten; Wobei $ rgb ['red'] eigentlich so etwas wie 163 – Lizard
'& 0xff' ist. Aber ja. –