как обернуть текст в imagemagick - PullRequest
1 голос
/ 26 августа 2010

Мне удалось изобразить базовую функцию переноса слов следующим образом:

 $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 );

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

Ответы [ 4 ]

2 голосов
/ 26 августа 2010

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

[EDIT] : по запросу OP, кажется, есть версия из командной строки .

0 голосов
/ 04 ноября 2015

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

$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;
}
0 голосов
/ 27 августа 2010

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

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

Синус Я мог контролировать интервал, который я использовал при рендеринге линий

  $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 );
  }
...