Simulate a palette for deuteranopia

Produce a comparable palette that approximates deuteranopic color perception.

Simulate all palette entries with one explicit vision profile:

use PhpColor\Color\Palette\ColorPalette;
use PhpColor\Color\Vision\ColorVisionSimulator;
use PhpColor\Color\Vision\VisionProfile;

$source = ColorPalette::parse([
    'danger' => '#dc2626',
    'warning' => '#d97706',
    'success' => '#16a34a',
    'info' => '#2563eb',
]);

$colors = ColorVisionSimulator::create(VisionProfile::Deuteranopia)
    ->simulateAll($source->all());

$result = array_combine(
    $source->names(),
    array_map(static fn ($color) => $color->toHex(), $colors),
);

assert(['danger' => '#98a526', 'warning' => '#b4bc28',
    'success' => '#4b4065', 'info' => '#3c38c2'] === $result);
use PhpColor\Color\Palette\ColorPalette; use PhpColor\Color\Vision\ColorVisionSimulator; use PhpColor\Color\Vision\VisionProfile; $source = ColorPalette::parse([ 'danger' => '#dc2626', 'warning' => '#d97706', 'success' => '#16a34a', 'info' => '#2563eb', ]); $colors = ColorVisionSimulator::create(VisionProfile::Deuteranopia) ->simulateAll($source->all()); $result = array_combine( $source->names(), array_map(static fn ($color) => $color->toHex(), $colors), ); assert(['danger' => '#98a526', 'warning' => '#b4bc28', 'success' => '#4b4065', 'info' => '#3c38c2'] === $result);

The matrix simulation is a test aid, not a reproduction of every person's experience. Test meaning, labels, and contrast as well as color separation.

See vision simulation or ColorVisionSimulator.