Nginx
location ~* /([0-9a-z\/]+)/(.*).(jpg|jpeg|png|bmp|webp|JPG)_sy(\.|\_)(.*)$ {
lua_code_cache off;
default_type text/html;
root /filesystem/;
set $image_root /filesystem/;
set $new_img_path /filesystem/sy/;
set $ways $1;
set $fileName $2.$3;
set $file $image_root$uri;
set $sy $4;
set $other $5;
if (!-f $file) {
rewrite_by_lua_file /file_lua/sy.lua;
}
}
Lua
local img_path = ngx.var.image_root .. ngx.var.ways .. "/" .. ngx.var.fileName
local new_img_path = ngx.var.new_img_path .. ngx.var.ways .. "/" .. ngx.var.fileName
local thumbnail_path = ngx.var.file
local img_dir = ngx.var.new_img_path .. ngx.var.ways
local logo = ngx.var.new_img_path .. "logo.png"
local gm = "/usr/bin/gm "
local function mkdir_img_path(img_dir)
--建文件路径
local cmd = "mkdir -p " .. img_dir
os.execute(cmd)
end
local function get_wh()
--获取原始长宽
local cmd = gm .. "identify " .. img_path
local img_origin = io.popen(cmd)
local img_info = img_origin:read("*all")
local w_h = string.match(img_info,"%d+x%d+")
local x = string.find(w_h,"x")
local w = string.sub(w_h,0,(x-1))
local h = string.sub(w_h,(x+1),string.len(w_h))
return w,h
end
local function shuiyin(in_path,out_path)
mkdir_img_path(img_dir)
local w,h = get_wh()
if tonumber(w) >= 400 or tonumber(h) >= 400 then
cmd = gm .. "composite -gravity southeast -geometry +5+5 -dissolve 100 " .. logo .. " " .. in_path .. " " .. out_path
os.execute(cmd)
else
cmd = "cp " .. in_path .. " " .. out_path
end
end
local function resiz(in_path,out_path,thumbnail,quality)
if not quality then
quality = 100
end
mkdir_img_path(img_dir)
if thumbnail then
local cmd = gm .."convert -quality " .. quality .. "% " .. in_path .. " -thumbnail " .. thumbnail .. " " .. out_path
os.execute(cmd)
end
end
local sy = ngx.var.sy
local other = ngx.var.other
local a = string.find(sy, "_")
if a == 1 then
thumbnail = string.match(other,"%d+x%d+")
local in_path = img_path
local out_path = new_img_path .. thumbnail
resiz(in_path,out_path,thumbnail,quality)
local in_path = new_img_path .. thumbnail
local out_path = thumbnail_path
shuiyin(in_path,out_path)
elseif a == nil then
local in_path = img_path
local out_path = thumbnail_path
shuiyin(in_path,out_path)
end