2015-07-11 109 views
0

我爲我的英語對不起! 我有這個問題,imagick PHP和覆蓋文本的圖像上。 調整圖像寬度時,字體的大小很小。 這是在兩個圖像的寬度的例子,首先是350像素和第二是1728px: http://i.stack.imgur.com/8kRo0.jpg http://i.stack.imgur.com/TedDO.jpg字體大小取決於圖像大小

$ F-> userFontSize是字體的登錄的是用戶選擇顯示他的圖像上的大小。

if(trim($_GET['full']) != 'si'){ 
$width = 350; 
$height = 350; 
} else { 
$width = getWidth($root . $f->imagePathFull); 
$height =  getHeight($root . $f->imagePathFull); 
} 
$image = new imagick(); 
$draw = new imagickDraw(); 
$pixel = new imagickPixel('white'); 
$image->newImage($width, $height, $pixel); 
$image->readImage($root . $f->imagePathNormal); 
$image->resizeImage ($width, $height, imagick::FILTER_LANCZOS, 1, TRUE); 
$fontPath = $root . '/assets/fonts/Mermaid.ttf'; 
$draw->setFillColor('black'); 
$draw->setFont($fontPath); 
$draw->setFontSize(12 + $f->userFontSize); 
$draw->setGravity(1); 
$draw->setTextAntialias(true); 
$draw->setFillOpacity(".55"); 
$image->annotateImage($draw, 5,0, 0, "text text text"); 
$image->setImageFormat("jpg"); 

header("Content-Type: image/jpeg"); 
echo $image->getImageBlob(); 
$image->clear(); 

當我打印分辨率爲1728px的圖像時,文字非常小。如何根據圖像大小來增加字體大小? 謝謝! :)

+0

如果你知道字體大小12是你的350像素寬,那麼也許做一個小試驗和錯誤,在這個例子中可以說字號20是適合你的1728px寬度正確的。我們的12,13,14,15,16,17,18,19和20在這種情況下是1378px您的最大寬度和最小寬度之間的差可能的字體大小,讓除以可能的字體大小(這是9),因此對於每個153px的步驟,大致需要將字體大小增加1。邏輯應該堅持,但請調整確切的變量以適合您的項目。 :) – pokeybit

回答

0

我用這種方式解決了,我計算的寬度圖像文本佔據的比例爲350像素,並根據這一點,我在1​​728px計算的百分比(或其他寬度)。我確定了一些字體大小,直到我找到一個以百分比爲單位的大小。我的解決方案的最終結果並不完美,但可以接受。這是代碼:

$myCP = '40'; // increase o decrease font size. 
for($i = 1; $i <= 500;$i++){ 
    $box = imagettfbbox($i, 0, $fontPath, "lorem ipsum"); 
    $lT = $box[2] - $box[0]; 
    $cP = round(($lT/$width) * 100,1); 
    // $cP percentage of font width 
    if($cP >= $myCP) { $newFontSize = $i; break; } else { continue; } 
}