2015-07-11 96 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; } 
}