Недавно у меня появились немного ненормальные мысли по поводу того, чтобы при помощи javascript-фронтенда манипулировать изображениями на стороне сервера.
Как оказалось, эту мысль реализует интересная библиотека Phototype – клиент/серверная библиотека на основе Prototype, при помощи которой можно делать с изображениями все, что вздумается!
Чтобы все работало, на сервере должен быть установлен PHP-интерпретатор с библиотекой GD – нашей рабочей лошадкой. Именно благодаря GD мы сможем поварачивать, менять размеры, отражать изображения, ну и делать несколько весьма любопытных вещей.
И так, начнем-с!
Надеюсь, вы уже приготовили для пыток изображение (мой подопытный кролик стянут с Flickr):

Для начала сделаем его поменьше:
-
l_oPhoto = new Photo();
-
l_oPhoto.resize({width:200});
-
document.body.appendChild(l_oPhoto.fetch());

Неплохо, да? Это только начало. Чтобы разбавить соус, отразим изображение:
-
l_oPhoto = new Photo();
-
l_oPhoto.resize({width:200});
-
l_oPhoto.flipH(); // Отражаем по вертикали, flipH – горизонтально
-
document.body.appendChild(l_oImage.fetch());

Ради разнообразия повернем чуть-чуть:
-
l_oPhoto = new Photo();
-
l_oPhoto.resize({width:200});
-
l_oPhoto.flipH();
-
l_oPhoto.rotate(3); // поворачиваем на 3 градуса
-
document.body.appendChild(l_oPhoto.fetch());

Создадим тень и сделаем изображение «нарисованным»:
-
l_oPhoto = new Photo();
-
l_oPhoto.resize({width:200});
-
l_oPhoto.flipV();
-
l_oPhoto.rotate(3);
-
l_oPhoto.dropShadow();
-
l_oPhoto.makeSketchy();
-
document.body.appendChild(l_oPhoto.fetch());

…или черно-белым:
-
l_oPhoto = new Photo();
-
l_oPhoto.resize({width:200});
-
l_oPhoto.flipV();
-
l_oPhoto.rotate(3);
-
l_oPhoto.dropShadow();
-
l_oPhoto.toGreyScale();
-
document.body.appendChild(l_oPhoto.fetch());

Добавим надпись:
-
l_oPhoto = new Photo();
-
l_oPhoto.resize({width:200});
-
l_oPhoto.rotate(3);
-
l_oPhoto.dropShadow();
-
l_oPhoto.addCaption(‘Get ajaxorized!’, ‘1942.ttf’);
-
document.body.appendChild(l_oPhoto.fetch());

Куда же нации без любимого всеми Чака?
-
l_oPhoto = new Photo();
-
l_oPhoto.resize({width:200});
-
l_oPhoto.rotate(3);
-
l_oPhoto.dropShadow();
-
l_oPhoto.addCaption(‘Cheers, Chuck’, ‘1942.ttf’);
-
l_oPhoto.addChuckNorris(); // каждая библиотека должна содержать такую переменную, имхо
-
document.body.appendChild(l_oPhoto.fetch());

Вложенные функции
Phototype поддерживает вложенные функции (все проделанное выше можно уместить в одну строку):
-
l_oPhoto = new Photo().load(«test.jpg»).dropShadow().flipH().makeSketchy();
-
document.body.appendChild(l_oPhoto.fetch());
Скачать библиотеку можно здесь (доступно по лицензии GNU GPL).
Оригинал. Вольный перевод – Селицкас Павел.






No Comments Yet