모듈:AdjustBrightness: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
태그: 수동 되돌리기
 
(같은 사용자의 중간 판 하나는 보이지 않습니다)
7번째 줄: 7번째 줄:
         return nil, "유효하지 않은 헥스 코드입니다. 6자리 색상 코드 (#RRGGBB)를 입력하세요."
         return nil, "유효하지 않은 헥스 코드입니다. 6자리 색상 코드 (#RRGGBB)를 입력하세요."
     end
     end
     local r = tonumber(hex:sub(1, 2), 16) / 255
     local r = tonumber(hex:sub(1, 2), 16)
     local g = tonumber(hex:sub(3, 4), 16) / 255
     local g = tonumber(hex:sub(3, 4), 16)
     local b = tonumber(hex:sub(5, 6), 16) / 255
     local b = tonumber(hex:sub(5, 6), 16)
     return r, g, b
     return r, g, b
end
end


-- RGB를 HSL로 변환
-- RGB에서 헥스 코드 생성
local function rgb_to_hsl(r, g, b)
local function rgb_to_hex(r, g, b)
     local max = math.max(r, g, b)
     return string.format("#%02X%02X%02X", math.floor(r), math.floor(g), math.floor(b))
    local min = math.min(r, g, b)
    local l = (max + min) / 2
    if max == min then
        return 0, 0, l -- 무채색
    end
    local d = max - min
    local s = d / (l > 0.5 and (2 - max - min) or (max + min))
    local h = ((max == r and (g - b) / d + (g < b and 6 or 0)) or
              (max == g and (b - r) / d + 2) or
              (max == b and (r - g) / d + 4)) / 6
    return h, s, l
end
end


-- HSL을 RGB로 변환
-- 밝기 조정 (brighten)
local function hsl_to_rgb(h, s, l)
local function brighten(r, g, b, percentage)
     local function hue_to_rgb(p, q, t)
     local function adjust(value)
         if t < 0 then t = t + 1 end
         return value + ((255 - value) * percentage / 100)
        if t > 1 then t = t - 1 end
        if t < 1/6 then return p + (q - p) * 6 * t end
        if t < 1/2 then return q end
        if t < 2/3 then return p + (q - p) * (2/3 - t) * 6 end
        return p
     end
     end
     if s == 0 then return l, l, l end -- 무채색
     return adjust(r), adjust(g), adjust(b)
    local q = l < 0.5 and l * (1 + s) or l + s - l * s
    local p = 2 * l - q
    return hue_to_rgb(p, q, h + 1/3),
          hue_to_rgb(p, q, h),
          hue_to_rgb(p, q, h - 1/3)
end
end


-- 밝기 조정
-- 어둡게 조정 (darken)
local function adjust_lightness(hex, direction, percentage)
local function darken(r, g, b, percentage)
    local r, g, b = hex_to_rgb(hex)
     local function adjust(value)
    if not r then return g end -- 오류 메시지 반환
         return value - (value * percentage / 100)
     local h, s, l = rgb_to_hsl(r, g, b)
    if direction == "brighten" then
        l = math.min(l + percentage / 100, 1)
    elseif direction == "darken" then
         l = math.max(l - percentage / 100, 0)
    else
        return "방향은 'brighten' 또는 'darken'만 가능합니다."
     end
     end
    r, g, b = hsl_to_rgb(h, s, l)
     return adjust(r), adjust(g), adjust(b)
     return string.format("#%02X%02X%02X", math.floor(r * 255), math.floor(g * 255), math.floor(b * 255))
end
end


73번째 줄: 44번째 줄:
     end
     end


     return adjust_lightness(hex, direction, percentage)
     -- RGB 변환
    local r, g, b, err = hex_to_rgb(hex)
    if not r then
        return err
    end
 
    -- 방향에 따른 조정
    if direction == "brighten" then
        r, g, b = brighten(r, g, b, percentage)
    elseif direction == "darken" then
        r, g, b = darken(r, g, b, percentage)
    else
        return "방향은 'brighten' 또는 'darken'만 가능합니다."
    end
 
    -- RGB 값을 헥스로 변환
    return rgb_to_hex(r, g, b)
end
end


return p
return p

2025년 4월 19일 (토) 09:42 기준 최신판

이 모듈에 대한 설명문서는 모듈:AdjustBrightness/설명문서에서 만들 수 있습니다

local p = {}

-- 헥스 코드에서 RGB 추출
local function hex_to_rgb(hex)
    hex = hex:match("^#?(%x%x%x%x%x%x)$")
    if not hex then
        return nil, "유효하지 않은 헥스 코드입니다. 6자리 색상 코드 (#RRGGBB)를 입력하세요."
    end
    local r = tonumber(hex:sub(1, 2), 16)
    local g = tonumber(hex:sub(3, 4), 16)
    local b = tonumber(hex:sub(5, 6), 16)
    return r, g, b
end

-- RGB에서 헥스 코드 생성
local function rgb_to_hex(r, g, b)
    return string.format("#%02X%02X%02X", math.floor(r), math.floor(g), math.floor(b))
end

-- 밝기 조정 (brighten)
local function brighten(r, g, b, percentage)
    local function adjust(value)
        return value + ((255 - value) * percentage / 100)
    end
    return adjust(r), adjust(g), adjust(b)
end

-- 어둡게 조정 (darken)
local function darken(r, g, b, percentage)
    local function adjust(value)
        return value - (value * percentage / 100)
    end
    return adjust(r), adjust(g), adjust(b)
end

-- 메인 함수
function p.adjust(frame)
    local hex = frame.args[1] or "#808080" -- 기본 색상
    local direction = frame.args[2] or "brighten" -- 기본 방향
    local percentage = tonumber(frame.args[3]:match("%d+")) or 0 -- 기본 퍼센트

    if percentage < 0 or percentage > 100 then
        return "퍼센트는 0%에서 100% 사이여야 합니다."
    end

    -- RGB 변환
    local r, g, b, err = hex_to_rgb(hex)
    if not r then
        return err
    end

    -- 방향에 따른 조정
    if direction == "brighten" then
        r, g, b = brighten(r, g, b, percentage)
    elseif direction == "darken" then
        r, g, b = darken(r, g, b, percentage)
    else
        return "방향은 'brighten' 또는 'darken'만 가능합니다."
    end

    -- RGB 값을 헥스로 변환
    return rgb_to_hex(r, g, b)
end

return p