최근 바뀜
도구
업로드
도움말
길라잡이
위키 문법
특수 문서
문의·신고
디스코드
IP 사용자
216.73.216.63
로그인
모듈:HSL 문서 원본 보기
←
모듈:HSL
편집
토론
역사
새로고침
주시
역링크
정보
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
-- 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.8 * 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
문서로 돌아갑니다.