imagetttftext()
можно рисовать только одним цветом. Вы не можете изменить его или встроить цветовые коды html-ish, чтобы динамически изменить цвет текста. Вам придется разбить текст на несколько кусков, каждый из которых нарисован одним цветом.
Это означает, что вам придется вычислять, где начинается / останавливается каждый фрагмент строки, используя imagettfbbox()
и соответственно корректировать ваши координаты в imagetttftext()
.
комментарий:
Хорошо, так что содержимое отдельного тега со ссылками разных цветов. Первым шагом будет предварительная обработка строки и разделение ее по границам ссылок, так что вы получите последовательность фрагментов «текст / ссылка / текст / ссылка / текст». После этого это просто цикл:
$start_x = 5;
$start_y = 20; // initial x/y coords of text
$fontsize = 14;
$font = 'font.ttf';
$angle = 0;
$black = imagecolorallocate($im, 0, 0, 0);
$linkcolor = imagecolorallocate($im, ?, ? ,?);
foreach ($string_chunks as $chunk) {
// get coordinates of bounding box containing text
$coords = imagegettfbbox($fontsize, $angle, $font, $chunk);
$end_x = $coords[4]; // as per imagetttfbbox() doc page
$end_y = $coords[5]; // x,y coords of top right corner of bounding box
// figure out which color to draw in
$color_to_draw = is_link($chunk) ? $linkcolor : $black;
// draw the text chunk
imagettftext($im, $fontsize, $angle, $start_x, $start_y, $color_to_draw, $font, $chunk);
// adjust starting coordinates to the END of the just-drawn text
$start_x += $end_x;
$start_y += $end_y;
}
Возможно, вам придется корректировать координаты по ходу движения, если между ними недостаточно места
каждый кусок текста или вставьте пробел в строку, прежде чем вы получите его ограничивающий прямоугольник.