Чтобы преобразовать все значения цвета, найденные в файле CSS, в их обратные значения, вы можете использовать эту функцию:
function inverseColors($css) {
preg_match_all('/#([a-f0-9]{6}|[a-f0-9]{3})/i', $css, $matches);
$original = $matches[0];
$inversed = array();
foreach($matches[1] as $key => $color) {
$parts = str_split($color, strlen($color) == 3 ? 1 : 2);
foreach($parts as &$part) {
$part = str_pad(dechex(255 - hexdec($part)), 2, 0, STR_PAD_LEFT);
}
$inversed[$key] = '#'.implode('', $parts);
}
$css = str_replace($original, $inversed, $css);
echo $css;
}
Это будет работать как с трех-, так и с шестизначными шестнадцатеричными значениями цвета. Но обратите внимание, что это не приведет к оптимальным цветам, обратный цвет, вероятно, не будет лучшим для вашего макета. Лучших результатов можно достичь, создав таблицу соответствия для всех цветов и подставив эти значения в новый CSS.
Чтобы перебрать все файлы CSS, вы можете использовать классы SPL для рекурсивного поиска, а затем заменить файлы CSS, используя
file_put_contents($file, inverseColors(file_get_contents($file)));
Взгляните на документацию PHP о glob , чтобы узнать, как рекурсивно выполнять итерации каталогов (в разделе комментариев).