【发布时间】:2012-05-22 14:26:00
【问题描述】:
我正在使用imagettftext() 在图像上写入动态文本,我希望它适合我的图像宽度。
如何根据文本长度计算字体大小?
【问题讨论】:
-
除非是等宽字体,否则无法通过文本长度计算字体大小。并且没有很好的近似值。一串全 W 将比一串 I 占用更多空间。
标签: php imagettftext dynamic-content dynamic-image-generation
我正在使用imagettftext() 在图像上写入动态文本,我希望它适合我的图像宽度。
如何根据文本长度计算字体大小?
【问题讨论】:
标签: php imagettftext dynamic-content dynamic-image-generation
您可以使用imagettfbbox函数在输出之前计算TTF文本的边界框。不幸的是,没有直接的缩放方法来适应宽度,所以你必须自己做。
一种方法是将默认字体大小(例如 20)的文本传递给 imagettfbbox 并从中检索宽度。然后,您可以通过计算比例因子来计算文本应该小多少或大多少才能适合您想要的大小:
scale = targetWidth / bboxWidth;
然后画出合适大小的文字:
fontSize = 20 * scale;
使用imagettftext 函数。字体无法以这种方式完美 100% 缩放,但您会得到一个非常好的近似值。
查看imagettfboxhere的文档。
【讨论】:
while (itsTooBigAccordingToimagettftext() && $fontSize > 0) {
$fontSize--;
}
【讨论】:
itsTooBigAccordingToimagettfbbox() 而不是 itsTooBigAccordingToimagettftext() ;-)