Pull to refresh

Модерируемая коллекция кистей для GIMP

Reading time3 min
Views4.3K
Здравствуйте, хочу сегодня поведать вам об одном некоммерческом проекте.

Для тех, кто не в теме: существует опенсорсный графический редактор, который называется Gimp. Чтобы рассказать о нем, для простых людей был создан сайт, на котором были размещены уроки и описания этого редактора. Но речь пойдет не о самом сайте.

Редактор использует свой формат кистей. Пришла мысль о создании каталога, в котором можно было бы искать нужные кисти и быстро их скачивать.

В чем плюсы проекта для пользователей:
  • Отказ от системы «пакетов кистей». Человек будет скачивать только те кисти, которые ему интересны.
  • Подбор кистей по фильтрам и ключевым словам. То, что будет реализовано в GIMP 2.8 мы попытались реализовать на страницах сайта.
  • Удобный просмотр кистей. Пользователь видит кисть перед скачиванием. Может изменить цвет кисти и посмотреть ее в полном размере.
  • Перед скачиванием пользователь может опробовать кисть в действии. Порисовать ей в специальном графическом редакторе.
  • Скачивание со страниц сайта. Никаких тебе турбобитов, летитбитов и других файлообменников.
  • Рейтинг кистей. Сортировка кистей по качеству. Мы видим сколько раз кисть просмотрели, сколько раз ее скачали (показатель отказов), сколько раз ей подняли (в будущем и опустили) рейтинг. И в зависимости от этого, сортировать кисти по их качеству, а не дате добавления.


Организация предпросмотра кистей


Собственно, что такое этот сам предпросмотр — всего лишь эскиз внешнего вида самой кисточки и пробный штрих ею же в разных цветах.

image

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

Основной проблемой, которая стояла, было получение корректной картинки из битмапа. Сначала была идея делать unpack для всего участка файла, содержащего битмап, но это привело к тому, что на полноцветных кистях размером в 500х500 точек просто заканчивалась память (интерпретатору отводилось вплоть до 256 МБ ОЗУ). Судя по всему это как-то связано с моделью памяти при организации массивов PHP, но копать вглубь я не стал, а решил изменить алгоритм. Немного изучив документацию пришел к выводу, что можно спокойно, хоть и медленно, читать файл маленькими порциями используя пресловутый file_get_contents(), а потом работать с unpack().

Интерфейс подбора кистей


Но кроме самого генератора штрихов и эскизов кисти, был создан и интерфейс позволяющий отбирать кисти по интересующим признакам.

image

Включив фильтр (1) и выбрав одну или несколько меток для кисти (2) вам покажут кисти, которые соответствуют вашим требованиям (5). Кисти показываются в виде небольших штрихов, чтобы сразу можно было определить как кисть будет себя вести при рисовании. Цифры — это размер кисти в пикселях.

При включении меток (2), параметры поиска можно уточнить активными метками (4). Метка серого цвета (3) неактивна, кистей с такими параметрами нет.


Естественно было принято решение, что он должен быть быстрым и удобным, ну а этому как раз и способствовала концепция аякс запросов к серверу.

Как известно, самым медленным при работе в сети считается обращение к серверу и ожидание ответа от него. Опираясь на эту парадигму было решено сделать максимум работы при минимуме запросов, поэтому при любой выборке делался 1 запрос, который получал всю необходимую информацию о всем наборе кистей в формате JSON-структуры.

Если вы посмотрите на сервис, то увидите, что по клику на эскиз кисточки происходит открывание окна, в котором есть вся необходимая информация по кисти, уже полученная от сервера. Зато после открывания окна запускается асинхронный запрос, вызывающий серверный обработчик, подсчитывающий просмотры кисти. Кроме информации в этом окне реализована флеш-вставка позволяющая опробовать кисть «не отходя от кассы».

image

Работоспособность без JS


Казалось бы, аякс-аяксом и все хорошо. Но хорошо не для всех. Есть некоторые товарищи, которые отключают JS, а также поисковые системы, для которых мы сделали по обычной веб-страничке про каждую кисть. На этой странице есть и кисть и ее полное подробное описание. Кроме самих страниц с кистями, были сделаны и страницы выборок с метками. Реализовано было и то, что если включен JS, то с этих самых страниц можно будет пользоваться выборками как обычно.

Посмотреть и пощупать интерфейс можно тут: www.progimp.ru/downloads/brushes
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 67: ↑58 and ↓9+49
Comments28

Articles