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上的结果(Linux ubuntu 3.16.0-23-generic)
字符串:浴室
计算出的像素宽度:44.828125
string:TTTTTTTTT
以像素计算的宽度:53.765625
Windows 7上的结果
字符串:浴室
以像素计算的宽度:47
string:TTTTTTTTT
以像素计算的宽度:63
为什么会发生这种情况? php中是否还有其他可以精确计算文本宽度的库?
答案 0 :(得分:2)
在这个论坛上,我找到了这个。
由于Arial是微软受版权保护的字体,我们怀疑它不是 可在您的主机上使用。如果没有,ImageMagick会选择一个默认字体 在每台机器上可能有所不同。另一个区别是 Freetype库。不同版本可能会返回不同的结果 字体指标。如果你的脚本有ImageMagick 6.5.9-0和 在Linux主机上的Freetype 2.3.11和它一致 返回:
x_ppem = 14 y_ppem = 14 ascender = 11 descender = -4 width = 4 height = 17 max_advance = 15
表示默认字体(因为Arial不可用)。
如果您使用identify -list Type
命令
你会得到这样的结果。
characterWidth和characterHeight
<强>上升器强>
<强>伸强>
<强> textHeight不同强>
<强>输出textWidth 强>
<强> maxHorizontalAdvance 强>
<强> boundingBox的强>
originX和originY
另请阅读此stackoverflow quesion。