PDA

Просмотр полной версии : NGINX создание размеров на лету.


AlexCooper
26.07.2013, 17:44
Здравствуйте.
Хочу перенастроить боевой сервер на отдачу картинок nginx'ом с ресайзингом и кешированием на лету. То-есть на сервере храниться оригинал, к примеру по адрессу
http://dev.net/image/original.jpg
Возможно ли сделать к примеру так, чтобы при переходе по ссылке
http://dev.net/image/0x0/200x200/100х100/original.jpg выдавалась картинка размером 100х100 которая отображала в себе изображение квадрата пикселей от 0х0 до 200х200 с проверкой на корректные варианты размеров с последующим кешированием результатов. Правда не знаю как защититься от атаки в случаях смещения отображаемой области. Суть в том чтобы с флеша вообще убрать порезку изображений, а на сервер отправлялась сгенерированная ссылка с настройками какую-область отображать в превью оригинального изображение. Что посоветуете? Сейчас система генерит три отдельных размера и сохраняет оригинал, хотелось бы убрать эту кашу.

Добавлено через 3 минуты
Статьи нашел как сделать кеширование с ресайзом на лету. А вот как с просчетом начальной и конечной зоны отображениянет , или все же нужно будет делать два изображения физически, один оригинал и 1 самый большой квадрат для превьюшек и дальше уже nginx будет этот квадрат ресайзить?

maxkar
26.07.2013, 17:56
А начальная и конечная зона - в официальной документации (http://wiki.nginx.org/HttpImageFilterModule). Вас image_filter crop интересует. Ну и URL ваш нужно соответствующим образом распарсить. Вроде бы и crop, и resize можно в одной команде. Если нет - нужно на себя тогда делать proxy pass (т.е. со scale на resize).

AlexCooper
26.07.2013, 18:34
А начальная и конечная зона - в официальной документации (http://wiki.nginx.org/HttpImageFilterModule). Вас image_filter crop интересует. Ну и URL ваш нужно соответствующим образом распарсить. Вроде бы и crop, и resize можно в одной команде. Если нет - нужно на себя тогда делать proxy pass (т.е. со scale на resize).

Хм.. не увидел как задавать начальную позицию. Если начало смещено в 20х30. С nginx'ом работал только по мануалам если честно очень стрёмно браться за дело.

maxkar
26.07.2013, 19:22
Да, это я виноват - не дочитал. Значит нужен какой-нибудь простенький сервер, который умеет делать crop. И на него проксировать запрос с нужными параметрами. А потом уже модулем nginx'а ресайзить. Или просто проксировать а от nginx'а добавить кэширование результатов

bifidokk
27.07.2013, 12:46
средствами пхп же можно подрезать
http://deepliquid.com/content/Jcrop_Implementation_Theory.html