2014-10-29 106 views
2

我已經拼湊下面的代碼,這非常接近的工作原理:ImageMagick的標題不充盈尺寸垂直尺寸

<?php 
$img = new Imagick("quote_blank.jpg"); 
$txt = new Imagick(); 
$txt->setBackgroundColor("transparent"); 
$txt->newPseudoImage(380,250, "Caption:".htmlspecialchars($_GET['quote'])); 
$txt->colorizeImage('#468847',1); 
$img->compositeImage($txt, imagick::COMPOSITE_OVER, 10, 80); 
$draw = new ImagickDraw(); 
$draw->setFillColor('#468847'); 
$draw->setGravity(Imagick::GRAVITY_SOUTHEAST); 
$draw->setFontSize(25); 
$draw->setFontStyle(3); 
$img->annotateImage($draw, 5,5,0, htmlspecialchars($_GET['attrib'])); 
$img->setImageFormat('jpg'); 
header('Content-Type: image/jpeg'); 
echo $img; 
?> 

(請注意,quote_blank.jpg是一個400x400的圖片背景在其上的文字渲染並駐留在與php文件相同的目錄中)。

問題是,標題只填充380x250 PseudoImage,只有很少的短詞。任何長度的任何東西都會導致框中的上半部分(或更少)在其中具有任何文本(除了歸因註釋)。

看起來像PseudoImage工作正常,但ImageMagick的計算字體大小的算法只設計爲填充寬度,而不是高度。我不知道它是如何決定什麼行長度(這可能反過來決定字體大小,因此字幕框的數量和垂直覆蓋率)。

所以我想我的問題是這樣的:是否有任何改變它的計算方法,以儘可能多地填充標題框,水平和垂直?

的短短几句話樣品,顯示字幕可以去全高:

文本更典型長度的樣品,顯示出它不會填補框垂直

+0

您使用哪種Imagick和PHP的版本?使用PHP 5.6.2和Imagick 3.1.2,我得到了更好的結果:http://i.imgur.com/2W2a7ee.jpg – 2014-10-29 01:16:27

+0

ImageMagick:6.6.9-7 2014-03-06 Q16 PHP:5.3。 27 – james3mg 2014-10-29 04:47:59

+0

我有ImageMagick 6.8.9-8,嘗試更新 – 2014-10-29 10:58:13

回答

1

我測試你的代碼與ImageMagick 6.8.9-8並得到以下輸出,這比你得到的更好。如果您使用的是舊版本,請嘗試更新ImageMagick。

enter image description here

0

維尼修斯·平託有正確答案馬上蝙蝠。但是在共享服務器上更新並不那麼容易 - 我還沒有弄清楚如何讓Imagick使用更新後的版本。所以我不得不重寫我的代碼,通過命令行訪問ImageMagick,我想分享它。就我的評論而言,代碼顯示效果不佳,所以對於作弊的答案功能有點抱歉。

$location='/home/user/local/bin/convert'; 
$command='convert -background none -size 380x250 -fill "#468847" caption:"'.htmlspecialchars($_GET['quote']).'" quote_blank.jpg +swap -gravity southeast -geometry +10+80 -composite convert -fill "#468847" -gravity southeast -pointsize 25 -annotate 0x20+5+5 "'.htmlspecialchars($_GET['attrib']).'" anno_label.jpg'; 
exec ($location . ' ' .$command); 
header('Content-Type: image/jpeg'); 
readfile('anno_label.jpg'); 
unlink('anno_label.jpg'); 

enter image description here