Nasıl PHP hex renk kodları aracılığıyla ben döngü?

8 Cevap php

Ben dizideki her alan bir renk kodu içeren bir dizi istiyorum

array(0 => '#4CFF00', 1 => '#FFE97F')

Ve ben bu siyah yeşil başlayarak renk yelpazesine üzerinden gitmek istiyorum.

Yeşil-> mavi -> koyu mavi -> mor -> sarı -> turuncu -> kırmızı -> kahverengi -> siyah

This order doesn't need to be exactly the same, but I think you get the picture. Can anybody help with this? Is there a website that has done this before?

8 Cevap

Sen ne doygunluk ve değer size uygun hangi, 360 derece tüm yol spektrum etrafında 0 dereceye kadar renk Hue-Saturation-Value (HSV), ve döngü gibi bir renk modeli kullanmalısınız. (Eğer yeşil-> yeşil gitmek istiyorsanız, sadece 120 derece başlayacak)

Burada RGB ve HSV dayalı farkları arasındaki farkı gösteren bir örnek: Üst degrade sadece yeşil bir RGB modelinde kırmızı gidiyor, ancak düşük bir daha hoş etkisi ile sonuçlanan, HSV kullanır.

alt text

00FF00 000000 Siyah Yeşil olduğunu. tüm diğer renkleri azaltma yaparken bir anda bir renk artırmak yapmak zorunda. Bu javascript php, ya da ne olursa olsun ve gitmek olacak bir döngü, sopa.

EDIT: Here is a link to code that shows how to loop through Hex color codes.

Bazı renk şemaları gerekiyor? Ben sayfanızın geri kalan renk şemasına bağlıdır düşünüyorum. Siz "Renk düzeni jeneratörler" google ve @ edg tarafından ve yukarıda santiiiii @ sağlanan en az 10. Örnekleri bulabilirsiniz.

Bir fotoğraf varsa, sitenize uygun fotoğraf renkleri alabilirsiniz bir araç var.

http://www.atalasoft.com/31apps/ColorSchemeGenerator/

hexdec, dechex ve bu pasajı bakın:

for ($i = 0; $i < 255; $i++) {
    # here happens some colour-magic
}

Alkış,

function list_colours($start, $end, $steps = 5)
{
    $ret = array();

    $start_r = hexdec(substr($start, 1, 2));
    $start_g = hexdec(substr($start, 3, 2));
    $start_b = hexdec(substr($start, 5, 2));
    $end_r = hexdec(substr($end, 1, 2));
    $end_g = hexdec(substr($end, 3, 2));
    $end_b = hexdec(substr($end, 5, 2));

    $shift_r = ($end_r - $start_r) / $steps;
    $shift_g = ($end_r - $start_r) / $steps;
    $shift_b = ($end_r - $start_r) / $steps;

    for ($i = 0; $i < $steps; $i++)
    { $ret[] = "#".dechex($start_r + i * $shift_r).dechex($start_g + i * $shift_g).dechex($start_b + i * $shift_b); }

    return $ret;
}

$spectrum = array();
array_push($spectrum, "#00FF00", "#0000FF"); // green to blue
array_push($spectrum, "#0000FF", "#000066"); // blue to dark blue
// etc...

Disclaimer: en az test edilmemiştir.

Ben bu renkleri her gerekiyorsa aşağıdaki gibi 16776960 eleman dizi oluşturmak sanırım:

<?php
    $end = 'FFFFFF';

    $arrMassiveColor = array();

    for($curr = 0; $curr <= dechex($end); $curr++) {
        $arrMassiveColor[] = '#'.hexdec($curr);
    }
?>

Gerçi biraz tuhaf görünüyor ...

Bunu yapmak için bir işlev yazma öneririz. Birden çok renk arasında gitmek gerekiyorsa, sadece birden çok kez çağırır ve diziler bağlamak.

Psuedocode: `colorRange(arrayReference, startColor, endColor, numSteps)`

Get {R, G, B} startColor and endColor
Get R_diff, G_diff, and B_diff

for i in 0 to numSteps {
   arrayReference.append(
          i => {min(startR, endR) + (R_diff * (i / numSteps)),
                min(startG, endG) + (G_diff * (i / numSteps)),
                min(startB, endB) + (B_diff * (i / numSteps))}
          )
}

Ben bu soruya tökezledi - ve şaşırtıcı derecede (ben zor deneyin vermedi) web'de bunun için gerçek bir çözüm bulamadı. Performans burada nokta dışında - bu sadece bir egzersiz - - bu yapmak istediğiniz ne değildir ama aslında tüm Hex renkleri üzerinde yineleme isteseydim - burada bunu nasıl olduğunu:

for($i = 0; $i <= 16777215; $i++) {
    echo sprintf('%06s', dechex($i));
}

Tabii ki bu soru eski ve cevap, ama ben yine de bu paylaşmak düşündüm.