문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. -- Module:HSL local p = {} -- HEX 색상 문자열 → R, G, B 변환 local function hexToRgb(hex) hex = hex:gsub("#", "") if #hex == 6 then 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 return 0, 0, 0 -- fallback end -- RGB → HSL local function rgbToHsl(r, g, b) r = r / 255 g = g / 255 b = b / 255 local max = math.max(r, g, b) local min = math.min(r, g, b) local h, s, l = 0, 0, (max + min) / 2 if max ~= min then local d = max - min s = l > 0.5 and d / (2 - max - min) or d / (max + min) if max == r then h = (g - b) / d + (g < b and 6 or 0) elseif max == g then h = (b - r) / d + 2 else h = (r - g) / d + 4 end h = h / 6 end return h * 360, s * 100, l * 100 end -- L 조정 local function adjustL(l, h) local l_adj = l > 50 and (-0.6 * l + 70) or (0.75 * l) if h > 39 and h < 88 then l_adj = l_adj - 10 end return math.max(0, math.min(100, math.floor(l_adj + 0.5))) end -- H, S 수정 규칙 local function applySpecialRules(h, s, l) if (l > 90 or (h > 220 and h < 268 and l > 90)) or s < 12.5 then return 200, 5, l else return h, s, l end end -- 메인 function p.main(frame) local args = frame:getParent().args local colorStr = args[1] or "" local r = tonumber(args['r']) local g = tonumber(args['g']) local b = tonumber(args['b']) -- HEX 형식이면 파싱 if colorStr:match("^#%x%x%x%x%x%x$") then r, g, b = hexToRgb(colorStr) end if not (r and g and b) then return "Invalid RGB input" end local h, s, l = rgbToHsl(r, g, b) h, s, l = applySpecialRules(h, s, l) local l_adj = adjustL(l, h) return string.format("HSL(%d, %d%%, %d%%)", math.floor(h + 0.5), math.floor(s + 0.5), l_adj) end return p 이 문서에서 사용한 틀: 모듈:HSL/설명문서 (원본 보기) 모듈:HSL 문서로 돌아갑니다.