【问题标题】:imagettftext(): calculate font size to ensure text fits image widthimagettftext():计算字体大小以确保文本适合图像宽度
【发布时间】:2012-05-22 14:26:00
【问题描述】:

我正在使用imagettftext() 在图像上写入动态文本,我希望它适合我的图像宽度。

如何根据文本长度计算字体大小?

【问题讨论】:

  • 除非是等宽字体,否则无法通过文本长度计算字体大小。并且没有很好的近似值。一串全 W 将比一串 I 占用更多空间。

标签: php imagettftext dynamic-content dynamic-image-generation


【解决方案1】:

您可以使用imagettfbbox函数在输出之前计算TTF文本的边界框。不幸的是,没有直接的缩放方法来适应宽度,所以你必须自己做。

一种方法是将默认字体大小(例如 20)的文本传递给 imagettfbbox 并从中检索宽度。然后,您可以通过计算比例因子来计算文本应该小多少或大多少才能适合您想要的大小:

scale = targetWidth / bboxWidth;

然后画出合适大小的文字:

fontSize = 20 * scale;

使用imagettftext 函数。字体无法以这种方式完美 100% 缩放,但您会得到一个非常好的近似值。

查看imagettfboxhere的文档。

【讨论】:

  • 要使比例 100% 完美,您可以使用字体 40 进行第二次传递,并根据相同输入字符串的 20 和 40 字体大小之间的差异计算比例。
【解决方案2】:
while (itsTooBigAccordingToimagettftext() && $fontSize > 0) {
    $fontSize--;
}

【讨论】:

  • 这将导致“致命错误:调用未定义函数 itsTooBigAccordingToimagettftext()”。换句话说,请更好地解释您的答案,而不是使用半代码:-)
  • Stackoverflow 是您应该获得指导的地方,而不是完整的工作代码。对我来说这是一个很好的指导,唯一的错误是它应该是 itsTooBigAccordingToimagettfbbox() 而不是 itsTooBigAccordingToimagettftext() ;-)
  • 警告:如果你不小心,这样做可能导致长时间的延迟。
猜你喜欢
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 2013-12-26
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多