Kwa nthawi ndithu tsopano, mouziridwa ndi nkhaniyi
Nkhaniyi inandithandiza kwambiri
Ndiye tikusowa chiyani
Zitsanzo zidzaperekedwa kutengera Debian.
Kuyika nginx ndi nginx-zowonjezera
apt-get update
apt-get install nginx-extras
Kukhazikitsa LuaJIT
apt-get -y install lua5.1 luajit-5.1 libluajit-5.1-dev
Kukhazikitsa imagemagick
apt-get -y install imagemagick
ndi malaibulale magickwand kwa izo, mu nkhani yanga ya version 6
apt-cache search libmagickwand
apt-get -y install libmagickwand-6.q16-3 libmagickwand-6.q16-dev
Kumanga lua-imagick
Timagwirizanitsa nkhokwe (kapena kutenga zip ndikumasula)
cd ~
git clone https://github.com/isage/lua-imagick.git
cd lua-imagick
mkdir build
cd build
cmake ..
make
make install
Ngati zonse zidayenda bwino, mutha kukonza Nginx.
Ndipereka chitsanzo cha makonzedwe a backend host, omwe, kwenikweni, ali ndi udindo wosinthira. Imayendetsedwa ndi seva yakutsogolo, komanso ndi Nginx, pomwe caching imachitika kwa nthawi (masiku) ndi zinthu zina.
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
}
}
Zomwe zimafunikira (kukulitsa chithunzi kuzungulira m'mphepete) zimachitika pogwiritsa ntchito img:extent()
ndipo imatanthauzidwa pogwiritsa ntchito parameter resize
ndi chizindikiro +
kumapeto.
Njira zotsatirazi zilipo:
- WxH (Sungani mawonekedwe, gwiritsani ntchito mawonekedwe apamwamba)
- WxH^ (Sungani mawonekedwe, gwiritsani ntchito gawo lotsika (mbewu)
- WxH! (Penyani kuchuluka kwa mawonekedwe)
- WxH+ (Sungani mawonekedwe, onjezani malire)
Chidule cha tebulo ndi zotsatira zosintha kukula kwake
Funsani parameter ya uri
Kukula kwa Chithunzi Chotulutsa
?resize=400Γ200
200 Γ 200
?resize=400Γ200^
400 Γ 400
?kukula = 400Γ200!
400Γ200 (Osalingana)
?resize=400Γ200+
400Γ200 (Molingana)
Zotsatira
Poganizira mphamvu ndi kuphweka kwa njirayi, mutha kugwiritsa ntchito zinthu ndi malingaliro ovuta kwambiri, mwachitsanzo, kuwonjezera ma watermark kapena kugwiritsa ntchito chilolezo chokhala ndi mwayi wochepa. Kuti mudziwe kuthekera kwa API yogwira ntchito ndi zithunzi, mutha kulozera ku zolemba za library
Source: www.habr.com