കുറച്ച് കാലമായി, ലേഖനത്തിൽ നിന്ന് പ്രചോദനം ഉൾക്കൊണ്ട്
ഈ ലേഖനം രക്ഷയ്ക്കായി വന്നു
അപ്പോൾ നമുക്ക് എന്താണ് വേണ്ടത്
ഡെബിയനെ അടിസ്ഥാനമാക്കി ഉദാഹരണങ്ങൾ നൽകും.
nginx, nginx-extras എന്നിവ ഇൻസ്റ്റാൾ ചെയ്യുന്നു
apt-get update
apt-get install nginx-extras
LuaJIT ഇൻസ്റ്റാൾ ചെയ്യുന്നു
apt-get -y install lua5.1 luajit-5.1 libluajit-5.1-dev
ഇമേജ്മാജിക്ക് ഇൻസ്റ്റാൾ ചെയ്യുന്നു
apt-get -y install imagemagick
ലൈബ്രറികളും മാന്ത്രിക വാണ്ട് എന്റെ കാര്യത്തിൽ, പതിപ്പ് 6-ന്
apt-cache search libmagickwand
apt-get -y install libmagickwand-6.q16-3 libmagickwand-6.q16-dev
ബിൽഡിംഗ് ലുവാ-ഇമാജിക്ക്
ഞങ്ങൾ റിപ്പോസിറ്ററി ക്ലോൺ ചെയ്യുക (അല്ലെങ്കിൽ സിപ്പ് എടുത്ത് അൺപാക്ക് ചെയ്യുക)
cd ~
git clone https://github.com/isage/lua-imagick.git
cd lua-imagick
mkdir build
cd build
cmake ..
make
make install
എല്ലാം ശരിയായി നടന്നാൽ, നിങ്ങൾക്ക് Nginx കോൺഫിഗർ ചെയ്യാം.
ബാക്കെൻഡ് ഹോസ്റ്റിന്റെ കോൺഫിഗറേഷന്റെ ഒരു ഉദാഹരണം ഞാൻ നൽകും, അത് യഥാർത്ഥത്തിൽ വലുപ്പം മാറ്റുന്നതിന് ഉത്തരവാദിയാണ്. ഇത് ഫ്രണ്ട് സെർവർ പ്രോക്സി ചെയ്യുന്നു, കൂടാതെ Nginx ഉപയോഗിച്ചും, ഒരു നിശ്ചിത സമയത്തേക്ക് (ദിവസങ്ങൾ) മറ്റ് കാര്യങ്ങൾക്കായി കാഷിംഗ് സംഭവിക്കുന്നു.
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
}
}
ആവശ്യമുള്ളത് (ചിത്രം അരികുകളിൽ വികസിപ്പിക്കുന്നത്) ഉപയോഗിച്ച് സംഭവിക്കുന്നു img:extent()
കൂടാതെ പാരാമീറ്റർ ഉപയോഗിച്ച് നിർവചിക്കപ്പെടുന്നു resize
ഒരു അടയാളം കൊണ്ട് +
അവസാനം.
ഇനിപ്പറയുന്ന ഓപ്ഷനുകൾ ലഭ്യമാണ്:
- WxH (വീക്ഷണാനുപാതം നിലനിർത്തുക, ഉയർന്ന അളവ് ഉപയോഗിക്കുക)
- WxH^ (വീക്ഷണാനുപാതം നിലനിർത്തുക, കുറഞ്ഞ അളവ് ഉപയോഗിക്കുക (വിള))
- WxH! (വീക്ഷണാനുപാതം അവഗണിക്കുക)
- WxH+ (വീക്ഷണ-അനുപാതം നിലനിർത്തുക, സൈഡ് ബോർഡറുകൾ ചേർക്കുക)
വലുപ്പം മാറ്റൽ ഫലങ്ങളുള്ള സംഗ്രഹ പട്ടിക
യുറി പാരാമീറ്റർ അഭ്യർത്ഥിക്കുക
ഔട്ട്പുട്ട് ഇമേജ് വലുപ്പം
?resize=400×200
200 × 200
?resize=400×200^
400 × 400
?resize=400×200!
400×200 (ആനുപാതികമല്ല)
?resize=400×200+
400×200 (ആനുപാതികം)
ഫലം
ഈ സമീപനത്തിന്റെ ശക്തിയും ലാളിത്യവും കണക്കിലെടുത്ത്, നിങ്ങൾക്ക് വളരെ സങ്കീർണ്ണമായ യുക്തി ഉപയോഗിച്ച് കാര്യങ്ങൾ നടപ്പിലാക്കാൻ കഴിയും, ഉദാഹരണത്തിന്, വാട്ടർമാർക്കുകൾ ചേർക്കുന്നത് അല്ലെങ്കിൽ പരിമിതമായ ആക്സസ് ഉപയോഗിച്ച് അംഗീകാരം നടപ്പിലാക്കുക. ചിത്രങ്ങളുമായി പ്രവർത്തിക്കുന്നതിനുള്ള API യുടെ കഴിവുകൾ കണ്ടെത്തുന്നതിന്, നിങ്ങൾക്ക് ലൈബ്രറി ഡോക്യുമെന്റേഷൻ റഫർ ചെയ്യാം
അവലംബം: www.habr.com