2014-11-23 5 views
0

enter image description hereImageMagic автоматический выбор размера шрифта на основе ширины/высоты коробки

enter image description here

У меня есть область изображения 160px на 350px мне нужно, чтобы быть в состоянии соответствовать абзацев текста в различной ширины и имеют размер шрифта идти вверх или вниз автоматически в зависимости от того, сколько свободного места осталось в окне.

Я думаю, что это может быть достигнуто с функцией 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

Является ли это то, что вам нужно: http://stackoverflow.com/questions/5746537/how-can-i-wrap-text-using-imagick-in-php-so-that-it-is- draw-as-multiline-text/5746551 # 5746551? – Danack

+0

Этот тоже, http://stackoverflow.com/questions/12231624/imagemagick-text-into-rectangle –

ответ

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"); 
Смежные вопросы