Ers cryn amser bellach, wedi'i ysbrydoli gan yr erthygl
Daeth yr erthygl hon i'r adwy
Felly beth sydd ei angen arnom
Rhoddir enghreifftiau yn seiliedig ar Debian.
Gosod nginx a nginx-extras
apt-get update
apt-get install nginx-extras
Gosod LuaJIT
apt-get -y install lua5.1 luajit-5.1 libluajit-5.1-dev
Gosod imagemagick
apt-get -y install imagemagick
a llyfrgelloedd hud a lledrith iddo, yn fy achos i ar gyfer fersiwn 6
apt-cache search libmagickwand
apt-get -y install libmagickwand-6.q16-3 libmagickwand-6.q16-dev
Adeiladu lua-imagick
Rydyn ni'n clonio'r ystorfa (neu'n cymryd y sip a'i ddadbacio)
cd ~
git clone https://github.com/isage/lua-imagick.git
cd lua-imagick
mkdir build
cd build
cmake ..
make
make install
Pe bai popeth yn mynd yn dda, gallwch chi ffurfweddu Nginx.
Rhoddaf enghraifft o ffurfwedd y gwesteiwr backend, sydd, mewn gwirionedd, yn gyfrifol am newid maint. Mae'n cael ei ddirprwyo gan y gweinydd blaen, hefyd gyda Nginx, lle mae caching yn digwydd am gyfnod penodol o amser (diwrnodau) a phethau eraill.
config backend 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
}
}
Mae'r hyn oedd ei angen (ehangu'r ddelwedd o amgylch yr ymylon) yn digwydd gan ddefnyddio img:extent()
ac fe'i diffinnir gan ddefnyddio'r paramedr resize
ag arwydd +
Yn y diwedd.
Mae'r opsiynau canlynol ar gael:
- WxH (Cadw cymhareb agwedd, defnyddio dimensiwn uwch)
- WxH^ (Cadwch gymhareb agwedd, defnyddiwch ddimensiwn is (cnwd))
- WxH! (Anwybyddu cymhareb agwedd)
- WxH+ (Cadw'r gymhareb agwedd, ychwanegu borderi ochr)
Tabl crynodeb gyda chanlyniadau newid maint
Cais uri paramedr
Maint Delwedd Allbwn
?newid maint=400Γ200
200 Γ 200
?newid maint=400Γ200^
400 Γ 400
?newid maint=400Γ200!
400Γ200 (Ddim yn gymesur)
?newid maint=400Γ200+
400Γ200 (Cymesur)
Cyfanswm
O ystyried pΕ΅er a symlrwydd y dull hwn, gallwch chi weithredu pethau gyda rhesymeg eithaf cymhleth, er enghraifft, ychwanegu dyfrnodau neu weithredu awdurdodiad gyda mynediad cyfyngedig. Er mwyn darganfod galluoedd yr API ar gyfer gweithio gyda delweddau, gallwch gyfeirio at ddogfennaeth y llyfrgell
Ffynhonnell: hab.com