function imageTtfGetMaxSize($angle, $fontfile, $text, $width, $height) { $min = 1; $max = $height; while (true) { // Рабочий размер - среднее между максимумом и минимумом. $size = round(($max + $min) / 2); $sz = imageTtfSize($size, $angle, $fontfile, $text); if ($sz[0] > $width || $sz[1] > $height) { // Будем уменьшать максимальную ширину до те пор, пока текст не // "перехлестнет" многоугольник. $max = $size; } else { // Наоборот, будем увеличивать минимальную, пока текст помещается. $min = $size; } // Минимум и максимум сошлись друг к другу. if (abs($max - $min) < 2) { break; } } return $min; }
<?php ## Пример работы с TTF-шрифтом. require_once "lib/imagettf.php"; // Выводимая строка. $string = "Привет, мир!"; // Шрифт. $font = getcwd() . "/times.ttf"; // Загружаем фоновой рисунок. $im = imageCreateFromPng("sample02.png"); // Угол поворота зависит от текущего времени. $angle = microtime(true) * 10 % 360; // Ксли хотите, чтобы текст шел из угла в угол, раскомментируйте строчку: # $angle = rad2deg(atan2(imageSY($im), imageSX($im))); // Подгоняем размер текста под размер изображения. $size = imageTtfGetMaxSize($angle, $font, $string, imageSX($im), imageSY($im)); // Создаем в палитре новые цвета $shadow = imageColorAllocate($im, 0, 0, 0); $color = imageColorAllocate($im, 128, 255, 0); // Вычисляем координаты вывода, чтобы текст оказался в центре. $sz = imageTtfSize($size, $angle, $font, $string); $x = (imageSX($im) - $sz[0]) / 2 + $sz[2]; $y = (imageSY($im) - $sz[1]) / 2 + $sz[3]; // Рисуем строку текста, вначале черным со сдвигом, а затем - // основным цветом поверх (чтобы создать эффект тени). imageTtfText($im, $size, $angle, $x + 3, $y + 2, $shadow, $font, $string); imageTtfText($im, $size, $angle, $x, $y, $color, $font, $string); // Сообщаем о том, что далее следует рисунок PNG. Header("Content-type: image/png"); // Выводим рисунок imagePng($im);