如何在 php gd 库中仅水平对齐图像上的文本

How to only horizontally align text on image in php gd library

我正在尝试仅水平对齐 php gd 库中图像上的文本,就像您对“text-align: center”所做的那样,这样文本就不会超出图像范围太大了。

<?php
// (A) OPEN IMAGE
$img = imagecreatefrompng('LOGO.PNG');

// (B) WRITE TEXT
$txt = "Divine Magnificent Endurance";
$font = "C:/xampp/htdocs/testImages/ArialCE.ttf"; 
$white = imagecolorallocate($img, 0, 0, 0);

$width = imagesx($img);
$height = imagesy($img);

$text_size = imagettfbbox(24, 0, $font, $txt);
$text_width = max([$text_size[2], $text_size[4]]) - min([$text_size[0], $text_size[6]]);
$text_height = max([$text_size[5], $text_size[7]]) - min([$text_size[1], $text_size[3]]);

$centerX = CEIL(($width - $text_width) / 2);
$centerX = $centerX<0 ? 0 : $centerX;
$centerY = CEIL(($height - $text_height) / 1.3);
$centerY = $centerY<0 ? 0 : $centerY;
imagettftext($img, 18, 0, $centerX, $centerY, $white, $font, $txt);

imagesavealpha($img, true);

// (C) OUTPUT IMAGE
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);

我在生成头像时必须实现类似的功能,我通过获取 imagettfbbox 的第三个和第六个值解决了这个问题,即 X 位置的右下角和 Y 的右上角位置,我从图像的高度和宽度中减去那些,然后将该值除以一半,四舍五入并获取绝对值,这些将是我的 xy 坐标。

我研究了哪些值和数学运算会产生最好的结果,这给了我想要的居中。

$centerY = abs(ceil(($height - $text_size[5]) / 2));
$centerX = abs(ceil(($width - $text_size[2]) / 2));

我在我的 Dev 帐户上写了一个 post 关于它的文章,可能会有用。我希望这能在正确的方向上给你一些帮助。