Как центрировать текст в середине созданного изображения PNG

Я создал изображение так:

$altoRouter->map('GET|POST', '/public/images/generate/[*:name]', function($string) {
$font = 100;
$im = imagecreatetruecolor($font * strlen($string['name']) + 50, 300);
imagesavealpha($im, true);
imagealphablending($im, false);
$white = imagecolorallocatealpha($im, 255, 255, 255, 127);
imagefill($im, 0, 0, $white);
$black = imagecolorallocate($im, 0, 0, 0);
imagettftext($im, $font, 0, 0, $font - 3, $black, IEZON_ROOT . "/public/uploads/NovaSquare.ttf", strtoupper($string['name']));
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
});

Что дает мне этот вывод, если я делаю /public/images/generate/example:



Однако, как вы можете видеть, текст выравнивается по левому краю, а не по центру изображения. Есть ли способ, которым я могу достичь этого?

1

Решение

Благодаря @ceejayoz я использовал это:

$altoRouter->map('GET|POST', '/public/images/generate/[*:name]', function($string) {
$font = 100;
$im = imagecreatetruecolor($font * strlen($string['name']) + 200, 300);
imagesavealpha($im, true);
imagealphablending($im, false);
$white = imagecolorallocatealpha($im, 255, 255, 255, 127);
imagefill($im, 0, 0, $white);
$black = imagecolorallocate($im, 0, 0, 0);

$width = $font * strlen($string['name']) + 200;
$centerX = $width / 2;
list(,,$right,,,,) = imageftbbox($font, 0, IEZON_ROOT . "/public/uploads/NovaSquare.ttf", strtoupper($string['name']));
$left_offset = $right / 2;
$x = $centerX - $left_offset;
imagettftext($im, $font, 0, $x, 200, $black, IEZON_ROOT . "/public/uploads/NovaSquare.ttf", strtoupper($string['name']));
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
});

Который сейчас центрируется отлично.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector