ImageMagick函数queryFontMetrics的结果不准确

ImageMagick函数queryFontMetrics的结果不准确,imagemagick,Imagemagick,Imagick::queryFontMetrics似乎不起作用。当我使用queryFontMetrics提供的度量来调整图像的大小时,一些字体仍然被切断。有什么想法吗 这是我的密码: if (!file_exists($cache['dirname'].'/'.$cache['basename'])) { try { $draw = new ImagickDraw(); $draw->setFont($font_path['dirname'].'/'.$font_path

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;
}

好吧,看来我会亲自回答这个问题。经过相当多的研究,我发现基本上不可能从字体本身获得正确的度量。这是因为每个字体设计师可能会以不同的方式定义度量。继续操作的最佳方法是简单地使图像比需要的大很多(以确保不发生剪裁),然后使用trim命令: