ImageMagick函数queryFontMetrics的结果不准确 [英] Inaccurate results from ImageMagick function queryFontMetrics

查看:705
本文介绍了ImageMagick函数queryFontMetrics的结果不准确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Imagick :: queryFontMetrics似乎不起作用。当我使用queryFontMetrics提供的指标来调整图像大小时,某些字体仍然被截断。有什么想法?

Imagick::queryFontMetrics does not seem to be working. When I use the metrics provided by queryFontMetrics to size the image, some fonts are still being cut off. Any ideas?

这是我的代码:

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命令: http://www.php.net/manual/en/imagick.trimimage.php

Okay, it looks like I'll be answering this one myself. After quite a bit of research, I've discovered that it's basically impossible to get correct metrics from the font itself. This is because each font designer could potentially define the metrics differently. The best way to proceed is to simply make the image much larger than necessary (to ensure that no clipping occurs) and then use the trim command: http://www.php.net/manual/en/imagick.trimimage.php.

这篇关于ImageMagick函数queryFontMetrics的结果不准确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆