Динамически генерировать облако слов? - PullRequest
6 голосов
/ 20 августа 2009

Хорошо, вот что я хотел бы сделать в PHP:

http://www.wordle.net/

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

Ответы [ 2 ]

2 голосов
/ 26 августа 2009

Ну, вы можете использовать imagettfbox (см. Также http://ruquay.com/sandbox/imagettf/), чтобы получить границы холста текста тега, который вы создали - учитывая шрифт, поворот и размер (который, очевидно, зависит от количества появления любого данного тега).

С этого момента вы можете начать размещать слова тега (случайным образом? - см. edit ) на холсте облака, пока все они не будут размещены. Вам просто нужно убедиться, что они не перекрываются (т.е. вы можете хранить координаты пикселей в массиве).

Еще одна вещь, которую вы должны удостовериться, - это сделать холст изображения достаточно большим (или размер шрифта достаточно маленьким), чтобы вместить все теги, поэтому вам нужно будет предварительно рассчитать (снова используя imagettfbox) точный пиксель размер каждого слова и после того, как вы достигли размера, в котором все слова могут поместиться на холсте изображения, вы можете начать размещать их, используя imagettftext .

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

Спасибо, Мартин Ваттенберг, за Центральная идея просто бросать вещи в экран, пока он не подходит. Я поднимаю стекло для философии глупая вещь, которая работает. "

и многое другое ...

0 голосов
/ 21 августа 2009

Вот ссылка на учебник , который использует jQuery и CSS для выполнения большей части работы - хотя вам потребуется php для передачи значений, если они хранятся в базе данных (как предполагает учебник) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...