최근 바뀜
도구
업로드
도움말
길라잡이
위키 문법
특수 문서
문의·신고
디스코드
IP 사용자
216.73.216.135
로그인
모듈:HSL 문서 원본 보기
←
모듈:HSL
편집
토론
역사
새로고침
주시
역링크
정보
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
-- Module:HSL local p = {} local function trim(s) if not s then return nil end return s:match("^%s*(.-)%s*$") end local function hexToRgb(hex) hex = trim(hex):gsub("#", "") if #hex == 6 then return tonumber(hex:sub(1,2),16), tonumber(hex:sub(3,4),16), tonumber(hex:sub(5,6),16) end return 0, 0, 0 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 > 80)) or s < 12.5 then return 200, 5, l else return h, s, l end end function p.main(frameOrArgs) local args -- frame인지, 직접 args인지 판별 if type(frameOrArgs) == "table" and frameOrArgs.getParent then local frame = frameOrArgs args = frame.args or {} -- 부모 args 병합 (기존 동작 유지) if frame:getParent() then for k, v in pairs(frame:getParent().args) do if args[k] == nil then args[k] = v end end end else -- Lua 내부 직접 호출 args = frameOrArgs or {} end local colorStr = args[1] or "" local r = tonumber(args.r) local g = tonumber(args.g) local b = tonumber(args.b) if type(colorStr) == "string" and colorStr:match("^#%x%x%x%x%x%x$") then r, g, b = hexToRgb(colorStr) end if not (r and g and b) then return colorStr ~= "" and colorStr or "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
문서로 돌아갑니다.