편집 요약 없음 |
편집 요약 없음 |
||
3번째 줄: | 3번째 줄: | ||
-- 헥스 코드에서 RGB 추출 | -- 헥스 코드에서 RGB 추출 | ||
local function hex_to_rgb(hex) | local function hex_to_rgb(hex) | ||
-- 헥스 코드의 # 제거 | -- 헥스 코드의 # 제거 및 유효성 검사 | ||
hex = hex:match("^#?(%x%x%x%x%x%x)$") | hex = hex:match("^#?(%x%x%x%x%x%x)$") | ||
if not hex then | if not hex then | ||
20번째 줄: | 20번째 줄: | ||
end | end | ||
-- | -- RGB 값 조정 (정확한 반올림 포함) | ||
local function adjust_brightness(r, g, b, factor) | local function adjust_brightness(r, g, b, factor) | ||
-- 밝기 조정 및 반올림 | |||
local function clamp_and_round(value) | |||
value = value * factor | |||
return r, g, b | value = math.min(255, math.max(0, value)) -- 0~255 범위 제한 | ||
return math.floor(value + 0.5) -- 반올림 | |||
end | |||
return clamp_and_round(r), clamp_and_round(g), clamp_and_round(b) | |||
end | end | ||
2025년 4월 19일 (토) 09:10 판
이 모듈에 대한 설명문서는 모듈: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
-- RGB 값 추출
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
-- RGB 값 조정 (정확한 반올림 포함)
local function adjust_brightness(r, g, b, factor)
-- 밝기 조정 및 반올림
local function clamp_and_round(value)
value = value * factor
value = math.min(255, math.max(0, value)) -- 0~255 범위 제한
return math.floor(value + 0.5) -- 반올림
end
return clamp_and_round(r), clamp_and_round(g), clamp_and_round(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] or "0"):match("%d+"))
-- 퍼센트값 유효성 검사
if not percentage or 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, err = hex_to_rgb(hex)
if not r or not g or not b then
return err -- 헥스 코드 오류 메시지 반환
end
-- 밝기 조정 후 새로운 색상 반환
r, g, b = adjust_brightness(r, g, b, factor)
return rgb_to_hex(r, g, b)
end
return p