php版本: 5.4.22
Imagick版本: 3.2.0RC1
我正在用queryFontMetrics()函数计算文本宽度。
我的守则:
<?php
$font = 'Arial.ttf';
$im = new \Imagick();
$draw = new \ImagickDraw();
$draw->setFont($font);
$draw->setFontSize(10);
$text = 'Bathroom';
$attriutes = $im->queryFontMetrics($draw, $text);
echo '<br>string : '.$text;
echo '<br>calculated width in pixel : '.$attriutes['textWidth'];
$text = 'TTTTTTTTT';
$attriutes = $im->queryFontMetrics($draw, $text);
echo '<br>string : '.$text;
echo '<br>calculated width in pixel : '.$attriutes['textWidth'];
?>Linux上的结果(Linuxubuntu3.16.0-23-泛型)
弦乐:浴室 计算宽度(像素):44.828125 字符串: TTTTTTTTT 计算宽度(像素):53.765625
windows 7的结果
弦乐:浴室 计算宽度(像素):47 字符串: TTTTTTTTT 计算宽度(像素):63
为什么会发生这种事?
php中还有其他库可以精确地计算文本宽度吗?
发布于 2016-03-31 12:44:12
在这个论坛上,我发现了这一点。
由于Arial是微软的版权字体,我们怀疑它在您的主机上是不可用的。如果没有,ImageMagick会选择每台机器上可能不同的默认字体。另一个不同之处是自由类型库。不同版本可能会为字体度量返回不同的结果。如果您的脚本在Linux主机上有ImageMagick 6.5.9-0和Freetype 2.3.11,并且它始终返回: x_ppem = 14 y_ppem = 14上升= 11下降= -4宽度=4高= 17 max_advance = 15 默认字体(因为Arial不可用)。
如果使用identify -list Type命令
你会得到这样的结果。

建议
characterWidth和characterHeight
爬升器
下降区
textHeight
textWidth
maxHorizontalAdvance
boundingBox
originX和originY
还请阅读此堆栈溢出quesion。
https://stackoverflow.com/questions/36331901
复制相似问题