편집 요약 없음 |
편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
local p = {} | local p = {} | ||
-- 헥스 코드에서 RGB 추출 | |||
local function hex_to_rgb(hex) | local function hex_to_rgb(hex) | ||
hex = hex:gsub("#", "") | hex = hex:gsub("#", "") | ||
if #hex ~= 6 then | -- 헥스 코드가 6자리인지 확인 | ||
return nil, nil, nil -- | if #hex ~= 6 or not hex:match("^[0-9a-fA-F]+$") then | ||
return nil, nil, nil -- 유효하지 않은 헥스 코드 처리 | |||
end | end | ||
local r = tonumber(hex:sub(1, 2), 16) | local r = tonumber(hex:sub(1, 2), 16) | ||
12번째 줄: | 14번째 줄: | ||
end | end | ||
-- RGB에서 헥스 코드 생성 | |||
local function rgb_to_hex(r, g, b) | local function rgb_to_hex(r, g, b) | ||
return string.format("#%02X%02X%02X", math.floor(r), math.floor(g), math.floor(b)) | return string.format("#%02X%02X%02X", math.floor(r), math.floor(g), math.floor(b)) | ||
end | end | ||
-- 밝기 조정 | |||
local function adjust_brightness(r, g, b, factor) | local function adjust_brightness(r, g, b, factor) | ||
r = math.min(255, math.max(0, r * factor)) | r = math.min(255, math.max(0, r * factor)) | ||
23번째 줄: | 27번째 줄: | ||
end | end | ||
-- 메인 함수 | |||
function p.adjust(frame) | function p.adjust(frame) | ||
local hex = frame.args[1] or "#808080" | local hex = frame.args[1] or "#808080" -- 기본값: 중간 회색 | ||
local direction = frame.args[2] or "brighten" | local direction = frame.args[2] or "brighten" -- 기본값: 밝게 | ||
local percentage = tonumber(frame.args[3]:gsub("%%", "")) | local percentage = tonumber(frame.args[3]:gsub("%%", "")) | ||
-- 퍼센트값 유효성 검사 | |||
if not percentage then | if not percentage then | ||
return "퍼센트값이 올바르지 않습니다. 숫자로 입력하세요 (예: 50%)." | return "퍼센트값이 올바르지 않습니다. 숫자로 입력하세요 (예: 50%)." | ||
36번째 줄: | 42번째 줄: | ||
end | end | ||
-- 밝기 조정 방향 설정 | |||
local factor = 1 + (percentage / 100) | local factor = 1 + (percentage / 100) | ||
if direction == "darken" then | if direction == "darken" then | ||
43번째 줄: | 50번째 줄: | ||
end | end | ||
-- 헥스 코드에서 RGB 추출 | |||
local r, g, b = hex_to_rgb(hex) | local r, g, b = hex_to_rgb(hex) | ||
if not r or not g or not b then | if not r or not g or not b then | ||
return "유효하지 않은 헥스 코드입니다." | return "유효하지 않은 헥스 코드입니다. 올바른 6자리 헥스 코드를 입력하세요 (예: #4a90e2)." | ||
end | end | ||
-- 밝기 조정 후 새로운 색상 반환 | |||
r, g, b = adjust_brightness(r, g, b, factor) | r, g, b = adjust_brightness(r, g, b, factor) | ||
return rgb_to_hex(r, g, b) | return rgb_to_hex(r, g, b) |
2025년 4월 19일 (토) 09:03 판
이 모듈에 대한 설명문서는 모듈:AdjustBrightness/설명문서에서 만들 수 있습니다
local p = {}
-- 헥스 코드에서 RGB 추출
local function hex_to_rgb(hex)
hex = hex:gsub("#", "")
-- 헥스 코드가 6자리인지 확인
if #hex ~= 6 or not hex:match("^[0-9a-fA-F]+$") then
return nil, nil, nil -- 유효하지 않은 헥스 코드 처리
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
-- 밝기 조정
local function adjust_brightness(r, g, b, factor)
r = math.min(255, math.max(0, r * factor))
g = math.min(255, math.max(0, g * factor))
b = math.min(255, math.max(0, b * factor))
return r, g, 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]:gsub("%%", ""))
-- 퍼센트값 유효성 검사
if not percentage then
return "퍼센트값이 올바르지 않습니다. 숫자로 입력하세요 (예: 50%)."
end
if percentage < 0 or percentage > 100 then
return "퍼센트는 0%에서 100% 사이여야 합니다."
end
-- 밝기 조정 방향 설정
local factor = 1 + (percentage / 100)
if direction == "darken" then
factor = 1 - (percentage / 100)
elseif direction ~= "brighten" then
return "방향은 'brighten' 또는 'darken'만 가능합니다."
end
-- 헥스 코드에서 RGB 추출
local r, g, b = hex_to_rgb(hex)
if not r or not g or not b then
return "유효하지 않은 헥스 코드입니다. 올바른 6자리 헥스 코드를 입력하세요 (예: #4a90e2)."
end
-- 밝기 조정 후 새로운 색상 반환
r, g, b = adjust_brightness(r, g, b, factor)
return rgb_to_hex(r, g, b)
end
return p