Поэтому я создаю генератор баннеров.
Я буду добавлять текст посередине, но хотелось бы, чтобы он был точно в центре. Я знаю, что imagettftext
можно использовать для записи на баннер, но это не будет его центрировать.
Вероятным решением может быть поиск ширины текста, а затем использование половины из него отнимается от половины ширины баннера, но я не знаю, как это сделать.
Я использую PHP-GD и не хочу использовать что-то еще, что мне нужно будет установить.
imagettftext($img, 14, 0, (468 - ((strlen($_GET['description']) * imagefontwidth(imageloadfont('minecraft.ttf'))) / 1)), 85, imagecolorallocate($img, 0, 0, 0), 'minecraft.ttf', $_GET['description']);
Приведенный выше код делает результат выше. Это хорошо с небольшими строками, но должно быть что-то не так, поскольку, как только они становятся длинными, это терпит неудачу.
Проверьте imagettfbbox
: http://www.php.net/manual/en/function.imagettfbbox.php . Это даст вам экстенты текста, который вы хотите отобразить. Тогда это простая арифметика, чтобы центрировать это на вашем изображении.
Вы можете imageftbbox
текст, получив ширину от внешних границ от imageftbbox
затем разделите это на два, чтобы получить смещение, которое будет imageftbbox
текст на изображении.
// 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);
Документация imageftbbox
Мне потребовалось много времени, но я понял, как точно центрировать текст на изображении.
list($left,, $right) = imageftbbox(18, 0, 'minecraft.ttf', $_GET['description']); $dwidth = $right - $left; $pos = (HALF_OF_IMAGE_WIDTH - $nwidth / 2);
Вы можете центрировать текст в изображении, получая половину высоты и ширины изображения, а также половину высоты и ширины текста
Вы можете получить ширину и высоту изображения, используя imagesx и imagesy соответственно.
Вы можете получить ширину и высоту текста, используя метод imagettfbbox в PHP GD.
После этого вы получите привязку, вы можете получить ширину текста и высоту текста
text width = right bound on x – левая граница по оси x
высота текста = нижняя граница по оси y – верхняя граница по оси y
Затем используйте ширину и высоту изображения, чтобы получить начальное смещение, которое позволит центрировать ваше изображение
start_x_offset = (ширина изображения – ширина текста) / 2;
start_y_offset = (imageheight – textheight) / 2;
// Get image dimensions $image_width = imagesx($image); $image_height = imagesy($image); $text_bound = imageftbbox($font_size, $angle, $font, $text); //Get the text upper, lower, left and right corner bounds $lower_left_x = $text_bound[0]; $lower_left_y = $text_bound[1]; $lower_right_x = $text_bound[2]; $lower_right_y = $text_bound[3]; $upper_right_x = $text_bound[4]; $upper_right_y = $text_bound[5]; $upper_left_x = $text_bound[6]; $upper_left_y = $text_bound[7]; //Get Text Width and text height $text_width = $lower_right_x - $lower_left_x; //or $upper_right_x - $upper_left_x $text_height = $lower_right_y - $upper_right_y; //or $lower_left_y - $upper_left_y //Get the starting position for centering $start_x_offset = ($image_width - $text_width) / 2; $start_y_offset = ($image_height - $text_height) / 2; // Add text to image imagettftext($image, $font_size, $angle, $start_x_offset, $start_y_offset, $color, $font, $text);