php - 使用 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)。
我真的不知道为什么会在生产中发生这种情况。甚至不知道从哪里开始寻找。
生产中是否缺少需要启用的东西?
解决方案
由于这是我的问题的实际解决方案,因此我将其添加为答案。希望它会帮助其他人。
Namecheap 的支持代表对我的初始代码进行了调整,以使其在他们的服务器上运行。我认为它应该适用于具有类似问题的其他主机(检查我的问题的更新)。
$imageWidth = imagesx($im);
$imageHeight = imagesy($im);
$rightX = $bbox[2] + $bbox[0];
$x = ceil(($imageWidth - $rightX) / 2);
$y = ceil(($imageHeight - $bbox[7]) / 2);
现在这在本地开发中无法正常工作,因为它会在右侧增加更多空间,但它会解决生产中的问题,在某些共享主机上,这是重要的部分。
推荐阅读
- python - 为 python 安装包时出错,当我有时询问 vc++
- r - 如何使用 Prcomp 将 PCA 的摘要提取为 R 中的数据框?
- html - Ng引导模式不打开
- html - 实现引导无间隙卡片列
- qt - QTcpSocket如何返回QString
- python - 行到列 Python Pandas 数据框 (pd.melt)
- docker - Pip install 实际上是在一个 docker 容器中(气流)
- javascript - Javascript 中使用对象引用的“闭包”:“私有变量”存储在哪里?
- mysql - 在 MySQL 中计算一个复杂的累积值
- postgresql - 带有“DISTINCT ON”的“CAST”函数不会改变字段的类型