Выводимый текст имеет разную ширину, чтобы ее определить нужно применить функцию imageftbbox(), и отнять её половину от точки вывода текста.
Возьмем изображение-подложку bg.png:
Выведем текст «123456» шрифтом Helvetica.ttf в центре изображения:
$filename = __DIR__ . '/bg.png';
$info = getimagesize($filename);
switch ($info[2]) {
case 1: $img = imageCreateFromGif($filename); break;
case 2: $img = imageCreateFromJpeg($filename); break;
case 3: $img = imageCreateFromPng($filename); break;
}
$width = $info[0];
$height = $info[1];
$text = '123456';
$font = __DIR__ . '/Helvetica.ttf';
$font_size = 30;
$font_color = imagecolorallocate($img, 255, 255, 255);
$box = imageftbbox($font_size, 0, $font, $text);
$x = ($width - $box[4]) / 2;
$y = ($height - $box[5]) / 2;
imagettftext($img, $font_size, 0, $x, $y, $font_color, $font, $text);
switch ($info[2]) {
case 1:
header('Content-Type: image/gif');
imageGif($img);
break;
case 2:
header('Content-Type: image/jpeg');
imageJpeg($img, 100);
break;
case 3:
header('Content-Type: image/x-png');
imagePng($img);
break;
}
imagedestroy($img);
exit();
Результат:
Имеем изображение bg-2.png, выведем текст в по центру черной рамки:
Рамка имеет размер 300x80 и смещение слева 60px и сверху 100px.
$filename = __DIR__ . '/bg-2.png';
$info = getimagesize($filename);
switch ($info[2]) {
case 1: $img = imageCreateFromGif($filename); break;
case 2: $img = imageCreateFromJpeg($filename); break;
case 3: $img = imageCreateFromPng($filename); break;
}
// Размер рамки и смещение
$border_width = 300;
$border_height = 80;
$ofset_top = 100;
$ofset_left = 60;
$text = '123456';
$font = __DIR__ . '/Helvetica.ttf';
$font_size = 30;
$font_color = imagecolorallocate($img, 0, 0, 0);
$box = imageftbbox($font_size, 0, $font, $text);
$offset = ($box[2] - $box[0]) / 2;
$x = ($border_width / 2) - $offset + $ofset_left;
$offset = ($box[5] - $box[1]) / 2;
$y = ($border_height / 2) - $offset + $ofset_top;
imagettftext($img, $font_size, 0, $x, $y, $font_color, $font, $text);
switch ($info[2]) {
case 1:
header('Content-Type: image/gif');
imageGif($img);
break;
case 2:
header('Content-Type: image/jpeg');
imageJpeg($img, 100);
break;
case 3:
header('Content-Type: image/x-png');
imagePng($img);
break;
}
imagedestroy($img);
exit();