phpで色の明るさを調整する方法

phpで色の明るさを調整する方法

phpで色の輝度の調整をする方法を紹介します。

ユーザーに特定の色を指定してもらいその色に対して明るさ調整した色を作成する場合に便利です。

color-lightness - lightness

真ん中の色に対して左は暗く、右は明るくしたものです。

sassでのlignten、darkenに近い印象です。

phpで色の明るさを調整する方法

以下の関数で調整できます。

function lightness( $hexCode, $adjustPercent ) {
    $hexCode = ltrim( $hexCode, '#' );

    if ( strlen( $hexCode ) == 3 ) {
        $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
    }

    $hexCode = array_map( 'hexdec', str_split( $hexCode, 2 ) );

    foreach ( $hexCode as & $color ) {
        $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
        $adjustAmount = ceil( $adjustableLimit * $adjustPercent );

        $color = str_pad( dechex( $color + $adjustAmount ), 2, '0', STR_PAD_LEFT );
    }

    return '#' . implode( $hexCode );
}

引数に16進カラーコード、明るく暗くする割合を取ります。

割合は正の少数で明るく、負の少数で暗くなります。

カラーコードから「#」を取ります。

「#abc」など省略形でしていされた場合に「#aabbcc」にします。

rgb要素に分け、それぞれを10進数にします。

分けた要素に対して、明るく暗くします。

最初の画像は以下で表示しています。

<table>
	<tbody>
		<tr>
			<td style="background-color: <?php echo adjustBrightness('#7E57C2', -0.2) ?>"></td>
			<td style="background-color:#7E57C2"></td>
			<td style="background-color: <?php echo adjustBrightness('#7E57C2', 0.8) ?>"></td>
		</tr>
		<tr>
			<td style="background-color: <?php echo adjustBrightness('#42A5F5', -0.2) ?>"></td>
			<td style="background-color:#42A5F5"></td>
			<td style="background-color: <?php echo adjustBrightness('#42A5F5', 0.8) ?>"></td>
		</tr>
		<tr>
			<td style="background-color: <?php echo adjustBrightness('#FFA726',-0.2) ?>"></td>
			<td style="background-color:#FFA726"></td>
			<td style="background-color: <?php echo adjustBrightness('#FFA726', 0.8) ?>"></td>
		</tr>
		<tr>
			<td style="background-color: <?php echo adjustBrightness('#EF5350', -0.2) ?>"></td>
			<td style="background-color:#EF5350"></td>
			<td style="background-color: <?php echo adjustBrightness('#EF5350', 0.8) ?>"></td>
		</tr>
	</tbody>
<table>