У меня есть несколько идентификаторов, для которых я хочу генерировать случайные цвета. Изготовление случайных цветов не проблема, но она должна быть последовательной.
Я мог бы использовать MD5 (или какой-либо другой хэш) идентификаторы, чтобы код мог знать, сколько символов ожидать, но в нижней строке он должен генерировать одинаковый (случайный) цвет для одного и того же ID / хэша / строки.
Все, что вам нужно для кода RGB, – это согласованное отображение из вашей случайной строки в шестнадцатеричное значение из шести позиций. Почему бы не использовать md5 как путь к шестнадцатеричной строке, а затем взять первые 6 цифр?
<?php function rgbcode($id){ return '#'.substr(md5($id), 0, 6); } ?>
сначала преобразовать случайную строку в шестнадцатеричное число с шестью цифрами и удалить поплавки и сделать строку целым числом и преобразовать их в шестнадцатеричную строку, а затем поставить хэш до шестизначного шестнадцатеричного числа и цвет для этой случайной строки, и вы можете найти шестнадцатеричное число должно быть больше шестизначного числа, если да, продолжайте делить это число на 2, пока оно не станет пятизначным шестнадцатеричным числом, а шестое число будет числом времени, в котором общее шестнадцатеричное число делится на 2, есть ваш цветовой код.
Вот простая функция, которую я использую в одном из моих собственных проектов для создания значений RGB, которые я могу использовать с imagecolorallocatealpha
PHP:
function randomRgbGeneratorFromId( $id = null ) { $md5 = md5( $id ); $md5 = preg_replace( '/[^0-9a-fA-F]/', '', $md5 ); $color = substr( $md5, 0, 6 ); $hex = str_split( $color, 1 ); $rgbd = array_map( 'hexdec', $hex ); $rgba = array( ( $rgbd[0] * $rgbd[1] ), ( $rgbd[2] * $rgbd[3] ), ( $rgbd[4] * $rgbd[5] ), ); return $rgba; }
Конечно, вы всегда можете выводить на свой CSS / HTML, используя что-то вроде этого:
echo sprintf( 'rgb(%s)', implode( ',', randomRgbGeneratorFromId( $id ) ) );