使用 imagettftext(), PHP 右对齐图像中的文本

2022-08-30 16:18:08

我正在为我的用户设置动态论坛签名图像,我希望能够将他们的用户名放在图像上。我能够很好地做到这一点,但是由于用户名的长度不同,并且我想右对齐用户名,因此当我必须设置x和y坐标时,我该怎么做。

$im = imagecreatefromjpeg("/path/to/base/image.jpg");
$text = "Username";
$font = "Font.ttf";
$black = imagecolorallocate($im, 0, 0, 0);

imagettftext($im, 10, 0, 217, 15, $black, $font, $text);
imagejpeg($im, null, 90);

答案 1

使用 imagettfbbox 函数获取字符串的宽度,然后从图像的宽度中减去该宽度以获得起始 x 坐标。

$dimensions = imagettfbbox($fontSize, $angle, $font, $text);
$textWidth = abs($dimensions[4] - $dimensions[0]);
$x = imagesx($im) - $textWidth;

答案 2

您可以使用 stil/gd-text 类。免责声明:我是作者。

<?php
use GDText\Box;
use GDText\Color;

$im = imagecreatefromjpeg("/path/to/base/image.jpg");

$textbox = new Box($im);
$textbox->setFontSize(12);
$textbox->setFontFace("Font.ttf");
$textbox->setFontColor(new Color(0, 0, 0)); // black
$textbox->setBox(
    50,  // distance from left edge
    50,  // distance from top edge
    200, // textbox width
    100  // textbox height
);

// text will be aligned inside textbox to right horizontally and to top vertically
$textbox->setTextAlign('right', 'top');

$textbox->draw("Username");

您还可以绘制多行文本。只需在传递给方法的字符串中使用。使用此类生成的示例:\ndraw()

right aligned text demo


推荐