1

Imagick::queryFontMetrics が機能していないようです。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;
}
4

1 に答える 1

2

さて、私はこれに自分で答えるつもりのようです。かなりの調査の結果、フォント自体から正しいメトリックを取得することは基本的に不可能であることがわかりました。これは、各フォントデザイナーがメトリックを異なる方法で定義する可能性があるためです。続行するための最良の方法は、画像を必要以上に大きくして(クリッピングが発生しないようにするため)、trimコマンドを使用することです:http ://www.php.net/manual/en/imagick.trimimage.php 。

于 2012-06-28T03:15:10.120 に答える