Я хочу массив, в котором каждое поле в массиве содержит цветовой код
array(0 => '#4CFF00', 1 => '#FFE97F')
И я хочу, чтобы это проходило через весь спектр цветов, начиная от зеленого до черного.
зеленый-> синий -> синий -> фиолетовый -> желтый -> оранжевый -> красный -> коричневый -> черный
Этот порядок не обязательно должен быть одним и тем же, но я думаю, что вы получите картину. Может ли кто-нибудь помочь в этом? Есть ли сайт, который сделал это раньше?
Вы должны использовать цветовую модель, такую как Hue-Saturation-Value (HSV) , и циклировать оттенок от 0 градусов по всему спектру до 360 градусов, при котором независимо от насыщения и значения вам подходит. (Если вы хотите перейти от зеленого-> зеленого, просто начинайте с 120 градусов)
Вот иллюстрация, которая показывает разницу между градиентами на основе RGB и HSV: верхний градиент идет только от зеленого до красного в RGB-модели, но нижний использует HSV, что приводит к более приятному эффекту.
function dechexpad($i){ $s=""; if($i<16) $s="0"; $s.=dechex($i); return $s; } function hexcolor($r,$g,$b){ return "#".dechexpad($r%255).dechexpad($g%255).dechexpad($b%255); } $xx=array(); for($i=0;$i<255;$i++){ $xx[]=hexcolor($i*4,$i*2,$i); }
00FF00 – зеленый 000000 – черный. все, что вам нужно сделать, увеличивает один цвет за раз, уменьшая другие цвета. Вставьте его в цикле, где он будет php, javascript или что-то еще.
EDIT: Вот ссылка на код, который показывает, как перебирать цветовые коды Hex.
Вам нужны цветовые схемы? Я думаю, это зависит от цветовой схемы остальной части вашей страницы. Вы можете google «Генераторы цветовой схемы», и вы можете найти не менее 10. Примеры, предоставленные @edg и @santiiiii выше.
Если у вас есть фотография, есть инструмент, который может получать цвета с фотографии в соответствии с вашим сайтом.
http://www.atalasoft.com/31apps/ColorSchemeGenerator/
Посмотрите на hexdec , dechex и этот фрагмент:
for ($i = 0; $i < 255; $i++) { # here happens some colour-magic }
Ура,
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...
Отказ от ответственности: не проверено нисколько.
Я думаю, если вам нужны все эти цвета, вы можете построить массив элементов 16776960 следующим образом:
<?php $end = 'FFFFFF'; $arrMassiveColor = array(); for($curr = 0; $curr <= dechex($end); $curr++) { $arrMassiveColor[] = '#'.hexdec($curr); } ?>
Кажется немного странным, хотя …
Я рекомендую написать функцию для этого. Если вам нужно идти между несколькими цветами, просто назовите его несколько раз и объедините массивы.
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))} ) }
Я наткнулся на этот вопрос – и, на удивление, я не нашел реального решения для этого в Интернете (я не старался). Производительность, кроме того, здесь – это не то, что вы хотели бы сделать – это всего лишь упражнение, но если вы действительно хотите перебрать все шестнадцатеричные цвета, вот как вы могли это сделать:
for($i = 0; $i <= 16777215; $i++) { echo sprintf('%06s', dechex($i)); }
Конечно, этот вопрос старый и ответил, но я думал, что все равно поделюсь этим.