2 つの色を生成する小さなスクリプトを作成しようとしています。1 つを背景として使用し、もう 1 つをフォントの色として使用すると、次のガイドラインに従って読み取り可能になります。
http://www.hgrebdes.com/colour/spectrum/colourvisibility.html
W3C の Web アクセシビリティ ガイドライン (そして不十分)
色の可視性は、次のアルゴリズムに従って決定できます。
(これは提案されたアルゴリズムであり、まだ変更の余地があります。)
2 色の明度差と色差が設定範囲よりも大きい場合、2 色は良好な色の視認性を提供します。
色の明るさは次の式で決定されます: ((赤の値 X 299) + (緑の値 X 587) + (青の値 X 114)) / 1000 注: このアルゴリズムは、RGB 値を YIQ 値に変換する式から取得されます。この明るさの値は、色の知覚される明るさを示します。
色差は次の式で決定されます: (最大 (赤の値 1、赤の値 2) - 最小 (赤の値 1、赤の値 2)) + (最大 (緑の値 1、緑の値 2) - 最小 (緑の値 1) 、緑の値 2)) + (最大 (青の値 1、青の値 2) - 最小 (青の値 1、青の値 2))
色の明るさの差の範囲は 125 です。色の差の範囲は 500 です。
私のコードは次のとおりです。
do {
$bg[0] = rand(0, 255);
$bg[1] = rand(0, 255);
$bg[2] = rand(0, 255);
$bg[3] = ($bg[0] + $bg[1] + $bg[2])/1000;
$txt[0] = rand(0, 255);
$txt[1] = rand(0, 255);
$txt[2] = rand(0, 255);
$txt[3] = ($txt[0] + $txt[1] + $txt[2])/1000;
//Brightness Difference = Brightness of color 1 - Brightness of color 2
$brightnessDifference = abs($bg[3] - $txt[3]);
//Color difference = Maximum (Red1, Red2) - Minimum (Red1, Red2) etc for Blue and Green
$colorDifference = max($bg[0], $txt[0]) - min($bg[0], $txt[0]) + max($bg[1], $txt[1]) - min($bg[1], $txt[1]) + max($bg[2], $txt[2]) - min($bg[2], $txt[2]);
} while($brightnessDifference < 125 || $colorDifference < 500)
しかし、実行時間は PHP で許可されている時間を超えています...最適化する方法についての提案はありますか? :)