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
- 371 reads