2010-08-26 1 views
1

Я был в состоянии понять основную функцию слово обертку, как этоткак обернуть текст в ImageMagick

$draw = new ImagickDraw(); 
$x = 0; 
$y=20; 
$angle = 0; 
$str = "some text for testing of a word wrap in imagemagick"; 
$str = wordwrap($str, 10,"\r"); 
$im->annotateImage($draw, $x, $y, $angle, $str); 

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

ответ

0

Sine я мог контролировать расстояние я пошел с предоставлением линий каждого

$draw = new ImagickDraw(); 
    $x = 0; 
    $y=20; 
    $angle = 0; 
    $padding = 10; 
    $str = "some text for testing of a word wrap in imagemagick"; 
    $str = wordwrap($str, 10,"\r"); 
    $str_array = explode("\n",$str); 
    foreach($str_array as $line) 
    $im->annotateImage($draw, $x, $y+$padding, $angle, $line); 
    } 
2

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

[РЕДАКТИРОВАТЬ]: По запросу OP, представляется command-line version of it.

+0

так я предполагаю, что нет никакого способа, чтобы указать шрифт метрики? – mcgrailm

+0

@mcgrailm, обновил ответ. – shamittomar

0

Вы можете ImageMagic рассчитать детали метрики для Вас: http://php.net/manual/en/function.imagick-queryfontmetrics.php.

+0

Не могли бы вы объяснить или привести пример того, как это позволяет мне изменить пространство между строками? – mcgrailm

+1

Вы можете получить высоту линии из данных показателей. Затем нарисуйте каждую отдельную текстовую строку и измените начальную точку для каждой строки на основе метрики высоты с вашими настройками. –

+0

Я сделал то, что предложил MarcB, получил высоту метрической линии шрифта, а затем добавил каждую строку с «annotateImage», установив Y, чтобы немного больше htan метрики шрифта, предусмотренной для высоты строки. Поэтому, когда я запускаю показатели, я получаю 20 (шрифт 16 пикселей). В каждой строке я пишу annotateImage и устанавливаю Y в $ y + = 26, и он добавит 6 пикселей между строками, что сделает его двойным. –

0

Некоторые рефакторинга:

$string = 'Some random Text here'; 

$y = 120; 
$line_height = 50; 
$str = wordwrap($string, 20,"\n"); 
$str_array = explode("\n",$str); 
foreach($str_array as $line){ 
    $image->annotateImage($draw, 0, $y, 0, $line); 
    $y += $line_height; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^