我的图像区域为160像素×350像素我需要能够适应不同宽度的文本段落,并根据框中剩余的可用空间自动调整或缩小字体大小。
我认为这可以通过函数 Imagick :: queryFontMetrics()来实现,该函数返回估计的文本大小而不打印文本,如下面的数组 http://php.net/manual/en/imagick.queryfontmetrics.php
array (size=10)
'characterWidth' => float 30
'characterHeight' => float 30
'ascender' => float 27
'descender' => float -6
'textWidth' => float 150
'textHeight' => float 33
'maxHorizontalAdvance' => float 60
'boundingBox' =>
array (size=4)
'x1' => float 0
'y1' => float 0
'x2' => float 21.4375
'y2' => float 22
'originX' => float 151
'originY' => float 0
我需要的是获取数据的公式,此功能提供最佳的字体大小以适应绿色框。
这是我到目前为止所得到的,但我坚持公式:
$text_large = "Hello world Hello world";
//$text_small = "Hello world Hello world Hello world Hello world Hello world";
$img = new Imagick($path_to_image); //image 500 x 500
$draw = new ImagickDraw();
$draw->setFont("arial.ttf");
$draw->setGravity(Imagick::GRAVITY_NORTHWEST);
$draw->setFontSize(30); paragraph
$fm = $img->queryFontMetrics($draw, $text_large, true);
//this needs to be set automatically based on lenth of text
$optimal_font_size = (160 / 2) - ($fm["textWidth"] / 2);
$draw->setFontSize($optimal_font_size);
$img->annotateImage($draw, 5, 50, null, $text_large);
...
答案 0 :(得分:0)
简单的解决方案是昨天累了看。
$draw->setFontSize(15);
$metrics = $input_img->queryFontMetrics($draw, "Hello World Hello World Hello World", false);
$new_font_size = floor($metrics["characterWidth"] * 160 / $metrics["textWidth"]);
$draw->setFontSize($new_font_size);
$input_img->annotateImage($draw, 5, 50, null, "Hello World Hello World Hello World");