首页 > 解决方案 > 使用 imagettfbbox 居中对齐文本仅在开发中正常工作

问题描述

# 更新

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

在 Namecheap 和 SiteGround 共享主机上尝试过,文本不会在两者上居中对齐。在 Cloudways 上尝试过,它可以工作。

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

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

# 结束更新

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

为此,我正在使用带有 imagettfbbox 和 base64_encode 的 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);

以下是它在生产中的显示方式:

在此处输入图像描述

在开发中,它在中心完全对齐。

我尝试删除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 盒子的 Vagrant,它使用 Ubuntu 18.04 和带有 PHP 7.3 的 Apache。

生产环境使用Linux、Apache、PHP 7.3。启用了 GD(捆绑)以及 FreeType (v2.3.11)。

我真的不知道为什么会在生产中发生这种情况。甚至不知道从哪里开始寻找。

生产中是否缺少需要启用的东西?

标签: php

解决方案


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

Namecheap 的支持代表对我的初始代码进行了调整,以使其在他们的服务器上运行。我认为它应该适用于具有类似问题的其他主机(检查我的问题的更新)。

$imageWidth = imagesx($im);
$imageHeight = imagesy($im);
$rightX = $bbox[2] + $bbox[0];
$x = ceil(($imageWidth - $rightX) / 2);
$y = ceil(($imageHeight - $bbox[7]) / 2);

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


推荐阅读