2010-08-26 37 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

正弦我能控制的間距我去渲染線各

$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 2010-08-26 17:57:59

+0

@mcgrailm,更新了答案。 – shamittomar 2010-08-26 18:02:32

0

您可以ImageMagic計算指標的詳細信息給你:http://php.net/manual/en/function.imagick-queryfontmetrics.php

+0

你能解釋一下,或者舉個例子說明這是如何讓我改變線條之間的空間? – mcgrailm 2010-08-26 20:27:02

+1

您可以從指標數據中獲取行高。然後繪製每個單獨的文本行,並根據高度指標更改每行的起點並進行調整。 – 2010-08-27 16:57:22

+0

我做了什麼MarcB建議 - 得到字體公制線高度,然後添加每行與「annotateImage」設置Y稍微更多htan字體指標規定的行高。所以當我運行指標時,我得到20(字體是16像素)。每行,我寫一個annotateImage並將Y設置爲$ y + = 26,並且它將在行之間添加6個像素,使其看起來是雙倍行距。 – 2012-03-30 07:24:00

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