Php 将文本与imagettfbbox居中对齐只能在开发中正常工作

Php 将文本与imagettfbbox居中对齐只能在开发中正常工作,php,Php,#更新 问题出在生产服务器上,很可能是因为它使用了GD和/或libPNG和/或FreeType的旧版本 在NameSheap和SiteGround共享主机上尝试过,但文本不会在两者上居中对齐。在Cloudways上试用,效果良好 Namecheap和SiteGround都有上述库的旧版本,而Cloudways和我的本地开发环境没有 因此,如果你有类似于我的应用程序,请确保在购买前检查生产服务器。仅仅启用库是不够的 #结束更新 我有一个小的PHP web应用程序,它根据用户输入生成一个简单的、固定

#更新

问题出在生产服务器上,很可能是因为它使用了GD和/或libPNG和/或FreeType的旧版本

在NameSheap和SiteGround共享主机上尝试过,但文本不会在两者上居中对齐。在Cloudways上试用,效果良好

Namecheap和SiteGround都有上述库的旧版本,而Cloudways和我的本地开发环境没有

因此,如果你有类似于我的应用程序,请确保在购买前检查生产服务器。仅仅启用库是不够的

#结束更新

我有一个小的PHP web应用程序,它根据用户输入生成一个简单的、固定大小的.png图像和文本

我正在使用带有imagettfbbox和base64_编码的GD库

除了生产服务器上的中心对齐(垂直和水平)之外,其他一切都正常工作

以下是中心对齐代码,该代码在开发中运行良好,但在生产中运行不正常:

$bbox = imagettfbbox($fontSize, 0, $font, $text);

// where $im is $im = imagecreate(512, 512);
$imageWidth = imagesx($im);
$imageHeight = imagesy($im);
$x = ceil(($imageWidth - $bbox[2]) / 2);
$y = ceil(($imageHeight - $bbox[7]) / 2);
以下是它在生产中的表现:

$textWidth = abs($bbox[2]) - abs($bbox[0]);
$textHeight = abs($bbox[5]) - abs($bbox[3]);
$imageWidth = imagesx($im);
$imageHeight = imagesy($im);
$x = ($imageWidth - $textWidth) / 2;
$y = ($imageHeight + $textHeight) / 2;

在开发过程中,它在中心完全对齐

我试图删除
ceil()
,但没有任何变化

我还尝试了另一个代码,但也有同样的问题,但这一次在开发中,不仅在生产中:

$textWidth = abs($bbox[2]) - abs($bbox[0]);
$textHeight = abs($bbox[5]) - abs($bbox[3]);
$imageWidth = imagesx($im);
$imageHeight = imagesy($im);
$x = ($imageWidth - $textWidth) / 2;
$y = ($imageHeight + $textHeight) / 2;
对于开发环境,我使用带有Homestead box的Vagrant,它使用Ubuntu18.04和带有PHP7.3的Apache

生产环境使用Linux、Apache、PHP7.3。GD(捆绑)和FreeType(v2.3.11)都已启用

我真的不知道为什么这会发生在生产中。不知道从哪里开始找


生产中是否缺少一些需要启用的功能?

由于这是我问题的实际解决方案,因此我将其添加为答案。希望它能帮助其他人

一位来自Namecheap的支持代表对我的初始代码进行了调整,使其在他们的服务器上工作。我假设它应该在其他有类似问题的主机上工作(检查我问题中的更新)


现在,这在本地开发中无法正常工作,因为它会在右侧添加更多空间,但它会解决生产上的问题,在某些共享主机上,这是一个重要部分。

1)这是一个长度计算,应该是
$textWidth=abs($bbox[2]-$bbox[0])$textHeight=abs($bbox[5]-$bbox[3])。2) 我很确定
imagettfbbox()
不会返回精确到像素的结果。请尝试。这是同样的问题,但现在也在发展中。第一段代码(图像上方的代码)在开发过程中运行良好。It中心应该对齐,但在生产中也不起作用。这就是奇怪的部分。