Я смог определить базовую функцию переноса слов, подобную этой
$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 );
и, похоже, работает нормально, за исключением того, что отслеживание, которое, как мне кажется, называется так, вы знаете, что пространство между линиями слишком много, и мысли или идеи о том, как исправить это или если есть лучший вариант
Высота линии определяется метрикой шрифта. Конечно, вы можете добавить пустую строку, иначе вам нужно будет отображать одну строку за раз и вручную указывать смещение текста внутри изображения.
[РЕДАКТИРОВАТЬ] : по запросу OP, похоже, есть версия командной строки .
Синус. Я мог контролировать промежуток, в который я пошел,
$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 ); }
Вы можете заставить ImageMagic рассчитать данные о показателях для вас: http://php.net/manual/en/function.imagick-queryfontmetrics.php .
Некоторые рефакторинг:
$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; }