Fun igba diẹ bayi, atilẹyin nipasẹ nkan naa
Nkan yii wa si igbala
Nitorina kini a nilo
Awọn apẹẹrẹ yoo fun ni da lori Debian.
Fifi nginx ati awọn afikun nginx
apt-get update
apt-get install nginx-extras
Fifi LuaJIT sori ẹrọ
apt-get -y install lua5.1 luajit-5.1 libluajit-5.1-dev
Fifi imagemagick
apt-get -y install imagemagick
ati awọn ile-ikawe magickwand si o, ninu ọran mi fun ẹya 6
apt-cache search libmagickwand
apt-get -y install libmagickwand-6.q16-3 libmagickwand-6.q16-dev
Ilé lua-imagick
A ṣe ẹda ibi ipamọ naa (tabi mu zip naa ki o tu silẹ)
cd ~
git clone https://github.com/isage/lua-imagick.git
cd lua-imagick
mkdir build
cd build
cmake ..
make
make install
Ti ohun gbogbo ba lọ daradara, o le tunto Nginx.
Emi yoo fun apẹẹrẹ ti atunto ti agbalejo ẹhin, eyiti, ni otitọ, jẹ iduro fun iwọntunwọnsi. O jẹ aṣoju nipasẹ olupin iwaju, tun pẹlu Nginx, nibiti caching waye fun akoko kan (awọn ọjọ) ati awọn nkan miiran.
nginx backend konfigi
# 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
}
}
Ohun ti a beere (fifẹ aworan ni ayika awọn egbegbe) ṣẹlẹ ni lilo img:extent()
ati ti wa ni asọye nipa lilo paramita resize
pẹlu ami kan +
ni ipari.
Awọn aṣayan wọnyi wa:
- WxH (Jeki ipin-ipin, lo iwọn ti o ga julọ)
- WxH^ (Jeki ipin-ipin, lo iwọn kekere (irugbin))
- WxH! (Foju abala-ipin)
- WxH+ (Jeki ipin-ipin, ṣafikun awọn aala ẹgbẹ)
Tabili Lakotan pẹlu awọn abajade iwọn
Beere uri paramita
Iwon Aworan Ijade
?iwọn = 400×200
200 × 200
?iwọn = 400×200^
400 × 400
?iwọn = 400×200!
400×200 (kii ṣe deede)
?iwọn = 400×200+
400×200 (Iwọn)
Abajade
Ṣiyesi agbara ati ayedero ti ọna yii, o le ṣe awọn nkan pẹlu ọgbọn idiju, fun apẹẹrẹ, fifi awọn ami omi kun tabi imuse aṣẹ pẹlu iwọle to lopin. Lati le wa awọn agbara ti API fun ṣiṣẹ pẹlu awọn aworan, o le tọka si iwe-ikawe
orisun: www.habr.com