Ji demek dirêj ve, ji gotarê hatî îlhama kirin
Ev gotar ji bo rizgariyê hat
Ji ber vê yekê em çi hewce ne
Nimûne dê li ser bingeha Debian bêne dayîn.
Sazkirina nginx û nginx-extras
apt-get update
apt-get install nginx-extras
Sazkirina LuaJIT
apt-get -y install lua5.1 luajit-5.1 libluajit-5.1-dev
Sazkirina imagemagick
apt-get -y install imagemagick
û pirtûkxane magickwand ji bo wê, di doza min de ji bo guhertoya 6
apt-cache search libmagickwand
apt-get -y install libmagickwand-6.q16-3 libmagickwand-6.q16-dev
Avakirina lua-imagick
Em depoyê klon dikin (an zip digirin û jê pak dikin)
cd ~
git clone https://github.com/isage/lua-imagick.git
cd lua-imagick
mkdir build
cd build
cmake ..
make
make install
Ger her tişt baş bû, hûn dikarin Nginx mîheng bikin.
Ez ê mînakek veavakirina mêvandarê paşverû, ku, bi rastî, ji nûvekirina mezinbûnê berpirsiyar e, bidim. Ew ji hêla servera pêşîn ve, di heman demê de bi Nginx re, ku caching ji bo demek diyarkirî (rojan) û tiştên din pêk tê, tê proksî kirin.
veavakirina pişta nginx
# Backend image server
server {
listen 8082;
listen [::]:8082;
set $files_root /var/www/example.lh/frontend/web;
root $files_root;
access_log off;
expires 1d;
location /files {
# дефолтные значения ресайза
set $w 700;
set $h 700;
set $q 89;
#1-89 allowed
if ($arg_q ~ "^([1-9]|[1-8][0-9])$") {
set $q $arg_q;
}
if ($arg_resize ~ "([d-]+)x([d+!^]+)") {
set $w $1;
set $h $2;
rewrite ^(.*)$ /resize/$w/$h/$q$uri last;
}
rewrite ^(.*)$ /resize/$w/$h/$q$uri last;
}
location ~* ^/resize/([d]+)/([d+!^]+)/([d]+)/files/(.+)$ {
default_type 'text/plain';
set $w $1;
set $h $2;
set $q $3;
set $fname $4;
# Есть возможность вынести весь Lua код в отдельный файл
# content_by_lua_file /var/www/some.lua;
# lua_code_cache off; #dev
content_by_lua '
local magick = require "imagick"
local img = magick.open(ngx.var.files_root .. "/files/" .. ngx.var.fname)
if not img then ngx.exit(ngx.HTTP_NOT_FOUND) end
img:set_gravity(magick.gravity["CenterGravity"])
if string.match(ngx.var.h, "%d+%+") then
local h = string.gsub(ngx.var.h, "(%+)", "")
resize = ngx.var.w .. "x" .. h
-- для png с альфа каналом
img:set_bg_color(img:has_alphachannel() and "none" or img:get_bg_color())
img:smart_resize(resize)
img:extent(ngx.var.w, h)
else
img:smart_resize(ngx.var.w .. "x" .. ngx.var.h)
end
if ngx.var.arg_q then img:set_quality(ngx.var.q) end
ngx.say(img:blob())
';
}
}
# Upstream
upstream imageserver {
server localhost:8082;
}
server {
listen 80;
server_name examaple.lh;
# отправляем все jpg и png картинки на imageserver
location ~* ^/files/.+.(jpg|png) {
proxy_buffers 8 2m;
proxy_buffer_size 10m;
proxy_busy_buffers_size 10m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://imageserver; # Backend image server
}
}
Ya ku hewce bû (berfirehkirina wêneyê li dora kevanan) bi kar tîne img:extent()
û bi karanîna pîvanê tête diyar kirin resize
bi nîşanek +
di dawiyê de.
Vebijêrkên jêrîn hene:
- WxH (rêjeya aspektê bihêle, pîvana bilindtir bikar bîne)
- WxH^ (Aspect-rêjeya xwe bigire, pîvana jêrîn bikar bîne (birr))
- WxH! (Aspect-rêjeya paşguh neke)
- WxH+ (Aspect-rêjeya xwe bigire, sînorên alî lê zêde bike)
Tabloya kurteya bi encamên mezinbûnê
Parametreya uri daxwaz bikin
Mezinahiya Wêne Derketî
Mezinahî=400×200
200 × 200
?resize=400×200^
400 × 400
?resize=400×200!
400×200 (Ne rêjeyî)
?mezinahî=400×200+
400×200 (Nasib)
Encam
Bi berçavgirtina hêz û sadebûna vê nêzîkatiyê, hûn dikarin tiştan bi mantiqek pir tevlihev bicîh bikin, mînakî, pêvekirina avê nîşanan an bicîhkirina destûrnameyê bi gihîştina tixûbdar. Ji bo ku hûn kapasîteyên API-yê yên ji bo xebata bi wêneyan fêr bibin, hûn dikarin serî li belgeya pirtûkxaneyê bidin.
Source: www.habr.com