图片水印

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

几年前之前给我们网站 安团 和 智企ID 做的水印是这么做的,后来有了更好的方法所以摈弃了,故而拿出来交流交流。

你可能感兴趣的:(NGINX,LUA)