Intereting Posts
php вставляет несколько значений в отдельные строки в таблице mysql Рекомендации по обработке глобальных ошибок в PHP? Напротив array_intersect? Удаление значения из массива PHP Удаление пробелов или% 20 в url с использованием htaccess Как я могу получить имя автоматического увеличения поля или имя поля первичного ключа из таблицы mysql? Самый простой способ создать / получить php_memcache.dll для PHP 5.4 (PHP): Предупреждение: include_once, не удалось открыть поток: Permission denied Поставщики Symfony-2.0 Apache Обрезаемая фатальная ошибка: объект класса __PHP_Incomplete_Class Как получить значения POST из serializeArray в PHP? dompdf не отображает изображения с сервера, а выводит из внешнего источника PHP + MySQL Queue Почему я не могу использовать session_start () в моем php-скрипте? Он говорит, что заголовки уже отправлены Google Script отправляет значения формы по электронной почте, ошибка: невозможно прочитать свойство "namedValues"

Как я могу циклически перебирать шестнадцатеричные цветовые коды в PHP?

Я хочу массив, в котором каждое поле в массиве содержит цветовой код

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

И я хочу, чтобы это проходило через весь спектр цветов, начиная от зеленого до черного.

зеленый-> синий -> синий -> фиолетовый -> желтый -> оранжевый -> красный -> коричневый -> черный

Этот порядок не обязательно должен быть одним и тем же, но я думаю, что вы получите картину. Может ли кто-нибудь помочь в этом? Есть ли сайт, который сделал это раньше?

Вы должны использовать цветовую модель, такую ​​как Hue-Saturation-Value (HSV) , и циклировать оттенок от 0 градусов по всему спектру до 360 градусов, при котором независимо от насыщения и значения вам подходит. (Если вы хотите перейти от зеленого-> зеленого, просто начинайте с 120 градусов)

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

alt text http://img.ruphp.com/colors/29o0q4k.jpg

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

Конечно, этот вопрос старый и ответил, но я думал, что все равно поделюсь этим.