Генерация цветов на основе букв в PHP

Вам нужно добавить dataType - http://api.jquery.com/jQuery.ajax/

$(document).ready(function() {
    $("#lesen").click(function() {
        $.ajax({
            url : "helloworld.txt",
            dataType: "text",
            success : function (data) {
                $(".text").html(data);
            }
        });
    });
}); 

1
задан BЈовић 23 December 2011 в 13:40
поделиться

4 ответа

1
ответ дан 2 September 2019 в 23:07
поделиться

Вы определенно захотите использовать HSV, поскольку плавный переход от одного оттенка к другому в этом пространстве тривиален.

Вероятно, не самый эффективный код в мире, но вот оно. Внизу кода есть небольшая тестовая страница, которую вы, конечно же, можете удалить / проигнорировать.

<?php

// RGB_TO_HSV copied from http://www.actionscript.org/forums/showthread.php3?t=50746

function HSV_TO_RGB ($H, $S, $V)  // HSV Values:Number 0-1
{                                 // RGB Results:Number 0-255
    $RGB = array();

    if($S == 0)
    {
        $R = $G = $B = $V * 255;
    }
    else
    {
        $var_H = $H * 6;
        $var_i = floor( $var_H );
        $var_1 = $V * ( 1 - $S );
        $var_2 = $V * ( 1 - $S * ( $var_H - $var_i ) );
        $var_3 = $V * ( 1 - $S * (1 - ( $var_H - $var_i ) ) );

        if       ($var_i == 0) { $var_R = $V     ; $var_G = $var_3  ; $var_B = $var_1 ; }
        else if  ($var_i == 1) { $var_R = $var_2 ; $var_G = $V      ; $var_B = $var_1 ; }
        else if  ($var_i == 2) { $var_R = $var_1 ; $var_G = $V      ; $var_B = $var_3 ; }
        else if  ($var_i == 3) { $var_R = $var_1 ; $var_G = $var_2  ; $var_B = $V     ; }
        else if  ($var_i == 4) { $var_R = $var_3 ; $var_G = $var_1  ; $var_B = $V     ; }
        else                   { $var_R = $V     ; $var_G = $var_1  ; $var_B = $var_2 ; }

        $R = $var_R * 255;
        $G = $var_G * 255;
        $B = $var_B * 255;
    }

    $RGB['R'] = $R;
    $RGB['G'] = $G;
    $RGB['B'] = $B;

    return $RGB;
}

function getColorForWord($word) {
    // get the percent of the first letter ranging from 0-1
    $first_letter_code = (ord(strtolower($word[0]))-97)/25.0;

    // add a phase depending on where you want to start on the color spectrum
    // red is 0, green is 0.25, cyan is 0.5, blue is ~0.75, and 1 is back to red
    $hue = $first_letter_code + 0.25;

    // you may also want to divide by how much of the spectrum you want to cover
    // (making the colors range only from green to blue, for instance)
    // but i'll leave that as an exercise

    // constrain it to 0-1
    if ($hue > 1.0)
        $hue -= 1.0;

    // the second value is the saturation ("colorfulness", ranging from gray to fully-colored)
    // the third is the value (brightness)
    $rgb = HSV_TO_RGB($hue, 1, 0.75);

    $hexstring = "#";

    foreach ($rgb as $c)
        $hexstring .= str_pad(dechex($c), 2, "0", STR_PAD_LEFT);

    return $hexstring;
}
?>

<html>

<head>
</head>

<body>
    <form method="POST" action="<?=$_SERVER["PHP_SELF"]?>">
        <input type="text" name="target_word" />
        <?php
        if ($_REQUEST["sub"] && $_REQUEST["target_word"] != "") {
            print "<span style=\"font-weight: bold; color: ".getColorForWord($_REQUEST["target_word"]).";\">".$_REQUEST["target_word"]."</span>";
        }
        ?>
        <br />

        <input type="submit" name="sub" value="Colorize" />
    </form>
</body>
0
ответ дан 2 September 2019 в 23:07
поделиться

Я бы указал код RGB первого цвета (100,100,100) и код RGB последнего цвета (200,200,200) и в основном сделал бы

1..25 B..Y

результирующийR = firstR + (lastR-firstR) * (1..25 ​​/ 26) результирующийG = firstG + (lastG-firstG) * (1..25 ​​/ 26) resultB = firstB + (lastB-firstB) * (1..25 ​​/ 26)

, поэтому B даст 100 + floor ((200-100) * (1/26)) 104,104,104

и Y будет 100 + этаж ((200-100) * (1/26)) 196,196,196

Это базовый код, но он разрешает градиент по всем трем цветам или только по одному (например, от 100,100,100 до 100,100,200), что приведет к градиенту в сторону синего

0
ответ дан 2 September 2019 в 23:07
поделиться
$str = iconv("CURRENT CHARSET HERE", "ASCII//TRANSLIT",  $orig_string);
$letter = ucfirst($str);
//A is 65, Z is 90
$hue = 2*pi() * ((ord($letter) - 65)/(90-65));

Это даст вам оттенок в радианах. Затем нужно просто выбрать определенную насыщенность и яркость и преобразовать в RGB или что-то еще. См. википедию .

1
ответ дан 2 September 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: