Вы могли бы
- Создайте одно случайное десятичное число между 25 и 230 (ваше "базовое" число)
- Генерация 3 случайных чисел от 1 до 25 (произвольно решая, будут ли они положительными или отрицательными)
- Добавьте эти три числа к вашему базовому номеру, чтобы получить три разных числа (ваши R, G и B)
- Повторите шаги 2 и 3, чтобы получить больше похожих цветов
Вы можете расширить диапазон номера модификатора (от 1 до 25), чтобы получить больше различий в вашем цвете (вам также придется изменить диапазон вашего базового номера, чтобы вы оставались в диапазоне от 0 до 255). ).
Я ничего не знаю о PHP, поэтому я не пишу код. Но я подумал, что это интересный вопрос =)
РЕДАКТИРОВАТЬ: Я понял, что генерация 3 случайных базовых чисел на шаге 1 даст вам менее приглушенный (серый) цвет. Затем вы можете выполнить шаги 2 и 3, чтобы получить разные оттенки и т. Д., Как я уже упоминал (и, как упоминал @Peter, увеличивать число модификаторов, рискуя получить меньше «похожих» цветов)
Пример вывода этой техники ( на основе двух разных наборов базовых чисел ):

РЕДАКТИРОВАТЬ 2: Вот PHP-реализация этого @Peter Ajtai
<?php
$spread = 25;
for ($row = 0; $row < 100; ++$row) {
for($c=0;$c<3;++$c) {
$color[$c] = rand(0+$spread,255-$spread);
}
echo "<div style='float:left; background-color:rgb($color[0],$color[1],$color[2]);'> Base Color </div><br/>";
for($i=0;$i<92;++$i) {
$r = rand($color[0]-$spread, $color[0]+$spread);
$g = rand($color[1]-$spread, $color[1]+$spread);
$b = rand($color[2]-$spread, $color[2]+$spread);
echo "<div style='background-color:rgb($r,$g,$b); width:10px; height:10px; float:left;'></div>";
}
echo "<br/>";
}
?>