Sulod sa pipila ka panahon karon, nadasig sa artikulo
Kini nga artikulo mitabang sa pagluwas
Busa unsa ang atong gikinahanglan
Ang mga pananglitan ihatag base sa Debian.
Pag-instalar sa nginx ug nginx-extras
apt-get update
apt-get install nginx-extras
Pag-instalar sa LuaJIT
apt-get -y install lua5.1 luajit-5.1 libluajit-5.1-dev
Pag-instalar sa imagemagic
apt-get -y install imagemagick
ug mga librarya magickwand niini, sa akong kaso alang sa bersyon 6
apt-cache search libmagickwand
apt-get -y install libmagickwand-6.q16-3 libmagickwand-6.q16-dev
Pagtukod og lua-imagick
Gi-clone namon ang repository (o kuhaa ang zip ug i-unpack kini)
cd ~
git clone https://github.com/isage/lua-imagick.git
cd lua-imagick
mkdir build
cd build
cmake ..
make
make install
Kung maayo ang tanan, mahimo nimong i-configure ang Nginx.
Maghatag ako usa ka pananglitan sa config sa backend host, nga, sa tinuud, responsable sa pagbag-o sa laki. Giproxy kini sa front server, kauban usab sa Nginx, diin ang caching mahitabo sa usa ka piho nga yugto sa panahon (mga adlaw) ug uban pang mga butang.
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
}
}
Unsa ang gikinahanglan (pagpalapad sa imahe sa palibot sa mga sulud) mahitabo gamit img:extent()
ug gihubit gamit ang parameter resize
nga may timaan +
sa katapusan.
Ang mosunod nga mga opsyon anaa:
- WxH (Ipadayon ang aspect-ratio, gamita ang mas taas nga dimensyon)
- WxH^ (Ipadayon ang aspect-ratio, gamita ang ubos nga dimensyon (crop))
- WxH! (Ibaliwala ang aspect-ratio)
- WxH+ (Ipadayon ang aspect-ratio, idugang ang mga utlanan sa kilid)
Summary table nga adunay mga resulta sa pag-resize
Pangayo ug uri parameter
Gidak-on sa Hulagway sa Output
?resize=400Γ200
200 Γ 200
?resize=400Γ200^
400 Γ 400
?resize=400Γ200!
400 Γ 200 (Dili proporsyonal)
?resize=400Γ200+
400Γ200 (Proporsyonal)
Ang resulta
Sa pagkonsiderar sa gahum ug kayano sa kini nga pamaagi, mahimo nimong ipatuman ang mga butang nga adunay komplikado nga lohika, pananglitan, pagdugang mga watermark o pagpatuman sa pagtugot nga adunay limitado nga pag-access. Aron mahibal-an ang mga kapabilidad sa API alang sa pagtrabaho sa mga imahe, mahimo nimong i-refer ang dokumentasyon sa librarya
Source: www.habr.com