Comments 11
Спасибо за статью, было позновательно.
Для генерации такого рода картинок я реализовал свой велосипед, в котором в частности было следующее:
Для вычисления границ текста использовалась функция QueryMultilineFontMetrics, которой передавались параметры визуализации текста (шрифт, цвет, размер, сам текст)
Изменение текста для оптимального отображения в прямоугольном регионе на изображении.
1 — Текст разбивается на слова (однобуквенные слова добавляются к следующему слову);
2 — добавлением по одному слову находится место, когда текст выходит за границы региона;
3 — выходящее по ширине за границы региона слово, переносится на следующую строку;
4 — если перенос приводит к выходу по высоте за границы региона — текст обрезается по предыдущему слову, к тексту добавляется многоточие.
* Ожидается что в тексте не будет настолько длинных слов, которые будут шире чем ширина региона текста.
Для вычисления границ текста использовалась функция QueryMultilineFontMetrics, которой передавались параметры визуализации текста (шрифт, цвет, размер, сам текст)
круто,
1. назовите проект как-нибудь абстрактнее, типа imagetexter с каким-нибудь развернутым слоганом: «добавляем текст и лого на КДПВ» (над английским вариантом стоит подумать)
2. функциям setText, setLogo удобнее иметь два параметра: первый собственно что set, а второй необязательный options в виде хеша option1=> '50%', option2 => '#color' и т.д. — это удобно, т.к. мы ставим только то, что действительно важно.
1. назовите проект как-нибудь абстрактнее, типа imagetexter с каким-нибудь развернутым слоганом: «добавляем текст и лого на КДПВ» (над английским вариантом стоит подумать)
2. функциям setText, setLogo удобнее иметь два параметра: первый собственно что set, а второй необязательный options в виде хеша option1=> '50%', option2 => '#color' и т.д. — это удобно, т.к. мы ставим только то, что действительно важно.
Спасибо!
Всегда были проблемы с придумыванием названий. Хотя последний мой шедевр в названиях — DynamicBlender (объект, который вытаскивает данные из динамического содержимого в CMSке).
Да, в большом количестве параметров у методов тоже вижу проблему. Но массивы не нравится использовать для параметров, так как спустя месяц-два — забываются ключи и приходится переходить внутрь методов, чтоб посмотреть, что и как назвал.
Хочу позже сделать так, чтоб можно было сделать цепочку: ->setText("...")->setTextColor("...")->setTextPosition("...") и т.д. В статье уже немного улучшенная версия, изначально нельзя было ставить несколько надписей и все было в одном объекте.
На setLogo тоже есть планы.
Всегда были проблемы с придумыванием названий. Хотя последний мой шедевр в названиях — DynamicBlender (объект, который вытаскивает данные из динамического содержимого в CMSке).
Да, в большом количестве параметров у методов тоже вижу проблему. Но массивы не нравится использовать для параметров, так как спустя месяц-два — забываются ключи и приходится переходить внутрь методов, чтоб посмотреть, что и как назвал.
Хочу позже сделать так, чтоб можно было сделать цепочку: ->setText("...")->setTextColor("...")->setTextPosition("...") и т.д. В статье уже немного улучшенная версия, изначально нельзя было ставить несколько надписей и все было в одном объекте.
На setLogo тоже есть планы.
мне больше всего резануло глаза последовательность «auto»,'5%' в одном методе и '5%', «auto» в другом.
по поводу опций — тут выручит документация, ее можно генерить из описания перед реализацией функции, описание перед функцией помогает держать варианты использования в одном месте. Да, цепочка тоже вариант, тем более что вы уже ее используете.
Вообще вот эти методы — это интерфейс вашего модуля, если вы его потом будете менять, будут испытывать боль все кто начал это использовать. А вы ведь хотите чтобы вашим модулем пользовались?: )
по поводу опций — тут выручит документация, ее можно генерить из описания перед реализацией функции, описание перед функцией помогает держать варианты использования в одном месте. Да, цепочка тоже вариант, тем более что вы уже ее используете.
Вообще вот эти методы — это интерфейс вашего модуля, если вы его потом будете менять, будут испытывать боль все кто начал это использовать. А вы ведь хотите чтобы вашим модулем пользовались?: )
Sign up to leave a comment.
Генерируем красивые картинки для социальных сетей