[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с GDlib.
Lusya256
Никак не могу понять как сделать, чтобы текст генерируемый в .jpeg всегда находился по центру (по горизонтали) вне зависимости от длины вводимого слова.


вот код:
---$im=imagecreatefromjpeg($shab);
$font_color = imagecolorallocate($im, 255, 255, 255);
imagettftext($center, $im,30,0,175,405,$font_color,"fonts/cyrillic_old.ttf",$name);---[b]



Спустя 16 минут, 21 секунда (8.11.2009 - 13:40) Lusya256 написал(а):
Ребят. Ну ответьте пожалуйста. Неужели никто не знает? Или потому, что я девушка?


 ! 

М
Может вам пообещать ..... показать если поможете?
sergeiss Еще одно такое высказывание, и будет бан
unsure.gif

Спустя 1 час, 27 минут, 15 секунд (8.11.2009 - 15:07) Grazor написал(а):
а в чём проблема-то? высчитать координаты центра?

http://ru2.php.net/manual/en/function.imagettfbbox.php

Спустя 1 час, 56 минут, 9 секунд (8.11.2009 - 17:03) Lusya256 написал(а):
Цитата (Grazor @ 8.11.2009 - 12:07)
а в чём проблема-то? высчитать координаты центра?

http://ru2.php.net/manual/en/function.imagettfbbox.php

Я не понимаю какие именнно атрибуты и в какую часть кода вставить. Хелп плиз sad.gif

Спустя 1 час, 26 минут, 55 секунд (8.11.2009 - 18:30) sergeiss написал(а):
Цитата (Lusya256 @ 8.11.2009 - 14:40)
Неужели никто не знает? Или потому, что я девушка?

М-да... Плохо, когда у человека комплексы...

Алгоритм простой.
С помощью imagettfbbox определяем размер, занимаемый текстом.
Далее просто находим разницу между шириной картинки, и шириной текста, делим ее пополам - это будет позиция вставки текста. Именно того текста, для которого мы находили занимаемый размер.

Спустя 45 минут, 43 секунды (8.11.2009 - 19:16) Lusya256 написал(а):
Цитата (sergeiss @ 8.11.2009 - 15:30)
Цитата (Lusya256 @ 8.11.2009 - 14:40)
Неужели никто не знает? Или потому, что я девушка?

М-да... Плохо, когда у человека комплексы...

Алгоритм простой.
С помощью imagettfbbox определяем размер, занимаемый текстом.
Далее просто находим разницу между шириной картинки, и шириной текста, делим ее пополам - это будет позиция вставки текста. Именно того текста, для которого мы находили занимаемый размер.

Покажите пожалуйста пример на основе моего кода. Плизззз

Спустя 1 минута, 4 секунды (8.11.2009 - 19:17) Lusya256 написал(а):
Я правда немогу понять. Надеюсь это временно. Ведь спросить больше не у кого.

Спустя 12 минут, 32 секунды (8.11.2009 - 19:29) sergeiss написал(а):
Цитата (Lusya256 @ 8.11.2009 - 20:16)
Покажите пожалуйста пример на основе моего кода. Плизззз

Нет проблем smile.gif

Но только код я писать не буду, а опишу алгоритм более подробно.
Возьми функцию imagettfbbox. Описание функции тебе уже дали (ссылка выше).
Параметры у этой функции те же, вобщем-то, что и у функции imagettftext, которую ты используешь. Даже более того - их меньше! Ну так подставь их!

На выходе будет массив из 8 чисел, показывающий координаты 4-х точек, который можно нарисовать именно вокруг твоего текста, с учетом размера шрифта и угла наклона.
Исходя из этих данных надо вычислить ширину текста.

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

Спустя 3 минуты, 24 секунды (8.11.2009 - 19:33) Lusya256 написал(а):
так, понятно.Вроде. Но размер текста по горизонтали меняется в зависимости от вводимого в форму. как с этим быть? Как я понимаю нужно прописать мин и мах размер бокса? И чтоб он был всегда в центре. Т.е. 1 символ или 20 должны быть всегда в центре выводимого изображения.

Спустя 10 минут, 9 секунд (8.11.2009 - 19:43) sergeiss написал(а):
Не нужно прописывать никакие размеры.
Нужно только получить динамически размеры, исходя из текста. Что и позволяет сделать функция imagettfbbox.

Спустя 6 минут, 44 секунды (8.11.2009 - 19:49) Lusya256 написал(а):
написала вот так:

$font = './cyrillic_old.ttf';

$bbox = imagettfbbox(10, 45, $font);
$x = $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) - 25;
$y = $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;

$im=imagecreatefromjpeg($shab);
$font_color = imagecolorallocate($im, 255, 0, 255);
imagettftext($im, 10, 45, $x, $y, $font,$name);

imageJpeg($im, "".$papka."/".$id.".jpg");



честно говоря на обум. Выходит только фоновая картинка. Что не так?


Зы.: Вы уж простите что я такая тупая.Я самоучка, спросить не у кого, а парень только и знает что по адалтам шляться.

Спустя 6 минут, 16 секунд (8.11.2009 - 19:56) Grazor написал(а):
а почему $im используется до того как описано? dry.gif

Цитата (Lusya256 @ 8.11.2009 - 19:49)
$x = $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) - 25;
$y = $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;


и координаты не совсем так считаются.
простой пример: ширина 5 ед, текст - 1ед. какая координата должна быть у текста? wink.gif
__Х__

Спустя 2 минуты, 33 секунды (8.11.2009 - 19:58) Lusya256 написал(а):
упс. точно.

Спустя 1 минута, 45 секунд (8.11.2009 - 20:00) sergeiss написал(а):
Цитата (Lusya256 @ 8.11.2009 - 20:49)
Что не так?

Уже лучше smile.gif Направление мысли совершенно верное.

Но только количество параметров у imagettfbbox ты указываешь неверное. Где сам текст, размер которого надо узнать???

И координаты надо немного не так считать (хотя и близко к правильному написано). Подумай немного, чтобы не "честно говоря наобум", а чтобы с пониманием.

Цитата (Lusya256 @ 8.11.2009 - 20:49)
а парень только и знает что по адалтам шляться.

Не моё дело... Но, может, парня сменить? wink.gif

PS. Grazor - кто у кого "подсмотрел" фразу насчет координат??? rolleyes.gif

Спустя 3 минуты, 11 секунд (8.11.2009 - 20:03) Grazor написал(а):
sergeiss
я сам начал редактировать (а дописал, видимо, осле твоего ответа) smile.gif честно-честно
а вот недостающий параметр в imagettfbbox не заметил smile.gif

Спустя 2 дня, 21 час, 45 минут, 6 секунд (11.11.2009 - 17:48) Lusya256 написал(а):
Всё. Проблема решена. Огромнейшее спасибо Grazor. wub.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.