2012-06-27 6 views
1

Imagick :: queryFontMetrics, похоже, не работает. Когда я использую метрики, предоставляемые queryFontMetrics, чтобы изменить размер изображения, некоторые шрифты по-прежнему отключены. Есть идеи?Неточные результаты функции ImageMagick queryFontMetrics

Вот мой код:

if (!file_exists($cache['dirname'].'/'.$cache['basename'])) { 

try { 
    $draw = new ImagickDraw(); 
    $draw->setFont($font_path['dirname'].'/'.$font_path['basename']); 
    $draw->setFontSize($size); 
    $draw->setGravity(Imagick::GRAVITY_CENTER); 
    $draw->setFillColor($color); 

    $canvas = new Imagick(); 

    $metrics = $canvas->queryFontMetrics($draw, $text); 

    $canvas->newImage($metrics['textWidth'], $metrics['textHeight'], "transparent", "png"); 
    $canvas->annotateImage($draw, 0, 0, 0, $text); 

    $canvas->setImageFormat('PNG'); 
    mkdir($cache['dirname'], 0777, true); 
    $canvas->writeImage($cache['dirname'].'/'.$cache['basename']); 

    header("Content-Type: image/png"); 
    echo $canvas; 

    $canvas->clear(); 
    $canvas->destroy(); 

    $draw->clear(); 
    $draw->destroy(); 

} catch(Exception $e) { 
    // Output an error message 
    echo 'Error: ', $e->getMessage(), ""; 
} 

} else { 
    // Output the image 
    $canvas = new Imagick($cache['dirname'].'/'.$cache['basename']); 
    header("Content-Type: image/png"); 
    echo $canvas; 
} 

ответ

2

Хорошо, это похоже, что я буду отвечать на этот сам. После довольно много исследований я обнаружил, что в принципе невозможно получить правильные показатели из самого шрифта. Это связано с тем, что каждый дизайнер шрифтов может потенциально определять показатели по-разному. Лучший способ продолжить - просто сделать изображение много больше, чем необходимо (для обеспечения отсутствия обрезки), а затем используйте команду обрезки: http://www.php.net/manual/en/imagick.trimimage.php.

Смежные вопросы