ڪافي وقت تائين، آرٽيڪل پاران متاثر ٿيو
هي مضمون بچاء لاء آيو
پوء اسان کي ڇا گهرجي
ديبين جي بنياد تي مثال ڏنا ويندا.
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 پس منظر 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
}
}
ڇا گهربل هو (ڪنارن جي چوڌاري تصوير کي وڌائڻ) استعمال ڪندي ٿئي ٿي img:extent()
۽ وضاحت ڪئي وئي آهي پيرا ميٽر استعمال ڪندي resize
هڪ نشاني سان +
آخر ۾.
ھيٺ ڏنل اختيارن موجود آھن:
- WxH (پنهنجو تناسب رکو، اعلي طول و عرض استعمال ڪريو)
- WxH^ (پنهنجو تناسب رکو، هيٺين طول و عرض استعمال ڪريو (فصل))
- WxH! (نظر انداز ڪرڻ جو تناسب)
- WxH+ (پنهنجو تناسب رکو، پاسي واريون سرحدون شامل ڪريو)
ريزائز نتيجن سان خلاصو جدول
uri پيٽرولر جي درخواست ڪريو
آئوٽ پٽ تصويري سائيز
resize=400×200
200 × 200
resize=400×200^
400 × 400
resize=400×200!
400×200 (مناسب ناهي)
resize=400×200+
400×200 (متناسب)
نتيجو
هن طريقي جي طاقت ۽ سادگي تي غور ڪندي، توهان شين کي ڪافي پيچيده منطق سان لاڳو ڪري سگهو ٿا، مثال طور، واٽر مارڪ شامل ڪرڻ يا محدود رسائي سان اختيار لاڳو ڪرڻ. تصويرن سان ڪم ڪرڻ لاءِ API جي صلاحيتن کي ڳولڻ لاءِ، توھان حوالو ڪري سگھو ٿا لائبريري دستاويزن
جو ذريعو: www.habr.com