Intereting Posts
Как получить значение cookie в CodeIgniter? получить имя файла, загруженного через ajax отсутствует) после списка аргументов в коде формы html css не работает при отправке электронной почты с использованием AWS Как установить поле объекта, которое не существует в таблице, но существует в необработанном SQL как псевдоним? Включение display_errors из внутреннего кода laravel не удалось открыть поток фатальной ошибки при запуске команды php artisan serve Как отключить английский словарь по умолчанию в Pspell и использовать только пользовательский словарь? Как добавить расширение ctp в netbeans как заменить специальные символы теми, на которых они основаны на PHP? Сброс PHP Web содержимого, сгенерированного Javascript Вставка значения в несколько таблиц Согласование целевой команды обработки « » недопустимо Запрашиваемый JSON-анализ не удался, а post json_encode данные, как я могу revmoe "\" TinyMVC всегда показывает контроллер по умолчанию

Выравнивание по центру PHP GD ttftext

Я использую imagettftext для создания гистограммы и в верхней части каждого бара. Я хочу поставить значение .

У меня есть следующие переменные для каждого бара (которые действительно прямоугольники)

$x1 $y1 $x2 $y2 $imagesx $imagesy $font_size

Кроме того, шрифт должен уменьшаться по мере увеличения длины строки.

alt text

Делай это так. Не забудьте поместить файл шрифта «arial.ttf» в текущий каталог:

 <?php // Create a 650x150 image and create two colors $im = imagecreatetruecolor(650, 150); $white = imagecolorallocate($im, 255, 255, 255); $black = imagecolorallocate($im, 0, 0, 0); // Set the background to be white imagefilledrectangle($im, 0, 0, 649, 149, $white); // Path to our font file $font = './arial.ttf'; //test it out for($i=2;$i<10;$i++) WriteTextForMe($im, $font, str_repeat($i, $i), -140 + ($i*80), 70 + rand(-30, 30), -160 + (($i+1)*80), 150, $black); //this function does the magic function WriteTextForMe($im, $font, $text, $x1, $y1, $x2, $y2, $allocatedcolor) { //draw bars imagesetthickness($im, 2); imagerectangle($im, $x1, $y1, $x2, $y2, imagecolorallocate($im, 100,100,100)); //draw text with dynamic stretching $maxwidth = $x2 - $x1; for($size = 1; true; $size+=1) { $bbox = imagettfbbox($size, 0, $font, $text); $width = $bbox[2] - $bbox[0]; if($width - $maxwidth > 0) { $drawsize = $size - 1; $drawX = $x1 + $lastdifference / 2; break; } $lastdifference = $maxwidth - $width; } $size--; imagettftext($im, $drawsize, 0, $drawX, $y1 - 2, $allocatedcolor, $font, $text); } // Output to browser header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?> 

Он использует функцию imagettfbbox для получения ширины текста, затем перебирает размер шрифта, чтобы получить правильный размер, центрирует его и отображает.

Таким образом, он выводит следующее:

alt text

Вы можете вычислить центр вашего текста с помощью функции imagettfbbox PHP:

 // define text and font $text = 'some bar label'; $font = 'path/to/some/font.ttf'; // calculate text size (this needs to be adjusted to suit your needs) $size = 10 / (strlen($text) * 0.1); // calculate bar center $barCenter = $x1 + ($x2 - $x1) / 2; // calculate text position (centered) $bbox = imagettfbbox($size, 0, $font, $text); $textWidth = $bbox[2] - $bbox[0]; $positionX = $textWidth / 2 + $barCenter; $positionY = $y1 - $size; 

EDIT: Обновлен код, чтобы выполнить всю работу за вас.