Использование плагина Imageresizer Watermark для написания текста: по центру, по ширине и переводу строки

Я пытаюсь использовать плагин водяных знаков для написания текста на изображениях для моего проекта. Прямо сейчас я пытаюсь выяснить, как установить «ширину» для поля для письма, чтобы я мог получить автоматический возврат строки. Есть ли способ сделать это с помощью плагина водяных знаков?

Также я пытаюсь понять, могу ли я получить эффект «выравнивание текста: по центру», когда пишу свой текст (возможно, по отношению к этой заданной ширине), как я могу получить эту настройку?

Я думаю, что альтернативой этому будет возврат и центрирование строки, управляемой кодом, но это будет означать, что мне придется подсчитывать ширину моих символов, и это похоже на мир боли, хе-хе

Вот пример кода, который показывает, что я делаю (в настоящее время это работает):

var c = Config.Current; 
var wp = c.Plugins.Get<WatermarkPlugin>();

var t = new TextLayer(); 
t.Text = panty.Message; 
t.TextColor = (System.Drawing.Color) color; 
t.Font = fonts[myFunObject.Font]; 
t.FontSize = fontSize[myFunObject.LogoPosition];

t.Left = new DistanceUnit(5, DistanceUnit.Units.Pixels); 
t.Top = new DistanceUnit(5, DistanceUnit.Units.Pixels);

wp.NamedWatermarks["myFunObjectMessage"] = new Layer[] { t };

РЕДАКТИРОВАТЬ: я также должен упомянуть, что текст, который я пишу, отправлен пользователем, поэтому он каждый раз разный. Если вам нужен подобный случай, подумайте об этих забавных изображениях кошек с забавными текстовыми подписями к ним. Этот проект очень похож на этот. (минус коты)

Спасибо за помощь!


person Sébastien Richer    schedule 20.08.2013    source источник
comment
Возможно, вы захотите удалить тег asp.net-mvc-4, если вопрос не имеет к нему никакого отношения.   -  person asymptoticFault    schedule 20.08.2013
comment
Итак, вы, по сути, ищете автоматический перенос с учетом ширины и размера шрифта?   -  person Lilith River    schedule 20.08.2013
comment
@asymptoticFault Ты прав! (Проект MVC4, но по тегам это не имеет значения)   -  person Sébastien Richer    schedule 20.08.2013
comment
@ComputerLinguist По сути, да, и с такой шириной я тоже хочу, чтобы этот текст был по центру. Спасибо   -  person Sébastien Richer    schedule 20.08.2013


Ответы (1)


По сути, System.Drawing (и, следовательно, текущая версия Watermark) очень примитивны в отношении переноса строк.

Как вы упомянули, вы можете делать хакерские вещи с подсчетом символов и отдельными вызовами MeasureString с помощью циклов, но результаты едва ли приемлемы.

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

System.Drawing обладает непревзойденным качеством передискретизации изображения. Обтекание текстом, однако, немного воняет.

person Lilith River    schedule 30.09.2013
comment
В другом проекте я минимизировал влияние проблемы переноса, разделив поля для ввода пользовательского текста на разные поля и используя параметры центрирования locationLayerC.Align = ContentAlignment.MiddleCenter; - person Sébastien Richer; 30.09.2013