Задать вопрос

Как добавить на изображение закругленный текст?

Необходимо на изображение средствами PHP добавить произвольный текст, но не стандартно горизонтально, или вертикально, а по окружности. Подскажите, пожалуйста, можно ли это сделать?
  • Вопрос задан
  • 143 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
@SharuPoNemnogu
не язык плохой, программисты такие...
набросал за 10 минут. Не готовое идеальное решение, но принцип думаю понятен
class RoundedText
{
    private $string = "some text";
    private $angle = 45;
    private $image;
    private $startX = 150;
    private $startY = 250;

    /**
     * @param string $string текст для отрисовки
     */
    public function __construct($string = '')
    {
        if (!empty($string)) {
            $this->string = $string;
        }
    }

    /**
     * Рисует текст
     */
    private function drawText()
    {
        // пустая черная картинка 500х500
        $this->image = imagecreatetruecolor(500, 500);
        //массив символов из строки
        $simbols = str_split($this->string);
        //центр строки
        $center = round(count($simbols)/2);
        //цвет символов (красный)
        $color = imagecolorallocate($this->image, 0xFF, 0x00, 0x00);
        //множитель угла наклона
        $i = 1;
        //счетчик символов
        $j = 1;

        while ($simbols) {
            $simbol = array_shift($simbols);
            //угол поворота символа
            $angle = $this->angle / $i;

            //если текущий символ дальше центра, инвертируем угол накрона
            if ($j > $center) {
                $angle *= -1;
                $i--;
             } else {
                $i++;
            }

            //рисуем символ
            $coords = imagefttext($this->image, 24, $angle, $this->startX, $this->startY, $color, 'path_to_font.ttf', $simbol);

            //присваиваем координаты нового символа
            $this->startX = $coords[2];
            $this->startY = $coords[3];

            $j++;
        }
    }

    public function save($path = null)
    {
        $this->drawText();
        header("Content-type: image/jpeg");
        imagejpeg($this->image, $path, 90);
        imagedestroy($this->image);
    }
}

$roundText = new RoundedText();
$roundText->save();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы