Подтвердить что ты не робот

Вычисление ширины текста с помощью PHP GD

Я просто пытаюсь получить ширину динамической строки текста для добавления к образу, сгенерированному с помощью GD PHP. Хотя я немного не уверен. Я знаю, как загрузить шрифт с помощью imageloadfont(), но могу ли я использовать файл .ttf? Я хочу знать ширину текста, используя шрифт размером 12 arial. Когда я пытаюсь использовать мой ttf файл, я получаю сообщение об ошибке "Ошибка чтения шрифта, недопустимый заголовок шрифта". Если мне нужен файл .gdf, где можно найти размер шрифта размером 12 gdf? Здесь мой код:

$newfont = imageloadfont("../fonts/arial.ttf");
$font_width = imagefontwidth($newfont);
$font_height = imagefontheight($newfont);
4b9b3361

Ответ 1

imageloadfont() используется для загрузки пользовательских растровых изображений. Если вы просто хотите использовать Arial или любые другие шрифты TrueType (.ttf) или OpenType (.otf) (поддержка последнего в GD lib глючит), тогда вам нужно imagettftext(). Прежде чем использовать imagettftext() и нарисуйте текст на своем изображении, сначала вам нужно знать, будет ли он соответствовать. Чтобы узнать это, вам просто нужно вызвать imagettfbbox() и передать ему размер шрифта, угол текста (0 для горизонтального текста), путь к вашему .ttf или файл шрифта .otf и строку самого текста, и он вернет массив с 8 элементами, представляющими четыре точки, создающими ограничивающий прямоугольник текста (проверьте руководство по PHP для специфики). Затем вы можете ссылаться на эти элементы массива и выполнять вычисления, чтобы знать ширину и высоту, которые займет эта конкретная строка текста. Затем вы можете использовать эти значения для создания изображения с определенной шириной и высотой, что позволит полностью отображать текст.

Вот простой script, который выполняет то, что вы пытаетесь сделать, чтобы начать работу:

<?php # Script 1

/*
 * This page creates a simple image.
 * The image makes use of a TrueType font.
 */

// Establish image factors:
$text = 'Sample text';
$font_size = 12; // Font size is in pixels.
$font_file = 'Arial.ttf'; // This is the path to your font file.

// Retrieve bounding box:
$type_space = imagettfbbox($font_size, 0, $font_file, $text);

// Determine image width and height, 10 pixels are added for 5 pixels padding:
$image_width = abs($type_space[4] - $type_space[0]) + 10;
$image_height = abs($type_space[5] - $type_space[1]) + 10;

// Create image:
$image = imagecreatetruecolor($image_width, $image_height);

// Allocate text and background colors (RGB format):
$text_color = imagecolorallocate($image, 255, 255, 255);
$bg_color = imagecolorallocate($image, 0, 0, 0);

// Fill image:
imagefill($image, 0, 0, $bg_color);

// Fix starting x and y coordinates for the text:
$x = 5; // Padding of 5 pixels.
$y = $image_height - 5; // So that the text is vertically centered.

// Add TrueType text to image:
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font_file, $text);

// Generate and send image to browser:
header('Content-type: image/png');
imagepng($image);

// Destroy image in memory to free-up resources:
imagedestroy($image);

?>

Измените значения, соответствующие вашим потребностям. Не забудьте прочитать руководство по PHP.

Ответ 2

С GD2 размер шрифта imagettfbbox должен быть в формате PT, а не в пикселях со следующим преобразованием:

($ fontSizeInPixel * 3)/4