Comments 11
Для генерации такого рода картинок я реализовал свой велосипед, в котором в частности было следующее:
Изменение текста для оптимального отображения в прямоугольном регионе на изображении.
1 — Текст разбивается на слова (однобуквенные слова добавляются к следующему слову);
2 — добавлением по одному слову находится место, когда текст выходит за границы региона;
3 — выходящее по ширине за границы региона слово, переносится на следующую строку;
4 — если перенос приводит к выходу по высоте за границы региона — текст обрезается по предыдущему слову, к тексту добавляется многоточие.

* Ожидается что в тексте не будет настолько длинных слов, которые будут шире чем ширина региона текста.

Для вычисления границ текста использовалась функция QueryMultilineFontMetrics, которой передавались параметры визуализации текста (шрифт, цвет, размер, сам текст)
круто,
1. назовите проект как-нибудь абстрактнее, типа imagetexter с каким-нибудь развернутым слоганом: «добавляем текст и лого на КДПВ» (над английским вариантом стоит подумать)
2. функциям setText, setLogo удобнее иметь два параметра: первый собственно что set, а второй необязательный options в виде хеша option1=> '50%', option2 => '#color' и т.д. — это удобно, т.к. мы ставим только то, что действительно важно.
Спасибо!

Всегда были проблемы с придумыванием названий. Хотя последний мой шедевр в названиях — DynamicBlender (объект, который вытаскивает данные из динамического содержимого в CMSке).

Да, в большом количестве параметров у методов тоже вижу проблему. Но массивы не нравится использовать для параметров, так как спустя месяц-два — забываются ключи и приходится переходить внутрь методов, чтоб посмотреть, что и как назвал.
Хочу позже сделать так, чтоб можно было сделать цепочку: ->setText("...")->setTextColor("...")->setTextPosition("...") и т.д. В статье уже немного улучшенная версия, изначально нельзя было ставить несколько надписей и все было в одном объекте.
На setLogo тоже есть планы.
мне больше всего резануло глаза последовательность «auto»,'5%' в одном методе и '5%', «auto» в другом.

по поводу опций — тут выручит документация, ее можно генерить из описания перед реализацией функции, описание перед функцией помогает держать варианты использования в одном месте. Да, цепочка тоже вариант, тем более что вы уже ее используете.

Вообще вот эти методы — это интерфейс вашего модуля, если вы его потом будете менять, будут испытывать боль все кто начал это использовать. А вы ведь хотите чтобы вашим модулем пользовались?: )
И правда, в «лучших» традициях PHP, создал путаницу с порядком аргументов.

Так как данный модуль уже в нескольких наших проектах используется, то при обновлении, обратную совместимость буду тянуть. К этому в какой-то мере приучила разработка CMS, чтоб обновление не превращалось в ад.
Скрипт работает на PHP, с использованием модуля Imagick. Писать это на GD2 что-то я не решился.

Для таких случаев существуют библиотеки-обвязки, например, Imagine.

В первом примере DOCUMENT_ROOT вместо константы DR по особенной причине есть?
Там скорее везде должно быть DOCUMENT_ROOT, просто у меня обычно есть константа и использую ее.
Only those users with full accounts are able to leave comments. Log in, please.