Na multimediálních stránkách je často úkolem zobrazovat obrázky v různých velikostech (miniatury). Navíc ve většině případů musíte podporovat několik rozměrných verzí obrázků.
Dnes si popíšeme modul s názvem „ngx_http_image_filter_module“. Tento modul umožňuje vyřešit problém změny velikosti obrázků přímo přes webový server (bez dalších odkazů). Jak to všechno vypadá a co je třeba udělat?
Instalace
Stáhněte si nejnovější verzi zde:http://sysoev.ru/nginx/download.html
Chcete-li začít, musíte nainstalovat libgd:
# sudo apt-get install libgd2-xpm-dev
Ve výchozím nastavení se modul, který potřebujeme, nebude sestavovat, takže musí být připojen ve fázi konfigurace instalace nginx:
# ./configure --with-http_image_filter_module # make # sudo make install
Konfigurace serveru
Nyní nakonfigurujeme virtuálního hostitele v Nginx pro zpracování obrazu. Necháme obrázky uložit do adresáře „/home/someuser/images“ a chceme zobrazit dvourozměrné verze + originál. Pravidla jsou následující:
Když zadáte dotaz jako „example.com/z/“, zobrazíme verzi 150×150 oříznutou kolem okrajů (tj. vždy čtvercovou)
“example.com/y/ ” – shows the version inscribed in a 300×300 square “example.com/ ” – shows the original image
Ve skutečnosti konfigurace:
# Resizing server server { listen 444; server_name localhost; location /z/ { proxy_pass http://yourimageserver; # Backend image server image_filter crop 150 150; # Resize photo 150x150 and crop error_page 415 = /empty; # Handle error by /empty location } # 'y' size 300x300 location /y/ { proxy_pass http://yourimageserver; image_filter resize 300 300; # Resize photo 300x300 error_page 415 = /empty; } # Original image location / { proxy_pass http://yourimageserver; } # Error handler location = /empty { empty_gif; # Respond with empty image } } # Backend image server server { listen 443; server_name localhost; root /home/someuser/images; rewrite ^/[zy]/(.*)$ /$1 last; } # Upstream upstream yourimageserver { server localhost:444; }
Nyní, pokud máme ve složce „/home/youruser/images“ obrázek s názvem test.jpg, můžeme server otestovat následovně:
localhost:444/example.jpg – shows the original image localhost:444/z/example.jpg – will show version 150×150 localhost:444/y/example.jpg – show version 300×300
Zvedli jsme server na portu 444, který vykresluje různé verze obrázků. Každá verze má samostatnou direktivu umístění. Co nás zajímá, je direktiva image_filter. Použili jsme jej ve dvou verzích:
image_filter resize A B – reduces the image proportionally to fit into the specified dimensions AhV image_filter crop A B – reduces the image and cuts off the large e side at the edges so that the final size exactly matches AxB
Server naslouchající na portu 443 odešle obrázky ze složky „/home/someuser/images“ a přepíše cestu, pokud existuje předpona velikosti (/ y / nebo / z /) pomocí direktivy rewrite. Pokud dojde k chybě změny velikosti, modul zobrazí chybu 415, kterou lze zpracovat. V našem příkladu v případě takové chyby ukážeme prázdný gif.