【问题标题】:php get accurate box sizephp获取准确的盒子大小
【发布时间】:2016-05-26 02:42:51
【问题描述】:

我注意到,当使用“imagettfbbox”时,它似乎远非准确。 例如:

<?php
$text = 'hello there';
$box = imagettfbbox(12,0,'arial.ttf',$text);
$width = abs($box[0]-$box[2]);
$text = str_replace(' ','&nbsp;',$text);

echo '<svg width="500" height="200">
    <g transform="scale(5)">
        <text x="0" y="20" style="font-family:arial; font-size:12pt;">'.$text.'</text>
        <rect x="0" y="10" width="'.$width.'" height="20" style="fill-opacity:0.5; fill:yellow;" />
    </g>
</svg>';

exit;
?>

正如您在此处看到的,方框几乎完全切断了“e”。 是否有任何其他解决方案来获得准确的框宽度?

【问题讨论】:

  • 我想你在这里打错了,imagettfbbox(12,0,'arial.ttf',$text); 不应该是imagettfbbox(12.0,'arial.ttf',$text); 吗? PHP 使用. 作为小数点。
  • @timclutton 不,完全不同的问题。
  • @andrea,不,0 是一个角度,而不是一个浮点数。
  • 为什么需要它在 php 中? js能做到吗?

标签: php width


【解决方案1】:

这里可能会发生一些事情。首先是您没有告诉浏览器使用与 PHP 相同的字体集。虽然这不太可能是像 arial 这样的常见字体的问题,但您可能需要仔细检查。使用这个 css 告诉浏览器使用你的字体。

@font-face {
  font-family: "arial";
  src: url("arial.ttf");
}

另一个问题是您没有将黄色框与左侧的文本完美对齐。 PHP 的 imagettfbbox 正在精确测量您的文本,因此任何偏移都会出现问题。这是我用来测试的html。

<div style="position:relative;">
  <div style="font-family:arial; font-size:12pt; position: absolute; left: 0px;"><?php echo $text;?></div>
  <div style="width:<?php echo $width;?>px;height:20px;position:absolute;left:1px;background-color:yellow;opacity:0.5;"/>
</div>

对我来说,它从左到右完美对齐。我建议这不是 imagettfbbox 的问题,你只需要玩一些东西来确认你的结果。

【讨论】:

  • 实际上通过 php 反馈查看这显然是 6 年来的已知问题,但没有提出解决方案。所以我猜这只是 SOL 问题之一。
猜你喜欢
  • 2017-02-09
  • 1970-01-01
  • 2012-07-09
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多