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

好的,看来我会自己回答这个问题。经过相当多的研究,我发现从字体本身获得正确的指标基本上是不可能的。这是因为每个字体设计师都可能以不同的方式定义指标。最好的方法是简单地使图像比需要的大得多(以确保不会发生剪辑),然后使用修剪命令:http ://www.php.net/manual/en/imagick.trimimage.php 。

于 2012-06-28T03:15:10.120 回答