programing

PHP를 사용하여 임의 16진수 색상 코드 생성

shortcode 2022. 10. 26. 22:49
반응형

PHP를 사용하여 임의 16진수 색상 코드 생성

저는 정의되지 않은 수의 16진수 랜덤 컬러 코드를 생성해야 하는 프로젝트를 진행하고 있습니다. PHP에 이러한 기능을 구축하는 방법은 무엇입니까?

RGB의 16진수 문자열은 0x0 ~0xFFFF의 숫자이므로 해당 범위의 숫자를 생성하고 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));
}

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

md5는 그 목적에 사용할 수 있습니다.매우 짧습니다.

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

변경할 수 있습니다.rand()할 준비가 되어.mt_rand()당신이 원한다면, 그리고 당신은 넣을 수 있습니다.strtoupper()에워싸여str_pad()(필수는 아니지만) 랜덤한 숫자가 더 보기 좋게 보이도록 하기 위해.

이 방법은 완벽하게 동작하며 여기에 설명된 다른 모든 방법보다 훨씬 단순합니다.

유효한 16진수 색상은 0~9와 A~F를 포함할 수 있습니다.따라서 해당 문자로 문자열을 작성한 후 셔플하면 처음 6자를 가져와 랜덤 16진수 색 코드를 생성할 수 있습니다.다음은 예시입니다!

코드

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

잠시 후 루프 테스트를 통해 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;
   }
}

그 결과 이렇게 랜덤하게 색을 입게 되었습니다.


첫 번째 예에서는 '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();

두 번째 예는 첫 번째 예보다 훨씬 다른 결과를 반환할 수 있기 때문에 사용하는 것이 좋습니다.그러나 많은 컬러 코드를 생성하지 않을 경우 첫 번째 예제는 정상적으로 작동합니다.

$color = sprintf("#%06x",rand(0,16777215));

최단 경로:

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

이게 내가 하는 방법이야

<?php echo 'rgba('.rand(0,255).', '.rand(0,255).', '.rand(0,255).', 0.73)'; ?>

밝은 색을 내고 싶은 사람이 있다면

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

PHP 5.3에서는 openssl_random_pseudo_bytes()를 사용할 수 있습니다.

$hex_string = bin2hex(openssl_random_pseudo_bytes(3));

요즘은 모바일 기기조차 16비트 이상의 색상을 가지고 있기 때문에 웹 안전 색상은 더 이상 필요하지 않습니다(또한 유효한 개념도 아닙니다).

자세한 내용은 Wikipedia를 참조하십시오.

즉, #000000부터 #FFFFFF까지의 임의의 색상을 사용합니다.

edit : 다운보터 여러분먼저 질문의 편집 내역을 확인하십시오.

function random_color(){  
 return sprintf('#%06X', mt_rand(0, 0xFFFFFF));
}

이는 위 @Galen 버전을 기반으로 한 것이지만, 레드, 그린, 블루, 라이트, 다크 등의 색상을 제한할 수 있는 레인지 컨트롤을 추가하고 싶었습니다.그것은 다른 사람들에게 유용할 수 있다.

function random_colour_part($lower, $upper)
{
    //randomly select colour in range and convert to hexidecimal
    return str_pad(dechex(mt_rand($lower, $upper)), 2, '0', STR_PAD_LEFT);
}

function random_colour($colour)
{
    //loop through colour
    foreach ($colour as $key => $value)
    {
        //retrieve each r,g,b colour range and generate random hexidecimal colour
        if ($key == "r") $r = random_colour_part($value[0], $value[1]);
        if ($key == "g") $g = random_colour_part($value[0], $value[1]);
        if ($key == "b") $b = random_colour_part($value[0], $value[1]);
    }

    //return hexidecimal colour
    return "#" . $r . $g . $b;
}

//generate a random red-based colour
echo random_colour(["r"=>[0,255], "g"=>[0,0], "b"=>[0,0]]);

//generate a random light green-based colour (use only half of the 255 range)
echo random_colour(["r"=>[0,0], "g"=>[127,255], "b"=>[0,0]]);

//generate a random colour of any sort
echo random_colour(["r"=>[0,255], "g"=>[0,255], "b"=>[0,255]]);

이것도 아무 색깔이나 있으면 좋을 것 같아요.

$color= substr(str_shuffle('AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899'), 0, 6);
function randomRGB()
{
    $r = rand(0, 255);
    $g = rand(0, 255);
    $b = rand(0, 255);

    return "rgb({$r}, {$g}, {$b})";
}

function randomHexColor()
{
    return '#' . substr(str_shuffle('ABCDEF0123456789'), 0, 6);
}

$hexColor = randomHexColor();
$rgbColor = randomRGB();

코멘트를 보고 답변을 드립니다.웹 세이프 컬러의 구개념은 훌륭합니다.난 그것을 기억하고 싶다.

「」, 「」를 작성합니다.inc/Palette.php

<?php

class Palette
{
    private static $items = [];

    /**
     * Direct text from https://en.wikipedia.org/wiki/Web_colors#Web-safe_colors
     * Copy and paste, then replace any odd space blocks with a normal space
     *
     * @return string
     */
    private static function raw()
    {
        return "*000* 300 600 900 C00 *F00*
*003* 303 603 903 C03 *F03*
006 306 606 906 C06 F06
009 309 609 909 C09 F09
00C 30C 60C 90C C0C F0C
*00F* 30F 60F 90F C0F *F0F*
030 330 630 930 C30 F30
033 333 633 933 C33 F33
036 336 636 936 C36 F36
039 339 639 939 C39 F39
03C 33C 63C 93C C3C F3C
03F 33F 63F 93F C3F F3F
060 360 660 960 C60 F60
063 363 663 963 C63 F63
066 366 666 966 C66 F66
069 369 669 969 C69 F69
06C 36C 66C 96C C6C F6C
06F 36F 66F 96F C6F F6F
090 390 690 990 C90 F90
093 393 693 993 C93 F93
096 396 696 996 C96 F96
099 399 699 999 C99 F99
09C 39C 69C 99C C9C F9C
09F 39F 69F 99F C9F F9F
0C0 3C0 6C0 9C0 CC0 FC0
0C3 3C3 6C3 9C3 CC3 FC3
0C6 3C6 6C6 9C6 CC6 FC6
0C9 3C9 6C9 9C9 CC9 FC9
0CC 3CC 6CC 9CC CCC FCC
0CF 3CF 6CF 9CF CCF FCF
*0F0* 3F0 *6F0* 9F0 CF0 *FF0*
0F3 *3F3* *6F3* 9F3 CF3 *FF3*
*0F6* *3F6* 6F6 9F6 *CF6* *FF6*
0F9 3F9 6F9 9F9 CF9 FF9
*0FC* *3FC* 6FC 9FC CFC FFC
*0FF* *3FF* *6FF* 9FF CFF *FFF*";
    }

    public static function webSafeColors() {
        if (empty(self::$items)) {
            self::$items = explode(' ', str_replace(['*', "\n"], ['', ' '], self::raw()));
        }
        return self::$items;
    }

    public static function randomColor() {
        $colors = self::webSafeColors();
        $count = count($colors);

        return '#' . $colors[rand(0, $count - 1)];
    }
}

다음과 같은 파일이 어딘가에 포함됩니다.

include __DIR__ . '/../inc/Palette.php';

// dump the result
var_dump(Palette::randomColor());

사용할 수 있습니다.

function getRandomColor()
    {
        $letters = '0123456789ABCDEF';
        $color = '#';
        for ($i = 0; $i < 6; $i++) {
            $color .= $letters[rand(0, 15)];
        }
        return $color;
    }

언급URL : https://stackoverflow.com/questions/5614530/generating-a-random-hex-color-code-with-php

반응형