2012-05-20 1 views
1

На моем веб-сайте есть генератор изображений. Он позволяет посетителям писать собственный текст на изображении.Написание текста на изображении с помощью PHP и GD

Я обрабатываю ситуацию, отображая изображение и используя Javascript, чтобы они могли писать на картинке (чтобы просмотреть, как будет выглядеть изображение). После того, как они нажимают кнопку submit, я получаю x & y координаты, текст и размер шрифта.

(я также поддерживаю размеры шрифтов умножить)

Для написания текста на изображении я использую ImageTTFText функции.

Хорошо, до сих пор все было хорошо. Теперь проблема заключается в том, как узнать, когда предложение слишком длинное, чтобы вписаться в одну строку. Я наткнулся на функцию wordwrap, но это ненадежно. Он разделяет предложение в зависимости от количества символов. Но, например, если вы наберете «я» десять раз и «D» десять раз, вы увидите, что разница в ширине.

Хорошо, тогда я наткнулся на ImageTTFBBox, который рассчитает размер окна, чтобы я знал, когда он слишком длинный. Ну, это прекрасно, но как я мог разделить предложение? (словами).

Буду признателен, если кто-нибудь может дать мне ответ.

ответ

0

моя логика заключалась бы в том, чтобы добавить как можно больше слов в каждую строку без необходимости вырезать слово. Итак, я бы добавил слово в строку, проверил его размер с ImageTTFBBox() и повторю, пока линия не переполнится (а затем явным образом удалит слово, вызвавшее переполнение). Если вы сталкиваетесь с ситуацией, когда линия переполняется, и на линии есть только одно слово, вы должны вырезать слово. вы будете звонить ImageTTFBBox() много раз.

0

Если вы используете HTML5, вы можете попросить Javascript дать вам некоторую помощь перед отправкой. Если у вас есть холст (даже созданные в коде) и контекст ctxt вы могли бы сделать:

ctxt.font = "14pt Arial"; 
ctxt.textAlign = "left"; 
ctxt.fillStyle = "#000"; 
ctxt.fillText(text, x, y); 
var metrics = ctxt.measureText(text); 
var width = metrics.width; 

Теперь вы знаете, насколько широка ваш текст, и можешь сделать некоторые основной перенос слов. Скажите, что ваша эффективная ширина (ширина изображения минус внутренняя граница) составляет 180 пикселей, а ширина текста - 679 пикселей. Это соотношение +/- 25% (26,05%). Используйте это соотношение для извлечения первых 25% предложения, посмотрите, подходит ли оно по ширине, рисует и перемещается по строке.