2012-06-27 4 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

좋아 보이는 :

여기 내 코드입니다. 꽤 많은 연구 끝에, 글꼴 자체에서 올바른 메트릭을 얻는 것이 기본적으로 불가능하다는 것을 발견했습니다. 이는 각 글꼴 디자이너가 잠재적으로 메트릭을 다르게 정의 할 수 있기 때문입니다. 계속 진행하는 가장 좋은 방법은 단순히 이미지 을 많이 (클리핑이 발생하지 않도록)을 필요 이상으로 크게 만든 다음 trim 명령 (http://www.php.net/manual/en/imagick.trimimage.php)을 사용하는 것입니다.