php gd Выравнивание текста по центру изображения
Primary tabs
Общая идея
Общая идея для центрирования по вертикали и горизонтали:
/ Get image dimensions $width = imagesx($image); $height = imagesy($image); // Get center coordinates of image $centerX = $width / 2; $centerY = $height / 2; // Get size of text list($left, $bottom, $right, , , $top) = imageftbbox($font_size, $angle, $font, $text); // Determine offset of text $left_offset = ($right - $left) / 2; $top_offset = ($bottom - $top) / 2; // Generate coordinates $x = $centerX - $left_offset; $y = $centerY + $top_offset; // Add text to image imagettftext($image, $font_size, $angle, $x, $y, $color, $font, $text);
-- отсюда
Центрируем по горизонтали - функция
/**
* Высчитает горизонтальное смещение для текста, при выравнивании по центру изображения
*/
protected function getCentredOffsetX(int $font_size, string $font, string $text): int {
$width = imagesx($this->image); // получаем GdImage/resource любым способом
$imageСenter = $width / 2;
$angle = 0; // ноль, если не наклоняем строки
[$left, , $right] = imageftbbox($font_size, $angle, $font, self::someConvertEncoding($text));
$textAreaMiddle = ($right - $left) / 2;
return round($imageСenter - $textAreaMiddle);
}-в примере выше мы используем свою функцию self::someConvertEncoding() для преобразования из одной кодировки в другую (вам может не потребоваться!), т.к. важно передать строку в imageftbbox() в той кодировке, в которой вы передаете ее затем на отрисовку (напр в imagettftext() - иначе размеры области теста будут вычислены функцией выше неправильно и, как следтсвие, "поедет" центр.
- Log in to post comments
- 1329 reads