PHP: цвет гиперссылки перед созданием изображения - PullRequest
1 голос
/ 23 августа 2010

Я беру канал XML и создаю изображение из текста. То, что я хотел бы сделать, это цвет текста ссылки другой цвет, чем обычный текст. Я перебираю текст, чтобы найти ссылку, но не могу понять, как раскрасить этот текст.

Ответы [ 2 ]

1 голос
/ 23 августа 2010

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

Возможно, вам придется корректировать координаты по ходу движения, если между ними недостаточно места каждый кусок текста или вставьте пробел в строку, прежде чем вы получите его ограничивающий прямоугольник.

0 голосов
/ 23 августа 2010

Я знаю, что есть imagefontwidth() и imagefontheight(), чтобы получить высоту и ширину символа шрифта. Однако это работает только со встроенными шрифтами или шрифтами, загруженными с imageloadfont(), которые, я думаю, не поддерживают файлы TTF. Но если бы вы использовали это, было бы довольно легко вычислить координаты каждого куска.

Например:

<?php
// Image:
$image = imagecreatetruecolor(200, 200);

// First built-in font:
$font = 1;

// X and Y coordinates of the 5th character in the 7th row:
$x = imagefontwidth($font) * 4;
$y = imagefontheight($font) * 6;

// Put character onto image, with white color:
imagestring($image, $font, $x, $y, 'H', 0xffffff);
?>

(обратите внимание, что, хотя я использовал 0xffffff в качестве цвета в своем коде, рекомендуется использовать imagecolorallocate() вместо этого, когда это возможно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...