web-dev-qa-db-de.com

Erzeugen eines zufälligen Hex-Farbcodes mit PHP

Ich arbeite an einem Projekt, bei dem ich eine undefinierte Anzahl zufälliger, hexadezimaler Farbcodes generieren muss.

56
joshdcomp

Holen Sie sich eine Zufallszahl von 0 bis 255 und konvertieren Sie sie in Hex:

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();
83
Galen

Ein RGB-Hex-String ist nur eine Zahl zwischen 0x0 und 0xFFFFFF. Generieren Sie einfach eine Zahl in diesem Bereich und konvertieren Sie sie in hexadezimal:

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

oder:

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

sie können md5 zu diesem Zweck verwenden, sehr kurz

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

Sie können Rand() für mt_Rand() ändern, wenn Sie möchten, und Sie können strtoupper() um die str_pad() setzen, damit die Zufallszahl besser aussieht (obwohl dies nicht erforderlich ist).

Es funktioniert perfekt und ist viel einfacher als alle anderen hier beschriebenen Methoden :)

29
Cas Bloem

Gültige Hex-Farben können 0 bis 9 und A bis F enthalten. Wenn Sie also eine Zeichenfolge mit diesen Zeichen erstellen und diese anschließend mischen, können Sie die ersten 6 Zeichen verwenden, um einen zufälligen Hex-Farbcode zu erstellen. Ein Beispiel ist unten!

code

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

Ich habe dies in einer while-Schleife getestet und 10.000 einzigartige Farben erzeugt.

code, mit dem ich 10.000 einzigartige Farben erzeugt habe:

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

Das gab mir diese zufälligen Farben als Ergebnis.


outis wies darauf hin, dass mein erstes Beispiel keine Hexadezimale wie '4488CC' generieren konnte. Daher habe ich eine Funktion erstellt, mit der sich Hexadezimale wie diese generieren lassen.

code

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

echo randomHex();

Das zweite Beispiel wäre besser zu verwenden, da es wesentlich mehr Ergebnisse liefern kann als im ersten Beispiel. Wenn Sie jedoch nicht viele Farbcodes generieren, funktioniert das erste Beispiel gut.

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

Kürzester Weg:

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

Ab PHP 5.3 können Sie openssl_random_pseudo_bytes () verwenden:

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

Ich denke, das wäre gut so, es bekommt jede Farbe zur Verfügung

$color= substr(str_shuffle('AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899'), 0, 6);
1
Jeff Janes

So mache ich es.

<?php echo 'rgba('.Rand(0,255).', '.Rand(0,255).', '.Rand(0,255).', 0.73)'; ?>
1
Jeeva
function random_color(){  
 return sprintf('#%06X', mt_Rand(0, 0xFFFFFF));
}
0
Shaz

Web-sichere Farben sind nicht mehr erforderlich (auch kein gültiges Konzept), da selbst mobile Geräte heutzutage über 16 Bit verfügen.

Siehe Wikipedia für weitere Informationen.

Verwenden Sie also eine beliebige Farbe von # 000000 bis #FFFFFF.

edit: Liebe Downvoter. Überprüfen Sie zuerst den Bearbeitungsverlauf für die Frage.

0
ceejayoz

Wenn jemand helle Farben erzeugen möchte 

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