web-dev-qa-db-ja.com

PHPでランダムな16進カラーコードを生成する

未定義のランダムな16進数のカラーコードを生成する必要があるプロジェクトに取り組んでいます。PHPでこのような関数を作成するにはどうすればよいですか。

64
joshdcomp

0から255までの乱数を取得し、16進数に変換します。

function random_color_part() {
    return str_pad( dechex( mt_Rand( 0, 255 ) ), 2, '0', STR_PAD_LEFT);
}

function random_color() {
    return random_color_part() . random_color_part() . random_color_part();
}

echo random_color();
88
Galen

RGB 16進文字列は0x0〜0xFFFFFFの数字であるため、その範囲の数字を生成して16進数に変換するだけです。

function Rand_color() {
    return '#' . str_pad(dechex(mt_Rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);
}

または:

function Rand_color() {
    return sprintf('#%06X', mt_Rand(0, 0xFFFFFF));
}
122
outis

あなたはその目的のために、非常に短いmd5を使用することができます

$color = substr(md5(Rand()), 0, 6);
47
Notepad
_$Rand = str_pad(dechex(Rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT);
echo('#' . $Rand);
_

必要に応じてRand()mt_Rand()を変更できます。また、strtoupper()str_pad()の周りに配置して、乱数をより見やすくすることができます。 (必須ではありませんが)。

それは完璧に動作し、ここで説明されている他のすべての方法よりもはるかに簡単です:)

29
Cas Bloem

有効な16進数の色には0〜9およびA〜Fを含めることができるため、これらの文字で文字列を作成してからシャッフルすると、最初の6文字を取得してランダムな16進数の色コードを作成できます。以下に例を示します!

コード

echo '#' . substr(str_shuffle('ABCDEF0123456789'), 0, 6);

これをwhileループでテストし、10,000個の一意の色を生成しました。

10,000個の一意の色を生成するために使用したコード:

$colors = array();
while (true) {
   $color          = substr(str_shuffle('ABCDEF0123456789'), 0, 6);
   $colors[$color] = '#' . $color;
   if ( count($colors) == 10000 ) {
      echo implode(PHP_EOL, $colors);
      break;
   }
}

その結果、 これらのランダムな色 が得られました。


outisは、私の最初の例では「4488CC」などの16進数を生成できなかったため、そのような16進数を生成できる関数を作成しました。

コード

function randomHex() {
   $chars = 'ABCDEF0123456789';
   $color = '#';
   for ( $i = 0; $i < 6; $i++ ) {
      $color .= $chars[Rand(0, strlen($chars) - 1)];
   }
   return $color;
}

echo randomHex();

2番目の例は、最初の例よりもはるかに異なる結果を返す可能性があるため、使用する方が適切ですが、多くのカラーコードを生成しない場合は、最初の例で問題なく動作します。

13
Jake
$color = sprintf("#%06x",Rand(0,16777215));
9
Cas Bloem

最短の方法:

echo substr(uniqid(),-6); // result: 5ebf06
7
Cyril

PHP 5.3では、 openssl_random_pseudo_bytes() :を使用できます。

$hex_string = bin2hex(openssl_random_pseudo_bytes(3));
3
danorton

これは私がそれを行う方法です。

<?php echo 'rgba('.Rand(0,255).', '.Rand(0,255).', '.Rand(0,255).', 0.73)'; ?>
3
Jeeva

誰かが明るい色を生成したい場合

sprintf('#%06X', mt_Rand(0xFF9999, 0xFFFF00));
2
MudithaE

これも良いと思います

$color= substr(str_shuffle('AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899'), 0, 6);
1
Jeff Janes
function random_color(){  
 return sprintf('#%06X', mt_Rand(0, 0xFFFFFF));
}
1
Shaz

最近ではモバイルデバイスでさえ16ビット以上の色が使用されているため、Webセーフカラーは必要ありません(有効な概念でもありません)。

詳細については、 Wikipedia を参照してください。

つまり、#000000〜#FFFFFFの任意の色を使用します。

edit:親愛なるダウンボーター。最初に質問の編集履歴を確認してください。

0
ceejayoz