Efa ela be izao, nahazo tsindrimandry avy amin'ilay lahatsoratra
Tonga hamonjy ity lahatsoratra ity
Inona Γ ry no ilaintsika
Ny ohatra dia homena mifototra amin'ny Debian.
Fametrahana nginx sy nginx-extras
apt-get update
apt-get install nginx-extras
Fametrahana ny LuaJIT
apt-get -y install lua5.1 luajit-5.1 libluajit-5.1-dev
Fametrahana imagemagick
apt-get -y install imagemagick
sy tranomboky magickwand amin'izany, raha ny momba ahy ho an'ny version 6
apt-cache search libmagickwand
apt-get -y install libmagickwand-6.q16-3 libmagickwand-6.q16-dev
Fanorenana lua-imagick
Manao clone ny repository izahay (na alao ny zip ary esory izany)
cd ~
git clone https://github.com/isage/lua-imagick.git
cd lua-imagick
mkdir build
cd build
cmake ..
make
make install
Raha mandeha tsara ny zava-drehetra dia azonao atao ny manamboatra Nginx.
Hanome ohatra momba ny config an'ny mpampiantrano backend aho, izay, raha ny marina, dia tompon'andraikitra amin'ny fanovana ny habeny. Izy io dia atolotry ny mpizara eo aloha, miaraka amin'i Nginx, izay misy ny caching mandritra ny fe-potoana (andro) sy zavatra hafa.
nginx backend config
# 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
}
}
Ny zavatra takiana (manitatra ny sary manodidina ny sisiny) dia mitranga amin'ny fampiasana img:extent()
ary voafaritra amin'ny fampiasana ny paramètre resize
misy famantarana +
amin'ny farany.
Misy ireto safidy manaraka ireto:
- WxH (Tazony ny tahan'ny lafiny, ampiasao ny refy ambony)
- WxH^ (Tazony ny aspect-ratio, ampiasao ny refy ambany (vovony))
- WxH! (Tsy raharahaina ny aspect ratio)
- WxH+ (Tazony ny aspect ratio, ampio sisiny)
Tabilao famintinana misy valiny ovaina
Mangataha uri parameter
Haben'ny sary Output
?resize=400Γ200
200 Γ 200
?resize=400Γ200^
400 Γ 400
?resize=400Γ200!
400Γ200 (Tsy mifandanja)
?resize=400Γ200+
400Γ200 (Mitovy)
Ny vokany
Raha jerena ny hery sy ny fahatsoran'ity fomba fiasa ity, dia azonao atao ny mampihatra zavatra miaraka amin'ny lojika saro-takarina, ohatra, manampy mari-pamantarana na fampiharana fahazoan-dΓ lana amin'ny fidirana voafetra. Mba hahitana ny fahaizan'ny API miasa amin'ny sary dia azonao atao ny mijery ny antontan-taratasy momba ny tranomboky
Source: www.habr.com