필터 효과 모듈 레벨 1

W3C 워킹 드래프트,

이번 버전:
https://www.w3.org/TR/2018/WD-filter-effects-1-20181218/
최신 공개 버전:
https://www.w3.org/TR/filter-effects-1/
에디터스 드래프트:
https://drafts.fxtf.org/filter-effects-1/
이전 버전:
테스트 스위트:
http://test.csswg.org/suites/filter-effects/nightly-unstable/
이슈 추적:
명세 인라인
GitHub 이슈
에디터:
(Adobe Inc.)
(Apple Inc.)
이전 에디터:
Vincent Hardy
(초청 전문가)
명세 편집 제안:
GitHub 에디터

요약

필터 효과는 요소가 문서에 표시되기 전에 렌더링을 처리하는 방법입니다. 일반적으로 CSS 또는 SVG를 통해 요소를 렌더링하는 것은 요소와 그 하위 요소들이 버퍼(예: 래스터 이미지)에 그려진 후, 그 버퍼가 요소의 부모에 합성되는 것으로 개념적으로 설명할 수 있습니다. 필터는 합성 단계 이전에 효과를 적용합니다. 이러한 효과의 예로는 흐림, 색상 강도 변경, 이미지 왜곡 등이 있습니다.

필터 효과는 원래 SVG에서 사용하기 위해 설계되었지만, 이미지 버퍼에 적용하는 일련의 작업이기 때문에 CSS를 포함한 거의 모든 표현 환경에 적용할 수 있습니다. 필터는 스타일 지시(filter 속성)로 트리거됩니다. 이 명세는 CSS로 스타일링된 콘텐츠(예: HTML 및 SVG)에서 필터를 사용할 수 있도록 설명합니다. 또한 CSS <image> 값을 생성하는 CSS 속성 값 함수도 정의합니다.

CSS는 구조화된 문서(예: HTML 및 XML)를 화면, 종이 등에서 렌더링하는 방법을 설명하는 언어입니다.

이 문서의 상태

이 섹션은 이 문서가 발행될 당시의 상태를 설명합니다. 다른 문서가 이 문서를 대체할 수 있습니다. 현행 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 W3C 기술 보고서 인덱스 https://www.w3.org/TR/에서 확인할 수 있습니다.

워킹 드래프트로 발행된다고 해서 W3C 회원들의 승인임을 의미하지 않습니다. 이 문서는 초안이며 언제든지 다른 문서에 의해 업데이트, 대체 또는 폐기될 수 있습니다. 진행 중인 작업 외의 용도로 이 문서를 인용하는 것은 부적절합니다.

GitHub 이슈는 이 명세 논의에 선호되는 방법입니다. 이슈를 등록할 때 제목에 “filter-effects”를 포함해 주세요. 예시: “[filter-effects] …의견 요약…”. 모든 이슈와 의견은 아카이브에 저장되며, 역사적 아카이브도 있습니다.

이 문서는 CSS 워킹 그룹(스타일 활동의 일부)에서 작성되었습니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성되었습니다. W3C는 이 그룹의 산출물과 관련된 공개 특허 공개 목록을 유지합니다. 해당 페이지에는 특허 공개 방법에 대한 안내도 포함되어 있습니다. 특정 특허가 필수 청구항을 포함한다고 판단되는 경우, W3C 특허 정책 6항에 따라 정보를 공개해야 합니다.

이 문서는 2018년 2월 1일 W3C 프로세스 문서의 적용을 받습니다.

1. 소개

이 섹션은 규범적이지 않습니다

필터 효과는 요소가 문서에 그려질 때 적용되는 그래픽 작업입니다. 이는 이미지 기반 효과로, 0개 이상의 이미지를 입력으로 받고, 효과에 특화된 여러 매개변수를 받아 하나의 이미지를 출력합니다. 출력 이미지는 원래 요소 대신 문서에 렌더링되거나, 다른 필터 효과의 입력 이미지로 사용되거나, CSS 이미지 값으로 제공될 수 있습니다.

필터 효과의 간단한 예는 “플러드”입니다. 이 효과는 이미지 입력을 받지 않지만 색상을 정의하는 매개변수가 있습니다. 이 효과는 지정된 색상으로 완전히 채워진 출력 이미지를 생성합니다. 조금 더 복잡한 예는 “반전”으로, 하나의 이미지 입력(일반적으로 요소가 원래 부모에 렌더링되는 이미지)을 받아 각 픽셀의 색상 값을 반대로 조정합니다.

필터 효과는 두 가지 복잡도 수준으로 제공됩니다:

  1. 이름으로 제공되는 소수의 기본 필터 함수 집합. 이들은 특히 강력하지는 않지만, 편리하고 쉽게 이해할 수 있으며 흐림과 같은 일반적인 효과를 간단하게 달성할 수 있습니다. 기본 필터는 [CSS3-ANIMATIONS]에 의해 애니메이션할 수도 있습니다.

  2. 전체 효과를 정의하는 마크업 내 개별 필터 효과의 그래프. 이 그래프는 입력에 대해 독립적이어서 어떤 콘텐츠에도 효과를 적용할 수 있습니다. 이러한 그래프는 단독으로는 단순한 효과의 조합일 수 있지만, 전체적으로는 복잡한 효과를 생성할 수 있습니다. 아래에 예시가 제시되어 있습니다.

이 예제에서는 이미지에 <grayscale()> 필터 함수가 적용됩니다.
#image {
    filter: grayscale(100%);
}
Example for grayscale filter applied to image

필터가 없는 이미지(왼쪽)와 100% 그레이스케일 필터가 적용된 동일한 이미지(오른쪽).

다음은 개별 필터 효과 그래프의 예시를 보여줍니다.
Example Filter

필터가 적용된 객체의 초기 예시.

이 예제를 SVG로 보기

위의 예제에서 사용된 필터 효과는 여기에 왼쪽 열의 참조 번호와 함께 여섯 개의 필터 프리미티브 앞에 반복되어 있습니다:



1
2
3




4
5

6


<filter id="MyFilter" filterUnits="userSpaceOnUse" x="0" y="0" width="200" height="120">
  <desc>Produces a 3D lighting effect.</desc>
  <feGaussianBlur in="SourceAlpha" stdDeviation="4" result="blur"/>
  <feOffset in="blur" dx="4" dy="4" result="offsetBlur"/>
  <feSpecularLighting in="blur" surfaceScale="5" specularConstant=".75"
                      specularExponent="20" lighting-color="#bbbbbb"
                      result="specOut">
    <fePointLight x="-5000" y="-10000" z="20000"/>
  </feSpecularLighting>
  <feComposite in="specOut" in2="SourceAlpha" operator="in" result="specOut"/>
  <feComposite in="SourceGraphic" in2="specOut" operator="arithmetic"
               k1="0" k2="1" k3="1" k4="0" result="litPaint"/>
  <feMerge>
    <feMergeNode in="offsetBlur"/>
    <feMergeNode in="litPaint"/>
  </feMerge>
</filter>

다음 그림들은 여섯 개의 필터 요소 각각에서의 중간 이미지 결과를 보여줍니다:

filters01 - original source graphic

소스 그래픽

filters01 - after filter element 1

필터 프리미티브 1 이후

filters01 - after filter element 2

필터 프리미티브 2 이후

filters01 - after filter element 3

필터 프리미티브 3 이후

filters01 - after filter element 4

필터 프리미티브 4 이후

filters01 - after filter element 5

필터 프리미티브 5 이후

filters01 - after filter element 6

필터 프리미티브 6 이후

  1. 필터 프리미티브 feGaussianBlur는 입력으로 SourceAlpha를 받아(소스 그래픽의 알파 채널), 결과를 "blur"라는 임시 버퍼에 저장합니다. "blur"는 필터 프리미티브 2와 3 모두의 입력으로 사용됩니다.

  2. 필터 프리미티브 feOffset는 "blur" 버퍼를 받아 x, y 모두 양의 방향으로 결과를 이동시키고 "offsetBlur"라는 새로운 버퍼를 만듭니다. 이 효과는 그림자 효과와 유사합니다.

  3. 필터 프리미티브 feSpecularLighting는 "blur" 버퍼를 표면 고도 모델로 사용하여 단일 점광원으로 라이팅 효과를 생성합니다. 결과는 "specOut" 버퍼에 저장됩니다.

  4. 필터 프리미티브 feComposite는 3번 필터의 결과를 원래 소스 그래픽의 알파 채널로 마스킹하여 중간 결과가 원래 소스 그래픽보다 크지 않도록 합니다.

  5. 필터 프리미티브 feComposite는 스펙큘러 라이팅의 결과를 원래 소스 그래픽과 합성합니다.

  6. 필터 프리미티브 feMerge는 두 레이어를 합성합니다. 하위 레이어는 2번 필터 프리미티브의 그림자 결과, 상위 레이어는 5번 필터 프리미티브의 스펙큘러 라이팅 결과로 구성됩니다.

2. 모듈 상호작용

이 명세는 해당 속성이 적용된 요소의 시각적 렌더링에 영향을 주는 일련의 CSS 속성을 정의합니다. 이러한 효과는 시각적 포맷팅 모델 [CSS21]에 따라 요소의 크기와 위치가 결정된 후에 적용됩니다. 이 속성의 일부 값은 포함 블록 및/또는 스태킹 컨텍스트를 생성합니다.

합성 모델은 SVG 합성 모델 [SVG11]을 따릅니다: 먼저 필터 효과가 적용되고, 그 다음 클리핑, 마스킹, 불투명도 [CSS3COLOR]가 적용됩니다. 이러한 모든 효과는 border [CSS3BG]와 같은 기타 CSS 효과 이후에 적용됩니다.

이 명세의 일부 속성 및 요소 정의는 SVG 1.1 구현 [SVG11]이 필요합니다. SVG를 지원하지 않는 UA는 color-interpolation-filters, flood-color, flood-opacity, lighting-color 속성과 filter 요소, feMergeNode 요소, 전이 함수 요소, 필터 프리미티브 요소를 구현해서는 안 됩니다.

3.

이 명세는 CSS 속성 정의 규칙 [CSS21]을 따릅니다. 이 명세에 정의되지 않은 값 유형은 CSS 값 및 단위 모듈 레벨 3 [CSS3VAL]에서 정의됩니다.

정의된 각 속성의 속성별 값 외에도, 이 명세에서 정의된 모든 속성은 inherit 키워드를 속성 값으로 허용합니다. 가독성을 위해 명시적으로 반복하지 않았습니다.

4. 용어

이 명세에서 사용되는 용어는 이 섹션에서 할당된 의미를 가집니다.

필터 프리미티브, filter-primitive

filter 요소의 출력을 제어하는 요소 집합으로, 특히 다음과 같습니다: feSpotLight, feBlend, feColorMatrix, feComponentTransfer, feComposite, feConvolveMatrix, feDiffuseLighting, feDisplacementMap, feDropShadow, feFlood, feGaussianBlur, feImage, feMerge, feMorphology, feOffset, feSpecularLighting, feTile, feTurbulence.

패스스루 필터

패스스루 필터의 출력은 필터 프리미티브의 주요 입력과 동일합니다.

5. 그래픽 필터: filter 속성

filter 속성의 설명은 다음과 같습니다:

이름: filter
값: none | <filter-value-list>
초기값: none
적용 대상: 모든 요소. SVG에서는 컨테이너 요소(defs 요소 제외), 모든 그래픽 요소use 요소에 적용됩니다.
상속됨: 아니오
백분율: 해당 없음
계산된 값: 명시된 대로
정식 순서: 문법에 따름
미디어: 시각적
애니메이션 가능: 필터 애니메이션의 본문 참조
<filter-value-list> = [ <filter-function> | <url> ]+
<url>

filter 요소에 대한 필터 참조입니다. 예: url(commonfilters.svg#filter). 필터가 존재하지 않는 객체를 참조하거나 참조된 객체가 filter 요소가 아닐 경우, 전체 필터 체인을 무시하고 아무 필터도 적용하지 않습니다.

<filter-function>

필터 함수 참조.

none

필터 효과가 적용되지 않습니다.

filter 속성이 none이 아닌 값을 가지면, 적용 대상 요소의 절대 및 고정 위치 자손에 대해 포함 블록을 생성하게 됩니다(단, 현재 브라우징 컨텍스트의 문서 루트 요소인 경우는 제외). 함수 목록은 제공된 순서대로 적용됩니다.

목록의 첫 번째 필터 함수 또는 filter 참조는 요소(SourceGraphic)를 입력 이미지로 사용합니다. 이후의 연산은 이전 필터 함수 또는 filter 참조의 출력을 입력 이미지로 사용합니다. filter 요소 참조 함수는 대체 입력을 지정할 수 있지만, 이전 출력은 여전히 SourceGraphic으로 사용됩니다.

color-interpolation-filters는 필터 함수에는 영향을 주지 않습니다. 필터 함수는 반드시 sRGB 색 공간에서 동작해야 합니다.

none이 아닌 계산된 값은 스태킹 컨텍스트 [CSS21]를 생성하며, CSS opacity와 동일한 방식으로 동작합니다. 모든 요소의 자손은 필터 효과가 그룹 전체에 적용된 상태로 함께 렌더링됩니다.

filter 속성은 대상 요소의 CSS 박스 기하에 아무런 영향을 주지 않으며, filter는 요소의 border box 밖에 페인팅을 발생시킬 수 있습니다.

개념적으로, 드로잉의 모든 부분은 필터 연산의 영향을 받습니다. 여기에는 필터가 적용된 요소의 콘텐츠, 배경, 테두리, 텍스트 장식, 윤곽선, 표시되는 스크롤 메커니즘과 자손의 해당 부분이 포함됩니다. 필터 연산은 요소의 로컬 좌표계에서 적용됩니다.

합성 모델은 SVG 합성 모델 [SVG11]을 따릅니다: 먼저 필터 효과가 적용되고, 그 다음 클리핑, 마스킹, 불투명도가 적용됩니다. SVG와 동일하게, filter 적용은 히트 테스트에 영향을 주지 않습니다.

filter 속성은 SVG 요소에 대한 프레젠테이션 속성입니다.

filter가 고정 배경 이미지에서 어떻게 동작하는가? <https://github.com/w3c/csswg-drafts/issues/238>

6. 필터 함수

6.1. 지원되는 필터 함수

<filter-function> = <blur()> | <brightness()> | <contrast()> | <drop-shadow()> |    
<grayscale()> | <hue-rotate()> | <invert()> | <opacity()> | <sepia()> | <saturate()>

별도의 정의가 없는 한, 생략된 값은 보간을 위해 초기값으로 기본 설정됩니다.

참고: 일부 필터 함수의 경우 생략된 값의 기본값이 보간을 위한 초기값과 다릅니다. 콘텐츠 제작자의 편의를 위해, <grayscale()>, <sepia()>, <invert()>의 생략된 값의 기본값은 1(효과 100% 적용)이지만, 보간을 위한 초기값0(효과 없음)입니다.

blur() = blur( <length>? )

입력 이미지에 가우시안 블러를 적용합니다. 전달된 매개변수는 가우시안 함수의 표준편차 값을 정의합니다. 이 매개변수는 CSS 길이로 지정되지만, 백분율 값은 허용되지 않습니다. 이 함수의 마크업 등가는 아래에 제시되어 있습니다.

음수 값은 허용되지 않습니다.

생략 시 기본값은 0px입니다.

보간을 위한 초기값0px입니다.

참고: 표준편차는 box-shadow의 blur radius와 다릅니다.

brightness() = brightness( <number-percentage>? )

입력 이미지에 선형 배율을 적용하여 더 밝거나 어둡게 만듭니다. 0% 값은 완전히 검은 이미지를 만듭니다. 100% 값은 입력을 변경하지 않습니다. 그 외 값은 효과에 선형 배율로 적용됩니다. 100%를 초과하는 값도 허용되어 더 밝게 만들 수 있습니다. 이 함수의 마크업 등가는 아래에 제시되어 있습니다.

음수 값은 허용되지 않습니다.

생략 시 기본값은 1입니다.

보간을 위한 초기값1입니다.

contrast() = contrast( <number-percentage>? )

입력 이미지의 대비를 조정합니다. 0% 값은 완전히 회색 이미지를 만듭니다. 100% 값은 입력을 변경하지 않습니다. 100%를 초과하는 값도 허용되어 더 높은 대비 결과를 얻을 수 있습니다. 이 함수의 마크업 등가는 아래에 제시되어 있습니다.

음수 값은 허용되지 않습니다.

생략 시 기본값은 1입니다.

보간을 위한 초기값1입니다.

drop-shadow() = drop-shadow( <color>? && <length>{2,3} )

입력 이미지에 그림자 효과를 적용합니다. 그림자는 입력 이미지의 알파 마스크를 특정 색상으로 블러 처리하여 오프셋된 버전으로 이미지를 아래에 합성하는 효과입니다. 값들은 box-shadow [CSS3BG]와 동일하게 해석되지만, 선택적 3번째 length 값은 blur radius 대신 표준편차가 됩니다. 이 함수의 마크업 등가는 아래에 제시되어 있습니다.

생략된 값의 기본값은 누락된 길이 값은 0이고, 사용된 색상 값이 없으면 color 속성에서 가져옵니다.

보간을 위한 초기값은 모든 길이 값이 0, 사용된 색상은 transparent입니다.

참고: spread 값이나 다중 그림자는 이 명세 레벨에서는 허용되지 않습니다.

참고: 표준편차는 box-shadow의 blur radius와 다릅니다.

grayscale() = grayscale( <number-percentage>? )

입력 이미지를 회색조로 변환합니다. 전달된 매개변수는 변환 비율을 정의합니다. 100% 값은 완전히 회색조로 변환합니다. 0% 값은 입력을 변경하지 않습니다. 0%~100% 사이 값은 효과에 선형 배율로 적용됩니다. 100%를 초과하는 값도 허용되지만 UA는 값을 1로 클램핑해야 합니다. 이 함수의 마크업 등가는 아래에 제시되어 있습니다.

음수 값은 허용되지 않습니다.

생략 시 기본값은 1입니다.

보간을 위한 초기값0입니다.

hue-rotate() = hue-rotate( [ <angle> | <zero> ]? )

입력 이미지의 색상(Hue)을 회전합니다. 전달된 매개변수는 색상 원에서 입력 샘플이 조정될 각도를 정의합니다. 0deg 값은 입력을 변경하지 않습니다. 구현은 360deg를 넘는 애니메이션을 허용하기 위해 이 값을 정규화하면 안 됩니다. 이 함수의 마크업 등가는 아래에 제시되어 있습니다.

단위 식별자는 angle 값이 0일 때 생략할 수 있습니다.

생략 시 기본값은 0deg입니다.

보간을 위한 초기값0deg입니다.

invert() = invert( <number-percentage>? )

입력 이미지의 샘플을 반전합니다. 전달된 매개변수는 변환 비율을 정의합니다. 100% 값은 완전히 반전합니다. 0% 값은 입력을 변경하지 않습니다. 0%~100% 사이 값은 효과에 선형 배율로 적용됩니다. 100%를 초과하는 값도 허용되지만 UA는 값을 1로 클램핑해야 합니다. 이 함수의 마크업 등가는 아래에 제시되어 있습니다.

음수 값은 허용되지 않습니다.

생략 시 기본값은 1입니다.

보간을 위한 초기값0입니다.

opacity() = opacity( <number-percentage>? )

입력 이미지 샘플에 투명도를 적용합니다. 전달된 매개변수는 변환 비율을 정의합니다. 0% 값은 완전히 투명하게 만듭니다. 100% 값은 입력을 변경하지 않습니다. 0%~100% 사이 값은 효과에 선형 배율로 적용됩니다. 이는 입력 이미지 샘플을 amount 값으로 곱하는 것과 동일합니다. 100%를 초과하는 값도 허용되지만 UA는 값을 1로 클램핑해야 합니다. 이 함수의 마크업 등가는 아래에 제시되어 있습니다.

음수 값은 허용되지 않습니다.

생략 시 기본값은 1입니다.

보간을 위한 초기값1입니다.

참고: opacity 필터 함수는 opacity 속성의 축약형이 아닙니다. 또한, 다음 필터 프리미티브로 전달하기 전에 중간 필터 프리미티브 결과의 투명도를 설정할 수 있습니다. opacity 필터 함수가 마지막 필터 프리미티브로 설정된 경우, opacity 속성 값이 필터 함수 값에 곱해져 더 투명한 콘텐츠를 만들 수 있습니다.

saturate() = saturate( <number-percentage>? )

입력 이미지의 채도를 증가시킵니다. 전달된 매개변수는 변환 비율을 정의합니다. 0% 값은 완전히 비채도(회색)로 변환합니다. 100% 값은 입력을 변경하지 않습니다. 그 외 값은 효과에 선형 배율로 적용됩니다. 100%를 초과하는 값도 허용되어 매우 채도가 높은 결과를 얻을 수 있습니다. 이 함수의 마크업 등가는 아래에 제시되어 있습니다.

음수 값은 허용되지 않습니다.

생략 시 기본값은 1입니다.

보간을 위한 초기값1입니다.

sepia() = sepia( <number-percentage>? )

입력 이미지를 세피아 톤으로 변환합니다. 전달된 매개변수는 변환 비율을 정의합니다. 100% 값은 완전히 세피아로 변환합니다. 0% 값은 입력을 변경하지 않습니다. 0%~100% 사이 값은 효과에 선형 배율로 적용됩니다. 100%를 초과하는 값도 허용되지만 UA는 값을 1로 클램핑해야 합니다. 이 함수의 마크업 등가는 아래에 제시되어 있습니다.

음수 값은 허용되지 않습니다.

생략 시 기본값은 1입니다.

보간을 위한 초기값0입니다.

6.2. 필터 함수의 계산된 값

<filter-function> 내 값은 다음 예외를 제외하고 명시된 대로 계산됩니다:

6.3. 필터 함수의 직렬화

<filter-function>을 직렬화할 때는 각 개별 문법에 따라 직렬화하고, 문법이 작성된 순서대로 직렬화하며, 가능하면 <calc()> 표현식을 피하고, 필터 인자는 명시된 대로 직렬화하며, <calc()> 변환을 피하며, 공백으로 분리된 토큰은 한 개의 공백으로 결합하고, 직렬화된 쉼표 뒤에는 한 개의 공백을 둡니다.

6.4. 필터 함수의 보간

<filter-function> 내 값의 보간을 위해, 아래 목록의 첫 번째로 일치하는 조건에 해당하는 단계를 실행해야 합니다:

<blur()>

값을 계산된 값 기준 길이로 보간합니다.

<brightness()>
<contrast()>
<grayscale()>
<invert()>
<opacity()>
<saturate()>
<sepia()>

백분율 값은 숫자로 변환되며, 0%는 0에, 100%는 1에 해당합니다. 값을 계산된 값 기준 숫자로 보간합니다.

<hue-rotate()>

값을 계산된 값 기준 숫자로 보간합니다.

<drop-shadow()>

값을 반복 가능한 리스트로 그림자 리스트로 보간합니다.

7. SVG 필터 소스: filter 요소

이름: filter
카테고리: 없음
콘텐츠 모델: 다음 요소들을 임의의 순서와 개수로 포함할 수 있음:
속성:
DOM 인터페이스: SVGFilterElement

filter 요소에 대한 설명은 다음과 같습니다:

<number-optional-number> = <number> <number>?

속성 정의:

filterUnits = "userSpaceOnUse | objectBoundingBox"

필터 영역 참조.

primitiveUnits = "userSpaceOnUse | objectBoundingBox"

필터 프리미티브필터 프리미티브 서브영역을 정의하는 다양한 길이 값의 좌표계를 지정합니다.

primitiveUnitsuserSpaceOnUse일 경우, 필터 정의 내의 모든 길이 값은 로컬 좌표계(즉, filter 요소를 filter 속성으로 참조하는 요소의 사용자 좌표계)에서의 값을 나타냅니다.

primitiveUnitsobjectBoundingBox일 경우, 필터 정의 내의 모든 길이 값은 참조 요소의 경계 상자의 분수 또는 백분율을 나타냅니다(object bounding box units 참조). <number-optional-number> 값에 숫자가 하나만 지정된 경우, 이 숫자는 primitiveUnits 계산 전에 확장됩니다.

primitiveUnits초기값userSpaceOnUse입니다.

애니메이션 가능: 예

x = "<length-percentage>"

필터 영역 참조.

y = "<length-percentage>"

필터 영역 참조.

width = "<length-percentage>"

필터 영역 참조.

height = "<length-percentage>"

필터 영역 참조.

filterRes = "<number-optional-number>"

filterRes 속성은 명세에서 제거되었습니다. 정의는 SVG 1.1 명세 [SVG11] 참조.

속성은 filter 요소에 상위 요소로부터 상속되며, filter 요소를 참조하는 요소로부터는 상속되지 않습니다.

filter 요소는 직접 렌더링되지 않습니다. 오직 filter 속성을 통해 참조될 때만 사용됩니다. display 속성은 filter 요소에는 적용되지 않으므로, filter 요소는 display 속성이 none이 아닌 값으로 설정되어 있어도 직접 렌더링되지 않으며, filter 요소나 그 상위 요소의 display 속성이 none으로 설정되어 있어도 참조에 사용 가능합니다.

8. 필터 영역

filter 요소는 캔버스에서 특정 필터 효과가 적용되는 필터 영역을 정의할 수 있으며, 래스터 기반 필터 프리미티브를 처리하는 데 사용되는 중간 연속 톤 이미지의 해상도를 제공할 수 있습니다. filter 요소에는 필터 영역을 정의하기 위해 함께 작동하는 다음 속성이 있습니다:

filterUnits

x, y, width, height 속성의 좌표계를 정의합니다.

filterUnitsuserSpaceOnUse이면, x, y, width, height 값은 filter 요소가 참조될 때의 현재 사용자 좌표계(즉, filter 요소를 filter 속성으로 참조하는 요소의 사용자 좌표계)를 나타냅니다.

filterUnitsobjectBoundingBox이면, x, y, width, height 값은 참조 요소의 경계 상자에 대한 분수 또는 백분율을 나타냅니다(object bounding box units 참조).

filterUnits초기값objectBoundingBox입니다.

애니메이션 가능: 예

x, y, width, height

이 속성들은 캔버스에서 이 필터가 적용되는 직사각형 영역을 정의합니다.

이 속성들의 좌표계는 filterUnits 속성 값에 따라 달라집니다.

이 직사각형의 경계는 해당 필터 프리미티브마다 강제 클리핑 영역으로 작동합니다. 따라서 특정 필터 프리미티브의 효과가 이 직사각형 경계를 넘어설 경우(예: feGaussianBlur 필터 프리미티브에서 stdDeviation 값을 크게 줄 때), 효과의 일부가 잘릴 수 있습니다.

xy초기값-10%입니다.

widthheight초기값120%입니다.

ng of the element which referenced the filter.

애니메이션 가능: 예

참고: filterUnits의 두 가지 가능한 값(즉, objectBoundingBoxuserSpaceOnUse) 모두 필터 영역의 좌표계 X축과 Y축이 필터가 적용될 요소의 로컬 좌표계의 X축과 Y축에 각각 평행하게 설정됩니다.

참고: 때때로 구현자는 필터 영역을 디바이스 픽셀에 직접 매핑할 수 있을 때 더 빠른 성능을 달성할 수 있습니다. 따라서 디스플레이 장치에서 최적의 성능을 얻으려면, 영역을 사용자 에이전트가 필터 영역을 배경과 픽셀 단위로 맞출 수 있도록 정의할 것을 권장합니다. 특히 필터 효과의 성능을 위해, 사용자 좌표계의 회전이나 기울임을 피하세요.

참고: 필터 효과가 객체의 경계 상자보다 약간 바깥쪽 비트에 영향을 줄 수 있으므로 패딩 공간을 제공해야 하는 경우가 많습니다. 이러한 목적을 위해 x, y에 음수 백분율 값을, width, height에는 100%를 초과하는 백분율 값을 제공할 수 있습니다. 예를 들어 필터 영역의 기본값이 x="-10%" y="-10%" width="120%" height="120%"인 이유입니다.

9. 필터 프리미티브

9.1. 개요

이 섹션에서는 특정 필터 효과를 달성하기 위해 조합할 수 있는 다양한 필터 프리미티브를 설명합니다.

별도의 언급이 없는 한, 모든 이미지 필터는 프리멀티플라이드 RGBA 샘플에 대해 동작합니다. feColorMatrixfeComponentTransfer와 같은 일부 필터는 비프리멀티플라이드 데이터에서 더 자연스럽게 동작합니다. 필터 작동 동안 모든 색상 값은 해당 필터의 색상 곱셈 방식에 맞게 임시로 변환되어야 합니다.

참고: 모든 입력 이미지는 프리멀티플라이드 RGBA로 가정합니다. 사용자 에이전트는 비프리멀티플라이드 데이터 버퍼링을 통해 성능을 최적화할 수 있습니다.

모든 래스터 효과 필터링 작업은 1~N개의 입력 RGBA 이미지, 추가 속성(매개변수), 그리고 하나의 출력 RGBA 이미지를 생성합니다.

각 필터 프리미티브의 RGBA 결과는 색상 및 불투명도 값의 허용 범위 내로 클램핑됩니다. 예를 들어, 필터 프리미티브의 결과가 음수 색상 값이나 불투명도 값을 가지면 해당 값은 0으로 조정됩니다.

특정 필터 프리미티브가 동작하는 색상 공간은 해당 필터 프리미티브color-interpolation-filters 속성 값에 의해 결정됩니다. color-interpolation이라는 다른 속성이 기타 색상 연산의 색상 공간을 결정합니다. 이 두 속성이 서로 다른 초기값(color-interpolation-filterslinearRGB, color-interpolationsRGB)을 가지므로, 특정 결과(예: 그라디언트 보간과 필터링 연산을 조정할 때)를 얻기 위해 color-interpolationlinearRGB로, 또는 color-interpolation-filterssRGB로 명시적으로 설정해야 할 수도 있습니다. 아래 예시에서는 color-interpolation이나 color-interpolation-filters를 명시적으로 설정하지 않았으므로, 해당 속성의 초기값이 적용됩니다.

때로는 필터 프리미티브가 정의되지 않은 픽셀을 생성할 수 있습니다. 예를 들어 feOffset 필터 프리미티브는 이미지를 아래쪽과 오른쪽으로 이동시켜 위쪽과 왼쪽에 정의되지 않은 픽셀이 남을 수 있습니다. 이 경우 정의되지 않은 픽셀은 투명한 검은색으로 설정됩니다.

고품질 렌더링을 제공하기 위해 모든 필터 프리미티브는 디바이스 종속 좌표 공간인 작동 좌표 공간에서 동작해야 하며, 디바이스 픽셀 밀도, 사용자 공간 변환과 확대/축소를 고려해야 합니다. 플랫폼 독립적 정렬을 제공하기 위해 속성과 속성 값은 종종 primitiveUnits 속성으로 설명되는 좌표계에 상대적으로 지정됩니다. 사용자 에이전트는 이러한 상대적 속성과 속성 값을 작동 좌표 공간에 맞게 스케일링해야 합니다.

참고: 고해상도 디바이스에서는 primitiveUnits에 상대적인 속성과 속성 값을 보통 확장해야 합니다. 사용자 에이전트는 플랫폼 리소스가 제한적일 경우 필터 프리미티브의 해상도를 낮출 수 있습니다.

참고: feConvolveMatrix광원 필터 프리미티브의 일부 속성 또는 속성 값은 primitiveUnits 속성으로 정의된 좌표계에서 작동 좌표 공간으로 매핑할 수 없습니다.

9.2. 공통 필터 프리미티브 속성

다음 필터 프리미티브 속성은 모든 필터 프리미티브에 사용할 수 있습니다:

속성 정의:

x = "<length-percentage>"

해당 필터 프리미티브의 계산 및 렌더링을 제한하는 서브영역의 최소 x 좌표입니다. 필터 프리미티브 서브영역 참조.

x초기값0%입니다.

애니메이션 가능: 예

y = "<length-percentage>"

해당 필터 프리미티브의 계산 및 렌더링을 제한하는 서브영역의 최소 y 좌표입니다. 필터 프리미티브 서브영역 참조.

y초기값0%입니다.

애니메이션 가능: 예

width = "<length-percentage>"

해당 필터 프리미티브의 계산 및 렌더링을 제한하는 서브영역의 너비입니다. 필터 프리미티브 서브영역 참조.

음수 값이나 0 값은 해당 필터 프리미티브의 효과를 비활성화합니다(즉, 결과는 투명한 검은 이미지가 됩니다).

width초기값100%입니다.

애니메이션 가능: 예

height = "<length-percentage>"

해당 필터 프리미티브의 계산 및 렌더링을 제한하는 서브영역의 높이입니다. 필터 프리미티브 서브영역 참조.

음수 값 또는 0 값은 해당 필터 프리미티브의 효과를 반드시 비활성화해야 합니다(즉, 결과는 투명한 검은 이미지가 됩니다).

height초기값100%입니다.

애니메이션 가능: 예

result = "<filter-primitive-reference>"

<filter-primitive-reference><custom-ident> [CSS3VAL]이며, 해당 필터 프리미티브에 할당된 이름입니다. 만약 지정된다면, 해당 필터 프리미티브에서 처리된 그래픽은 동일 filter 요소 내의 후속 필터 프리미티브의 in 속성에서 참조할 수 있습니다. 값이 없으면 해당 출력은 다음 필터 프리미티브에서 filter primitivein 속성이 없을 때에만 암시적으로 입력으로 사용됩니다.

대부분의 필터 프리미티브는 다른 필터 프리미티브를 입력으로 받습니다. 다음 속성은 다른 필터 프리미티브를 참조하는 모든 입력 속성에서 대표적으로 사용됩니다:

속성 정의:

in = "SourceGraphic | SourceAlpha | BackgroundImage | BackgroundAlpha | FillPaint | StrokePaint | <filter-primitive-reference>"

해당 필터 프리미티브의 입력을 식별합니다. 값은 6개의 키워드 중 하나거나, 같은 filter 요소 내에서 이전 result 속성 값과 일치하는 문자열일 수 있습니다. 값이 없고 이것이 첫 번째 필터 프리미티브라면, 해당 필터 프리미티브SourceGraphic을 입력으로 사용합니다. 값이 없고 이것이 후속 필터 프리미티브라면, 해당 필터 프리미티브는 이전 필터 프리미티브의 결과를 입력으로 사용합니다.

result 값이 같은 filter 요소 내 여러 번 등장하면, 해당 결과에 대한 참조는 가장 가까운 앞의 필터 프리미티브result 값을 사용합니다.

결과에 대한 순방향 참조는 허용되지 않으며, 결과가 지정되지 않은 것으로 처리됩니다.

존재하지 않는 결과에 대한 참조도 결과가 지정되지 않은 것으로 처리됩니다.

6개의 키워드 정의:

SourceGraphic

이 키워드는 filter 요소에 원래 입력된 그래픽 요소를 나타냅니다. 래스터 효과 필터 프리미티브의 경우, 그래픽 요소는 이미지 공간의 RGBA 래스터로 래스터화됩니다. 원래 그래픽에 의해 영향을 받지 않은 픽셀은 클리어 상태로 남습니다. 이미지는 선형 RGBA 픽셀로 렌더링되어야 하며, 알파 채널은 SVG에서 지정된 안티앨리어싱을 캡처합니다(래스터가 선형이므로 알파 채널은 각 픽셀의 정확한 커버리지 비율을 나타냄).

SourceAlpha

이 키워드는 filter 요소에 원래 입력된 그래픽 요소를 나타냅니다. SourceAlphaSourceGraphic과 동일한 규칙을 따르지만 알파 채널만 사용합니다. 입력 이미지는 RGB 채널은 암시적으로 검은색이고, 알파 채널만 SourceGraphic과 동일한 RGBA 이미지입니다.

참고: 이 옵션을 사용할 경우, 일부 구현은 알파 채널을 추출하기 위해 그래픽 요소를 래스터화해야 할 수 있습니다.

BackgroundImage

이 키워드는 필터 영역 뒤의 현재 격리 그룹에서 filter 요소가 호출될 때 정의된 백드롭을 나타냅니다. isolation 속성 [COMPOSITING-1] 참조.

BackgroundAlpha

BackgroundImage와 동일하나 알파 채널만 사용합니다. SourceAlphaisolation 속성 [COMPOSITING-1] 참조.

FillPaint

이 키워드는 필터 효과 대상 요소의 fill 속성의 값을 나타냅니다. FillPaint 이미지는 개념적으로 무한 크기를 가집니다. 이 이미지는 대부분 모든 영역이 불투명하지만, "페인트" 자체에 알파가 포함된 경우(예: 투명 또는 반투명 부분이 포함된 그라디언트 또는 패턴)에는 다를 수 있습니다. fill이 페인트 서버를 참조하면, 페인트 서버의 좌표계는 필터링된 객체에 대해 정의됩니다. 예를 들어 페인트 서버가 객체의 objectBoundingBox를 요구하면, 필터링된 객체의 경계 상자가 페인트 서버의 기준 크기를 정의합니다. 페인트 서버가 userSpaceOnUse를 요구하면, 해당 객체의 로컬 좌표계에서 가장 가까운 뷰포트가 페인트 서버의 기준 크기를 정의합니다.

StrokePaint

이 키워드는 필터 효과 대상 요소의 stroke 속성의 값을 나타냅니다. StrokePaint 이미지는 개념적으로 무한 크기를 가집니다. 자세한 내용은 위 FillPaint 참조.

애니메이션 가능: 예

9.3. 필터 프리미티브 트리

입력이 없거나 하나인 필터 프리미티브들은 필터 체인으로 연결할 수 있습니다. 예를 들어, <filter-value-list>에 두 개 이상의 <filter-function>가 있을 때의 필터 프리미티브 표현은 필터 체인의 예시입니다. 모든 필터 프리미티브는 이전 필터 프리미티브의 결과를 입력으로 받습니다.

filter 요소와 그 필터 프리미티브 자식의 간단한 예시.
<filter id="filter">
  <feColorMatrix type="hueRotate" values="45"/>
  <feOffset dx="10" dy="10"/>
  <feGaussianBlur stdDeviation="3"/>
</filter>

feColorMatrix, feOffset, feGaussianBlur는 필터 체인을 생성합니다.

feColorMatrixSourceGraphic을 입력으로 받습니다. 그 결과가 feOffset의 입력이 되고, 그 결과가 feGaussianBlur의 입력이 됩니다.

일부 필터 프리미티브는 두 개 이상의 필터 프리미티브 입력을 가질 수 있습니다. inresult 속성을 사용하면 여러 필터 프리미티브를 결합하여 복잡한 필터 구조를 만들 수 있습니다. 순방향 참조 제한 때문에, 모든 필터 구조는 트리, 즉 필터 프리미티브 트리로 표현할 수 있습니다. 필터 프리미티브 트리의 루트 필터 프리미티브는 filter 요소의 필터 프리미티브 자식 중 가장 마지막 프리미티브입니다.

필터 체인은 필터 프리미티브 트리로도 표현할 수 있는 필터 구조 중 하나입니다. 따라서 이후로 필터 체인은 필터 프리미티브 트리로 지칭됩니다.

filter 요소는 하나 이상의 필터 프리미티브 트리를 가질 수 있습니다. 후속 필터 프리미티브가 해당 filter 요소의 마지막 필터 프리미티브 자식인 트리가 주 필터 프리미티브 트리입니다.

오직 주 필터 프리미티브 트리만 필터 처리에 기여합니다. 구현은 다른 모든 가능한 필터 프리미티브 트리를 무시할 수 있습니다.

filter 요소에 필터 프리미티브 트리가 없으면 필터가 적용된 요소는 렌더링되지 않습니다.

다중 필터 프리미티브 트리의 예시:
<filter id="filter">
  <-- The first filter primitive tree. Ignored for filter process. -->
  <feColorMatrix type="hueRotate" values="45"/>
  <feOffset dx="10" dy="10"/>
  <feGaussianBlur stdDeviation="3"/>
  <-- The primary filter primitive tree. -->
  <feFlood flood-color="green" result="flood"/>
  <feComposite operator="in" in="SourceAlpha" in2="flood"/>
</filter>

위 필터에는 아래와 같이 두 개의 필터 프리미티브 트리가 있습니다:

  1. feColorMatrix, feOffset, feGaussianBlur (여기서 feGaussianBlur가 트리의 루트 필터 프리미티브) 그리고

  2. feFlood, feComposite (여기서 feComposite가 트리의 루트 필터 프리미티브)

두 필터 프리미티브 트리는 연결되어 있지 않습니다. 오직 두 번째, 즉 주 필터 프리미티브 트리만 필터 처리에 기여합니다. 첫 번째 트리는 구현에 따라 무시될 수 있습니다.

9.4. 필터 프리미티브 서브영역

모든 필터 프리미티브x, y, width, height 속성을 가지며, 이들이 모여 해당 필터 프리미티브 서브영역을 식별합니다. 이 서브영역은 해당 필터 프리미티브의 계산 및 렌더링을 제한합니다. x, y, width, height 속성은 다른 필터 프리미티브의 좌표 및 길이 속성과 동일한 규칙에 따라 정의되며, 따라서 primitiveUnits 속성이 설정한 좌표계의 값을 나타냅니다(filter 요소 기준).

x, y, width, height 속성은 모든 참조된 노드의 서브영역 합집합(즉, 가장 타이트하게 맞는 경계 상자)으로 기본 설정됩니다. 참조 노드가 없는 경우(예: feImage 또는 feTurbulence), 또는 참조 노드가 표준 입력(예: SourceGraphic, SourceAlpha, BackgroundImage, BackgroundAlpha, FillPaint, StrokePaint)이거나, feTile의 경우(참조 노드를 X, Y로 복제하여 더 큰 결과를 만드는 것이 주 기능이므로), 기본 서브영역은 0%, 0%, 100%, 100%입니다. 이때 백분율은 필터 영역의 크기를 기준으로 하며, 기본 필터 프리미티브 서브영역필터 영역과 동일하게 됩니다.

필터 프리미티브 서브영역의 너비나 높이가 음수 또는 0이면 해당 필터 프리미티브의 효과가 비활성화됩니다.

필터 영역은 필터 프리미티브의 입력 이미지에 하드 클리핑 사각형으로 동작합니다.

필터 프리미티브 서브영역은 필터 프리미티브 결과에 하드 클리핑 사각형으로 동작합니다.

모든 중간 오프스크린은 필터 프리미티브 서브영역필터 영역의 교집합을 넘지 않도록 정의되어야 합니다. 필터 영역과 각 필터 프리미티브 서브영역은 모든 오프스크린이 필터 영역 또는 필터 프리미티브 서브영역과 부분적으로라도 겹치는 모든 픽셀을 포함할 만큼 충분히 크게 설정되어야 합니다.

feTile은 이전 필터 프리미티브를 참조한 후, 참조된 필터 프리미티브의 필터 프리미티브 서브영역을 기반으로 타일을 연결하여 자신의 필터 프리미티브 서브영역을 채웁니다.
<svg width="400" height="400" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <filter id="flood" x="0" y="0" width="100%" height="100%" primitiveUnits="objectBoundingBox">
       <feFlood x="25%" y="25%" width="50%" height="50%"
          flood-color="green" flood-opacity="0.75"/>
    </filter>
    <filter id="blend" primitiveUnits="objectBoundingBox">
       <feBlend x="25%" y="25%" width="50%" height="50%"
          in2="SourceGraphic" mode="multiply"/>
    </filter>
    <filter id="merge" primitiveUnits="objectBoundingBox">
       <feMerge x="25%" y="25%" width="50%" height="50%">
        <feMergeNode in="SourceGraphic"/>
        <feMergeNode in="FillPaint"/>
       </feMerge>
    </filter>
  </defs>

  <g fill="none" stroke="blue" stroke-width="4">
     <rect width="200" height="200"/>
     <line x2="200" y2="200"/>
     <line x1="200" y2="200"/>
  </g>
  <circle fill="green" filter="url(#flood)" cx="100" cy="100" r="90"/>

  <g transform="translate(200 0)">
    <g fill="none" stroke="blue" stroke-width="4">
       <rect width="200" height="200"/>
       <line x2="200" y2="200"/>
       <line x1="200" y2="200"/>
    </g>
    <circle fill="green" filter="url(#blend)" cx="100" cy="100" r="90"/>
  </g>

  <g transform="translate(0 200)">
    <g fill="none" stroke="blue" stroke-width="4">
       <rect width="200" height="200"/>
       <line x2="200" y2="200"/>
       <line x1="200" y2="200"/>
    </g>
    <circle fill="green" fill-opacity="0.5" filter="url(#merge)" cx="100" cy="100" r="90"/>
  </g>
</svg>
Example for subregions

서브영역 예시

이 예제를 SVG로 보기

위 예시에서는 세 개의 사각형이 각각 십자와 원을 가지고 있습니다. 각 원 요소에는 다른 필터가 적용되어 있지만 모두 동일한 필터 프리미티브 서브영역을 사용합니다. 필터 출력은 반드시 필터 프리미티브 서브영역으로 제한되어야 하므로, 실제로 원 자체는 보이지 않고 필터 프리미티브 서브영역을 구성하는 사각형만 보여야 합니다.

9.5. 필터 프리미티브 feBlend

이름: feBlend
카테고리: 필터 프리미티브
콘텐츠 모델: 임의의 개수의 서술적 요소, animate, script, set 요소들을 임의의 순서로 포함 가능
속성:
DOM 인터페이스: SVGFEBlendElement

이 필터는 일반적으로 사용되는 이미지 소프트웨어의 블렌드 모드를 사용하여 두 개체를 함께 혼합합니다. 두 입력 이미지를 픽셀 단위로 결합합니다. (자세한 내용은 [COMPOSITING-1] 참조.)

속성 정의:

mode = "<blend-mode>"

“Compositing and Blending Level 1” [COMPOSITING-1]에서 정의된 블렌드 모드 중 하나를 사용합니다. 입력 in은 소스 Cs를, 두 번째 입력 in2배경 Cb를 나타냅니다. 이 필터 프리미티브의 출력 CmCsCb를 혼합한 결과입니다.

mode초기값normal입니다.

애니메이션 가능: 예

no-composite = "no-composite"

no-composite 속성이 있으면, 지정된 블렌드 모드는 알파 합성을 적용하지 않습니다. “혼합” 공식에서 합성 없이 사용하는 방법은 Blending [COMPOSITING-1]을 참조하세요. 그렇지 않으면, 구현은 mode로 지정된 블렌드 모드를 Source Over 합성 연산자와 결합해야 합니다. 합성 포함 “혼합” 공식은 Blending [COMPOSITING-1]을 참조하세요.

참고: 이 속성은 SVG 1.1에서 feBlend 요소 정의에 추가된 것입니다. no-composite가 지정되면, 필터링된 객체의 배경과 입력 소스를 혼합할 때 “이중 합성” 효과를 방지하기 위한 것입니다(예: BackgroundImage 필터 프리미티브 사용 시). 대부분의 사용 사례에서는 no-composite 속성을 명시할 필요가 없습니다.

애니메이션 가능: 아니오

in2 = "(in 속성 참조)"

블렌딩 연산에 사용되는 두 번째 입력 이미지입니다.

애니메이션 가능: 예

normal 블렌드 모드(알파 합성 포함)는 feComposite 필터 프리미티브에서 operator="over"와 동등하며, feMerge의 블렌딩 방식과도 같고, 필터 효과 외의 SVG에서 사용되는 단순 알파 합성 방식과도 일치합니다.

<svg width="5cm" height="5cm" viewBox="0 0 500 500"
     xmlns="http://www.w3.org/2000/svg">
  <title>예제 feBlend - feBlend 모드 예제</title>
  <desc>다섯 개의 텍스트 문자열이 그라디언트에 블렌딩되어 있으며,
        각 feBlend 모드에 하나씩 텍스트 문자열이 있습니다.</desc>
  <defs>
    <linearGradient id="MyGradient" gradientUnits="userSpaceOnUse"
            x1="100" y1="0" x2="300" y2="0">
      <stop offset="0" stop-color="#000000" />
      <stop offset=".33" stop-color="#ffffff" />
      <stop offset=".67" stop-color="#ff0000" />
      <stop offset="1" stop-color="#808080" />
    </linearGradient>
    <filter id="Normal">
      <feBlend mode="normal" in2="BackgroundImage" in="SourceGraphic"/>
    </filter>
    <filter id="Multiply">
      <feBlend mode="multiply" in2="BackgroundImage" in="SourceGraphic"/>
    </filter>
    <filter id="Screen">
      <feBlend mode="screen" in2="BackgroundImage" in="SourceGraphic"/>
    </filter>
    <filter id="Darken">
      <feBlend mode="darken" in2="BackgroundImage" in="SourceGraphic"/>
    </filter>
    <filter id="Lighten">
      <feBlend mode="lighten" in2="BackgroundImage" in="SourceGraphic"/>
    </filter>
  </defs>
  <rect fill="none" stroke="blue"
        x="1" y="1" width="498" height="498"/>
  <g isolation="isolate" >
    <rect x="100" y="20" width="300" height="460" fill="url(#MyGradient)" />
    <g font-family="Verdana" font-size="75" fill="#888888" fill-opacity=".6" >
      <text x="50" y="90" filter="url(#Normal)" >Normal</text>
      <text x="50" y="180" filter="url(#Multiply)" >Multiply</text>
      <text x="50" y="270" filter="url(#Screen)" >Screen</text>
      <text x="50" y="360" filter="url(#Darken)" >Darken</text>
      <text x="50" y="450" filter="url(#Lighten)" >Lighten</text>
    </g>
  </g>
</svg>
Example of feBlend

feBlend 예시

이 예제를 SVG로 보기

9.6. 필터 프리미티브 feColorMatrix

이름: feColorMatrix
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소, 순서 무관.
속성:
DOM 인터페이스: SVGFEColorMatrixElement

이 필터는 행렬 변환을 적용합니다:

R ' G ' B ' A ' 1 = a 00 a 01 a 02 a 03 a 04 a 10 a 11 a 12 a 13 a 14 a 20 a 21 a 22 a 23 a 24 a 30 a 31 a 32 a 33 a 34 0 0 0 0 1 R G B A 1 left [ stack {R' # G' # B' # A' # 1} right ] = left [ matrix { a_00 # a_01 # a_02 # a_03 # a_04 ## a_10 # a_11 # a_12 # a_13 # a_14 ## a_20 # a_21 # a_22 # a_23 # a_24 ## a_30 # a_31 # a_32 # a_33 # a_34 ## 0 # 0 # 0 # 0 # 1 } right ] cdot left[ stack { R # G # B # A # 1 } right]

입력 그래픽의 각 픽셀의 RGBA 색상 및 알파 값에 대해 새로운 RGBA 색상 및 알파 값 세트를 생성합니다.

계산은 비프리멀티플라이드 색상 값에 대해 수행됩니다.

속성 정의:

type = "matrix | saturate | hueRotate | luminanceToAlpha"

행렬 연산의 종류를 지정합니다. matrix 키워드는 전체 5x4 행렬 값을 제공해야 함을 의미합니다. 나머지 키워드들은 완전한 행렬을 지정하지 않아도 자주 사용되는 색상 연산을 편리하게 수행할 수 있도록 하는 단축키 역할을 합니다.

type초기값matrix입니다.

애니메이션 가능: 예

values = "list of <number>s"

values의 내용은 type 속성 값에 따라 달라집니다:

  • type="matrix"의 경우, values는 20개의 행렬 값(a00 a01 a02 a03 a04 a10 a11 ... a34) 목록입니다. 값은 공백 또는 쉼표로 구분됩니다. 예를 들어, 항등 행렬은 다음과 같이 표현할 수 있습니다:

    type="matrix"
    values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 1 0"
  • type="saturate"의 경우, values는 단일 실수 값입니다. saturate 연산은 다음과 같은 행렬 연산과 같습니다:

    R ' G ' B ' A ' 1 = 0.213 + 0.787s 0.715 0.715s 0.072 0.072s 0 0 0.213 0.213s 0.715 + 0.285s 0.072 0.072s 0 0 0.213 0.213s 0.715 0.715s 0.072 + 0.928s 0 0 0 0 0 1 0 0 0 0 0 1 R G B A 1 left [ stack {R' # G' # B' # A' # 1} right ] = left [ matrix { 0.213 + 0.787s # 0.715 - 0.715s # 0.072 - 0.072s # 0 # 0 ## 0.213 - 0.213s # 0.715 + 0.285s # 0.072 - 0.072s # 0 # 0 ## 0.213 - 0.213s # 0.715 - 0.715s # 0.072 + 0.928s # 0 # 0 ## 0 # 0 # 0 # 1 # 0 ## 0 # 0 # 0 # 0 # 1 } right ] cdot left[ stack { R # G # B # A # 1 } right]

    참고: 0 값을 지정하면 완전히 탈채(그레이스케일)된 필터 결과가 생성되며, 1 값을 지정하면 입력 이미지를 변경 없이 그대로 전달합니다. 0~1 범위를 벗어난 값은 입력 이미지의 채도를 감소 또는 증가시킵니다.

    참고: 명도 계수의 정밀도가 이전 명세 텍스트 [Cmam]에 비해 증가했습니다.

  • type="hueRotate"의 경우, values는 하나의 실수 값(도 단위)입니다. hueRotate 연산은 다음 행렬 연산과 동일합니다:

    R ' G ' B ' A ' 1 = a 00 a 01 a 02 0 0 a 10 a 11 a 12 0 0 a 20 a 21 a 22 0 0 0 0 0 1 0 0 0 0 0 1 R G B A 1 left [ stack {R' # G' # B' # A' # 1} right ] = left [ matrix { a_00 # a_01 # a_02 # 0 # 0 ## a_10 # a_11 # a_12 # 0 # 0 ## a_20 # a_21 # a_22 # 0 # 0 ## 0 # 0 # 0 # 1 # 0 ## 0 # 0 # 0 # 0 # 1 } right ] cdot left[ stack { R # G # B # A # 1 } right]

    a00, a01 등과 같은 항의 계산 방법은 다음과 같습니다:

    a 00 a 01 a 02 a 10 a 11 a 12 a 20 a 21 a 22 = + 0.213 + 0.715 + 0.072 + 0.213 + 0.715 + 0.072 + 0.213 + 0.715 + 0.072 + cos ( hueRotate value ) + 0.787 0.715 0.072 0.213 + 0.285 0.072 0.213 0.715 + 0.928 + sin ( hueRotate value ) 0.213 0.715 + 0.928 + 0.143 + 0.140 0.283 0.787 + 0.715 + 0.072 left[ matrix { a_00 # a_01 # a_02 ## a_10 # a_11 # a_12 ## a_20 # a_21 # a_22 } right] = left[ matrix { +0.213 # +0.715 # +0.072 ## +0.213 # +0.715 # +0.072 ## +0.213 # +0.715 # +0.072 } right] + cos(hueRotate value)cdot left[ matrix { +0.787 # -0.715 # -0.072 ## -0.213 # +0.285 # -0.072 ## -0.213 # -0.715 # +0.928 } right] + sin(hueRotate value) cdot left[ matrix { -0.213 # -0.715 # +0.928 ## +0.143 # +0.140 # -0.283 ## -0.787 # +0.715 # +0.072 } right]

    따라서 hue 행렬의 좌상단 항(a00)은 다음과 같이 계산됩니다:

    a 00 = 0.2127 + cos ( hueRotate value ) 0.7873 sin ( hueRotate value ) 0.2127 a_00 = 0.2127 + cos(hueRotate value) cdot 0.7873 - sin(hueRotate value) cdot 0.2127
  • type="luminanceToAlpha"의 경우, values는 적용되지 않습니다. luminanceToAlpha 연산은 다음 행렬 연산과 동일합니다:

    R ' G ' B ' A ' 1 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 0 1 R G B A 1 left [ stack {R' # G' # B' # A' # 1} right ] = left [ matrix { 0 # 0 # 0 # 0 # 0 ## 0 # 0 # 0 # 0 # 0 ## 0 # 0 # 0 # 0 # 0 ## 0.2126 # 0.7152 # 0.0722 # 0 # 0 ## 0 # 0 # 0 # 0 # 1 } right ] cdot left[ stack { R # G # B # A # 1 } right]

초기값에 대한 values

만약 type="matrix"

기본값은 항등 행렬입니다.

만약 type="saturate"

기본값은 1 입니다.

만약 type="hueRotate"

기본값은 0이며 이는 항등 행렬을 생성합니다.

values 목록의 항목 개수가 type에 필요한 항목 수와 맞지 않으면, 해당 필터 프리미티브는 통과 필터로 동작합니다.

애니메이션 가능: 예

<svg width="8cm" height="5cm" viewBox="0 0 800 500"
     xmlns="http://www.w3.org/2000/svg">
  <title>feColorMatrix 예시 - feColorMatrix 동작 예시</title>
  <desc>feColorMatrix의 효과를 보여주는 5개의 텍스트 문자열:
        필터가 적용되지 않은 참조용 텍스트,
        feColorMatrix의 matrix 옵션을 사용한 그레이스케일 변환,
        feColorMatrix의 saturate 옵션 사용,
        feColorMatrix의 hueRotate 옵션 사용,
        그리고 feColorMatrix의 luminanceToAlpha 옵션 사용.</desc>
  <defs>
    <linearGradient id="MyGradient" gradientUnits="userSpaceOnUse"
            x1="100" y1="0" x2="500" y2="0">
      <stop offset="0" stop-color="#ff00ff" />
      <stop offset=".33" stop-color="#88ff88" />
      <stop offset=".67" stop-color="#2020ff" />
      <stop offset="1" stop-color="#d00000" />
    </linearGradient>
    <filter id="Matrix" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feColorMatrix type="matrix" in="SourceGraphic"
           values=".33 .33 .33 0 0
                   .33 .33 .33 0 0
                   .33 .33 .33 0 0
                   .33 .33 .33 0 0"/>
    </filter>
    <filter id="Saturate40" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feColorMatrix type="saturate" in="SourceGraphic" values="0.4"/>
    </filter>
    <filter id="HueRotate90" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feColorMatrix type="hueRotate" in="SourceGraphic" values="90"/>
    </filter>
    <filter id="LuminanceToAlpha" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feColorMatrix type="luminanceToAlpha" in="SourceGraphic" result="a"/>
      <feComposite in="SourceGraphic" in2="a" operator="in" />
    </filter>
  </defs>
  <rect fill="none" stroke="blue"
        x="1" y="1" width="798" height="498"/>
  <g font-family="Verdana" font-size="75"
            font-weight="bold" fill="url(#MyGradient)" >
    <rect x="100" y="0" width="500" height="20" />
    <text x="100" y="90">Unfiltered</text>
    <text x="100" y="190" filter="url(#Matrix)" >Matrix</text>
    <text x="100" y="290" filter="url(#Saturate40)" >Saturate</text>
    <text x="100" y="390" filter="url(#HueRotate90)" >HueRotate</text>
    <text x="100" y="490" filter="url(#LuminanceToAlpha)" >Luminance</text>
  </g>
</svg>
예시

feColorMatrix 예시

이 예시를 SVG로 보기

9.7. 필터 프리미티브 feComponentTransfer

이름: feComponentTransfer
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 설명 요소, feFuncR, feFuncG, feFuncB, feFuncA, script 요소, 순서 무관.
속성:
DOM 인터페이스: SVGFEComponentTransferElement

이 필터 프리미티브는 다음과 같이 컴포넌트별 리매핑을 수행합니다:

R' = feFuncR( R )G' = feFuncG( G )
B' = feFuncB( B )
A' = feFuncA( A )

모든 픽셀에 대해 적용됩니다. 밝기 조정, 대비 조정, 색상 밸런스, 임계값 처리 등의 작업을 수행할 수 있습니다.

계산은 비프리멀티플라이드 색상 값에 대해 수행됩니다.

feComponentTransfer 요소의 자식 요소들은 네 채널에 대한 전이 함수를 지정합니다:

feFuncR, feFuncG, feFuncB, feFuncA 요소 집합을 전이 함수 요소라고도 합니다.

feComponentTransfer 요소 처리에는 다음 규칙이 적용됩니다:

9.7.1. 전이 함수 feFuncR

이름: feFuncR
카테고리: 전이 함수 요소
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소, 순서 무관.
속성:
DOM 인터페이스: SVGFEFuncRElement

아래 속성들은 전이 함수 요소 속성이며, 전이 함수 요소에 적용됩니다.

속성 정의:

type = "identity | table | discrete | linear | gamma"

컴포넌트 전이 함수의 유형을 지정합니다. 함수의 유형에 따라 다른 속성의 적용 가능성이 결정됩니다.

다음에서 C는 초기 컴포넌트(예: feFuncR), C'는 리매핑된 컴포넌트이며, 둘 다 [0,1]의 닫힌 구간에 있습니다.

  • identity의 경우:

    C' = C
  • table의 경우, 함수는 속성 tableValues에 지정된 값들 사이의 선형 보간으로 정의됩니다. 테이블에는 n+1개의 값(v0부터 vn까지)이 있으며, n개의 동일 크기 보간 영역의 시작과 끝 값을 지정합니다. 보간은 다음 수식을 사용합니다:

    C < 1일 때 k를 찾습니다:

    k/n <= C < (k+1)/n

    결과 C'는 다음과 같습니다:

    C' = vk + (C - k/n)*n * (vk+1 - vk)

    C = 1이면:

    C' = vn.

  • discrete의 경우, 함수는 속성 tableValues에 지정된 스텝 함수로 정의되며, n개의 값(v0부터 vn-1까지)이 n개의 스텝으로 구성된 스텝 함수를 나타냅니다. 스텝 함수는 다음 수식으로 정의됩니다:

    C < 1일 때 k를 찾습니다:

    k/n <= C < (k+1)/n

    결과 C'는 다음과 같습니다:

    C' = vk

    C = 1이면:

    C' = vn-1.

  • linear의 경우, 함수는 다음과 같은 선형 방정식으로 정의됩니다:

    C' = slope * C + intercept

  • gamma의 경우, 함수는 다음과 같은 지수 함수로 정의됩니다:

    C' = amplitude * pow(C, exponent) + offset

초기값에 대한 typeidentity입니다.

애니메이션 가능: 예

tableValues = "(<number> 목록)"

type="table"일 때, <number>들의 목록 v0,v1,...vn이 공백 또는 쉼표로 구분되어 있으며, 조회 테이블을 정의합니다. 목록이 비어 있으면 항등 전이 함수가 적용됩니다.

속성이 지정되지 않으면, 빈 목록이 제공된 것처럼 동작합니다.

애니메이션 가능: 예

slope = "<number>"

type="linear"일 때, 선형 함수의 기울기입니다.

초기값에 대한 slope1입니다.

애니메이션 가능: 예

intercept = "<number>"

type="linear"일 때, 선형 함수의 절편입니다.

초기값에 대한 intercept0입니다.

애니메이션 가능: 예

amplitude = "<number>"

type="gamma"일 때, 감마 함수의 진폭입니다.

초기값에 대한 amplitude1입니다.

애니메이션 가능: 예

exponent = "<number>"

type="gamma"일 때, 감마 함수의 지수입니다.

초기값에 대한 exponent1입니다.

애니메이션 가능: 예

offset = "<number>"

type="gamma"일 때, 감마 함수의 오프셋입니다.

초기값에 대한 offset0입니다.

애니메이션 가능: 예

<svg width="8cm" height="4cm" viewBox="0 0 800 400"
     xmlns="http://www.w3.org/2000/svg">
  <title>feComponentTransfer 예시 - feComponentTransfer 동작 예시</title>
  <desc>feComponentTransfer의 효과를 보여주는 4개의 텍스트 문자열:
        항등 함수(참조용),
        feComponentTransfer의 table 옵션 사용,
        feComponentTransfer의 linear 옵션 사용,
        그리고 feComponentTransfer의 gamma 옵션 사용.</desc>
  <defs>
    <linearGradient id="MyGradient" gradientUnits="userSpaceOnUse"
            x1="100" y1="0" x2="600" y2="0">
      <stop offset="0" stop-color="#ff0000" />
      <stop offset=".33" stop-color="#00ff00" />
      <stop offset=".67" stop-color="#0000ff" />
      <stop offset="1" stop-color="#000000" />
    </linearGradient>
    <filter id="Identity" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feComponentTransfer>
        <feFuncR type="identity"/>
        <feFuncG type="identity"/>
        <feFuncB type="identity"/>
        <feFuncA type="identity"/>
      </feComponentTransfer>
    </filter>
    <filter id="Table" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feComponentTransfer>
        <feFuncR type="table" tableValues="0 0 1 1"/>
        <feFuncG type="table" tableValues="1 1 0 0"/>
        <feFuncB type="table" tableValues="0 1 1 0"/>
      </feComponentTransfer>
    </filter>
    <filter id="Linear" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feComponentTransfer>
        <feFuncR type="linear" slope=".5" intercept=".25"/>
        <feFuncG type="linear" slope=".5" intercept="0"/>
        <feFuncB type="linear" slope=".5" intercept=".5"/>
      </feComponentTransfer>
    </filter>
    <filter id="Gamma" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feComponentTransfer>
        <feFuncR type="gamma" amplitude="2" exponent="5" offset="0"/>
        <feFuncG type="gamma" amplitude="2" exponent="3" offset="0"/>
        <feFuncB type="gamma" amplitude="2" exponent="1" offset="0"/>
      </feComponentTransfer>
    </filter>
  </defs>
  <rect fill="none" stroke="blue"
        x="1" y="1" width="798" height="398"/>
  <g font-family="Verdana" font-size="75"
            font-weight="bold" fill="url(#MyGradient)" >
    <rect x="100" y="0" width="600" height="20" />
    <text x="100" y="90">Identity</text>
    <text x="100" y="190" filter="url(#Table)" >TableLookup</text>
    <text x="100" y="290" filter="url(#Linear)" >LinearFunc</text>
    <text x="100" y="390" filter="url(#Gamma)" >GammaFunc</text>
  </g>
</svg>
feComponentTransfer 예시

feComponentTransfer 예시

이 예시를 SVG로 보기

9.7.2. 전이 함수 feFuncG

이름: feFuncG
카테고리: 전이 함수 요소
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소, 순서 무관.
속성:
DOM 인터페이스: SVGFEFuncGElement

속성 값의 정의는 feFuncR를 참조하세요.

9.7.3. 전이 함수 feFuncB

이름: feFuncB
카테고리: 전이 함수 요소
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소, 순서 무관.
속성:
DOM 인터페이스: SVGFEFuncBElement

속성 값의 정의는 feFuncR를 참조하세요.

9.7.4. 전이 함수 feFuncA

이름: feFuncA
카테고리: 전이 함수 요소
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소, 순서 무관.
속성:
DOM 인터페이스: SVGFEFuncAElement

속성 값의 정의는 feFuncR를 참조하세요.

9.8. 필터 프리미티브 feComposite

이름: feComposite
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소, 순서 무관.
속성:
DOM 인터페이스: SVGFECompositeElement

이 필터는 두 개의 입력 이미지를 이미지 공간에서 픽셀 단위로 결합하며, Porter-Duff [PORTERDUFF] 합성 연산 중 하나를 사용합니다: over, in, atop, out, xor, lighter [COMPOSITING-1]. 또한, 성분별 arithmetic 연산(결과는 [0..1] 범위로 클램프됨)을 적용할 수 있습니다.

arithmetic 연산은 feDiffuseLightingfeSpecularLighting 필터의 출력과 텍스처 데이터를 결합할 때 유용합니다. dissolve 구현에도 유용합니다. arithmetic 연산이 선택된 경우, 각 결과 픽셀은 아래 공식으로 계산됩니다:

result = k1*i1*i2 + k2*i1 + k3*i2 + k4

여기서:

이 필터 프리미티브의 경우, 결과 이미지의 범위는 필터 프리미티브 서브리전 설명 섹션에 따라 확장될 수 있습니다.

속성 정의:

operator = "over | in | out | atop | xor | lighter | arithmetic"

수행할 합성 연산입니다. operator 타입은 arithmetic을 제외하고 모두 [COMPOSITING-1]에 설명된 연산과 일치하며, in은 소스, in2는 대상입니다. arithmetic 연산은 위에서 설명한 대로 동작합니다.

초기값에 대한 operatorover입니다.

애니메이션 가능: 예.

k1 = "<number>"

operator="arithmetic"일 때에만 적용됩니다.

초기값에 대한 k10입니다.

애니메이션 가능: 예.

k2 = "<number>"

operator="arithmetic"일 때에만 적용됩니다.

초기값에 대한 k20입니다.

애니메이션 가능: 예.

k3 = "<number>"

operator="arithmetic"일 때에만 적용됩니다.

초기값에 대한 k30입니다.

애니메이션 가능: 예.

k4 = "<number>"

operator="arithmetic"일 때에만 적용됩니다.

초기값에 대한 k40입니다.

애니메이션 가능: 예.

in2 = "(see in 속성 참조)"

합성 연산에 사용되는 두 번째 입력 이미지입니다.

애니메이션 가능: 예.

참고: Compositing and Blending [COMPOSITING-1]은 더 많은 합성 키워드를 정의합니다. 추가 키워드의 기능은 입력 필터 프리미티브 inin2를 바꿔 적용하여 구현할 수 있습니다.

<svg width="330" height="195" viewBox="0 0 1100 650"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <title>feComposite 예시 - feComposite 연산 예시</title>
  <desc>서로 겹치는 삼각형 쌍 여섯 개로 이루어진 네 줄을 통해,
        서로 다른 투명도 값과 배경 삭제 여부에서 여섯 가지 feComposite 연산자가 어떻게 보이는지 보여줍니다.</desc>
  <defs>
    <desc>각 합성 연산자마다 여섯 개 필터의 두 세트를 정의합니다.
          첫 번째 세트는 불투명한 흰색으로 채워 배경 이미지를 지웁니다.
          두 번째 세트는 배경을 지우지 않아, 배경이 보이기도 하고 다른 경우에는
          배경 이미지가 자기 자신과 합성됩니다(즉, "double-counting").</desc>
    <filter id="overFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="over" result="comp"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="inFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="in" result="comp"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="outFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="out" result="comp"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="atopFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="atop" result="comp"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="xorFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="xor" result="comp"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="arithmeticFlood" filterUnits="objectBoundingBox"
            x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" result="comp"
                   operator="arithmetic" k1=".5" k2=".5" k3=".5" k4=".5"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="overNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="over" result="comp"/>
    </filter>
    <filter id="inNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="in" result="comp"/>
    </filter>
    <filter id="outNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="out" result="comp"/>
    </filter>
    <filter id="atopNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="atop" result="comp"/>
    </filter>
    <filter id="xorNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="xor" result="comp"/>
    </filter>
    <filter id="arithmeticNoFlood" filterUnits="objectBoundingBox"
            x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" result="comp"
                   operator="arithmetic" k1=".5" k2=".5" k3=".5" k4=".5"/>
    </filter>
    <path id="Blue100" d="M 0 0 L 100 0 L 100 100 z" fill="#00ffff" />
    <path id="Red100" d="M 0 0 L 0 100 L 100 0 z" fill="#ff00ff" />
    <path id="Blue50" d="M 0 125 L 100 125 L 100 225 z" fill="#00ffff" fill-opacity=".5" />
    <path id="Red50" d="M 0 125 L 0 225 L 100 125 z" fill="#ff00ff" fill-opacity=".5" />
    <g id="TwoBlueTriangles">
      <use xlink:href="#Blue100"/>
      <use xlink:href="#Blue50"/>
    </g>
    <g id="BlueTriangles">
      <use transform="translate(275,25)" xlink:href="#TwoBlueTriangles"/>
      <use transform="translate(400,25)" xlink:href="#TwoBlueTriangles"/>
      <use transform="translate(525,25)" xlink:href="#TwoBlueTriangles"/>
      <use transform="translate(650,25)" xlink:href="#TwoBlueTriangles"/>
      <use transform="translate(775,25)" xlink:href="#TwoBlueTriangles"/>
      <use transform="translate(900,25)" xlink:href="#TwoBlueTriangles"/>
    </g>
  </defs>

  <rect fill="none" stroke="blue" x="1" y="1" width="1098" height="648"/>
  <g font-family="Verdana" font-size="40" shape-rendering="crispEdges">
    <desc>불투명한 흰색 표면 위에 그려 배경을 완전히 덮는 필터로 예시를 렌더링합니다.</desc>
    <g isolation="isolate">
      <text x="15" y="75">투명도 1.0</text>
      <text x="15" y="115" font-size="27">(feFlood 사용)</text>
      <text x="15" y="200">투명도 0.5</text>
      <text x="15" y="240" font-size="27">(feFlood 사용)</text>
      <use xlink:href="#BlueTriangles"/>
      <g transform="translate(275,25)">
        <use xlink:href="#Red100" filter="url(#overFlood)" />
        <use xlink:href="#Red50" filter="url(#overFlood)" />
        <text x="5" y="275">over</text>
      </g>
      <g transform="translate(400,25)">
        <use xlink:href="#Red100" filter="url(#inFlood)" />
        <use xlink:href="#Red50" filter="url(#inFlood)" />
        <text x="35" y="275">in</text>
      </g>
      <g transform="translate(525,25)">
        <use xlink:href="#Red100" filter="url(#outFlood)" />
        <use xlink:href="#Red50" filter="url(#outFlood)" />
        <text x="15" y="275">out</text>
      </g>
      <g transform="translate(650,25)">
        <use xlink:href="#Red100" filter="url(#atopFlood)" />
        <use xlink:href="#Red50" filter="url(#atopFlood)" />
        <text x="10" y="275">atop</text>
      </g>
      <g transform="translate(775,25)">
        <use xlink:href="#Red100" filter="url(#xorFlood)" />
        <use xlink:href="#Red50" filter="url(#xorFlood)" />
        <text x="15" y="275">xor</text>
      </g>
      <g transform="translate(900,25)">
        <use xlink:href="#Red100" filter="url(#arithmeticFlood)" />
        <use xlink:href="#Red50" filter="url(#arithmeticFlood)" />
        <text x="-25" y="275">arithmetic</text>
      </g>
    </g>
    <g transform="translate(0,325)" isolation="isolate">
    <desc>배경을 지우지 않는 필터로 예시를 렌더링합니다.
          따라서 어떤 경우에는 배경이 계속 보이고, 다른 경우에는 배경
          이미지가 자기 자신과 합성됩니다("double-counting").</desc>
      <text x="15" y="75">투명도 1.0</text>
      <text x="15" y="115" font-size="27">(feFlood 미사용)</text>
      <text x="15" y="200">투명도 0.5</text>
      <text x="15" y="240" font-size="27">(feFlood 미사용)</text>
      <use xlink:href="#BlueTriangles"/>
      <g transform="translate(275,25)">
        <use xlink:href="#Red100" filter="url(#overNoFlood)" />
        <use xlink:href="#Red50" filter="url(#overNoFlood)" />
        <text x="5" y="275">over</text>
      </g>
      <g transform="translate(400,25)">
        <use xlink:href="#Red100" filter="url(#inNoFlood)" />
        <use xlink:href="#Red50" filter="url(#inNoFlood)" />
        <text x="35" y="275">in</text>
      </g>
      <g transform="translate(525,25)">
        <use xlink:href="#Red100" filter="url(#outNoFlood)" />
        <use xlink:href="#Red50" filter="url(#outNoFlood)" />
        <text x="15" y="275">out</text>
      </g>
      <g transform="translate(650,25)">
        <use xlink:href="#Red100" filter="url(#atopNoFlood)" />
        <use xlink:href="#Red50" filter="url(#atopNoFlood)" />
        <text x="10" y="275">atop</text>
      </g>
      <g transform="translate(775,25)">
        <use xlink:href="#Red100" filter="url(#xorNoFlood)" />
        <use xlink:href="#Red50" filter="url(#xorNoFlood)" />
        <text x="15" y="275">xor</text>
      </g>
      <g transform="translate(900,25)">
        <use xlink:href="#Red100" filter="url(#arithmeticNoFlood)" />
        <use xlink:href="#Red50" filter="url(#arithmeticNoFlood)" />
        <text x="-25" y="275">arithmetic</text>
      </g>
    </g>
  </g>
</svg>
feComposite 예시

feComposite 예시

이 예시를 SVG로 보기

9.9. 필터 프리미티브 feConvolveMatrix

이름: feConvolveMatrix
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소, 순서 무관.
속성:
DOM 인터페이스: SVGFEConvolveMatrixElement

feConvolveMatrix는 행렬 컨볼루션 필터 효과를 적용합니다. 컨볼루션은 입력 이미지의 픽셀을 이웃 픽셀과 결합하여 결과 이미지를 생성합니다. 컨볼루션을 통해 흐림, 모서리 감지, 선명화, 엠보싱 및 베벨링을 포함한 다양한 이미지 작업을 수행할 수 있습니다.

행렬 컨볼루션은 입력 이미지의 특정 픽셀 값과 이웃 픽셀 값을 결합하여 결과 픽셀 값을 생성하는 방법을 설명하는 n×m 행렬(컨볼루션 커널)을 기반으로 합니다. 각 결과 픽셀은 해당 소스 픽셀과 이웃 픽셀에 커널 행렬을 적용하여 결정됩니다. 주어진 픽셀에 대한 각 색상 값에 적용되는 기본 컨볼루션 공식은 다음과 같습니다:

color X , Y = i = 0 orderY 1 j = 0 orderX 1 source x targetX + j , y targetY + i kernalMatrix orderX j 1, orderY i 1 divisor + bias alpha x , y func color_{X , Y} = { sum from{i=0} to{func orderY -1} sum from{j=0} to{func orderX -1} func source_{x - func targetX + j , y - targetY + i} cdot func kernalMatrix_{func orderX - j - 1, func orderY - i - 1 }} over {func divisor} + func bias cdot func alpha_{x,y}

여기서 "orderX"와 "orderY"는 order 속성의 X 및 Y 값을 나타내며, "targetX"는 targetX 속성의 값을 나타내고, "targetY"는 targetY 속성의 값을 나타내며, "kernelMatrix"는 kernelMatrix 속성의 값을 나타내고, "divisor"는 divisor 속성의 값을 나타내며, "bias"는 bias 속성의 값을 나타냅니다.

위의 공식에서 커널 행렬의 값은 많은 컴퓨터 그래픽 교과서에 설명된 컨볼루션 이론과 일치하도록 소스 이미지 및 대상 이미지에 대해 커널 행렬이 180도 회전된 상태로 적용됩니다.

예를 들어, 색상 채널 중 하나의 색상 값이 다음과 같은 5픽셀 x 5픽셀 크기의 입력 이미지가 있다고 가정해 봅시다:

0 20 40 235 235 100 120 140 235 235 200 220 240 235 235 255 255 255 255 255 255 255 255 255 255 left[ matrix {0 # 20 # 40 # 235 # 235 ## 100 # 120 # 140 # 235 # 235 ## 200 # 220 # 240 # 235 # 235 ## 255 # 255 # 255 # 255 # 255 ## 255 # 255 # 255 # 255 # 255} right]

그리고 다음과 같이 3x3 컨볼루션 커널을 정의합니다:

1 2 3 4 5 6 7 8 9 left[ matrix {1 # 2 # 3 ## 4 # 5 # 6 ## 7 # 8 # 9} right]

이미지의 두 번째 행과 두 번째 열에 있는 색상 값에 초점을 맞춰 봅시다 (소스 픽셀 값은 120입니다). 입력 이미지의 픽셀 격자가 커널의 픽셀 격자와 완벽하게 정렬된 가장 단순한 경우를 가정하고, 속성 divisor, targetXtargetY의 기본값을 가정한다면, 결과 색상 값은 다음과 같습니다:

resultChannel 2,2 = 9 0 + 8 20 + 7 40 + 6 100 + 5 120 + 4 140 + 3 200 + 2 220 + 1 240 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 func resultChannel_2,2 = {{9 cdot 0} + {8 cdot 20} + {7 cdot 40} + {6 cdot 100} + {5 cdot 120} + {4 cdot 140} + {3 cdot 200} + {2 cdot 220} + {1 cdot 240}} over {9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1}

행렬 컨볼루션은 픽셀에 작용하기 때문에 본질적으로 해상도에 의존합니다. feConvolveMatrix가 해상도 독립적인 결과를 생성하도록 하려면, 속성 kernelUnitLength에 명시적인 값을 제공해야 합니다.

kernelUnitLength는 다른 속성과 결합하여 필터 효과 좌표 시스템(즉, primitiveUnits 속성에 의해 설정된 좌표 시스템)에서 암시적인 픽셀 격자를 정의합니다. 입력 이미지는 kernelUnitLength와 픽셀이 일치하도록 일시적으로 리샘플링됩니다. 컨볼루션은 리샘플링된 이미지에서 발생합니다. 컨볼루션을 적용한 후 이미지는 원래 해상도로 다시 리샘플링됩니다.

컨볼루션 전에 kernelUnitLength에 의해 정의된 좌표 시스템과 일치하도록 이미지를 리샘플링해야 하거나, 컨볼루션 후 장치 좌표 시스템과 일치하도록 리샘플링해야 하는 경우, 고품질 뷰어는 예를 들어 양선형 또는 양입방(interpolation)과 같은 적절한 보간 기법을 사용하는 것이 권장됩니다. 사용 가능한 보간 기법의 속도에 따라, 이 선택은 image-rendering 속성 설정에 의해 영향을 받을 수 있습니다. 구현은 적절한 결과를 생성하는 데 필요하지 않은 경우 리샘플링을 최소화하거나 제거하는 접근 방식을 선택할 수 있으며, 예를 들어 문서가 kernelUnitLength가 장치 픽셀보다 훨씬 작은 경우 축소될 때와 같은 경우가 이에 해당합니다.

속성 정의:

order = "<number-optional-number>"

kernelMatrix에 대한 각 차원의 셀 수를 나타냅니다. 제공된 값은 <integer> 값으로 0보다 커야 합니다. 정수가 아닌 값은 소수점 이하를 버려서 가장 가까운 정수 값으로 내림됩니다. 첫 번째 숫자인 <orderX>는 행렬의 열 수를 나타냅니다. 두 번째 숫자인 <orderY>는 행렬의 행 수를 나타냅니다. <orderY>가 제공되지 않으면 기본적으로 <orderX>와 동일합니다.

작은 값만 사용하는 것이 권장됩니다(예: 3). 높은 값은 매우 높은 CPU 오버헤드를 초래할 수 있으며 일반적으로 성능에 미치는 영향을 정당화할 만한 결과를 생성하지 않습니다.

초기 값3입니다.

애니메이션 가능: 예.

kernelMatrix = "<list of numbers>"

컨볼루션을 위한 커널 행렬을 구성하는 <number> 값 목록입니다. 값은 공백 문자 및/또는 쉼표로 구분됩니다. 값 목록의 항목 수는 <orderX>와 <orderY>의 곱과 같아야 합니다.

orderX * orderY의 결과가 값 목록의 항목 수와 동일하지 않으면 필터 프리미티브는 통과 필터로 작동합니다.

값 목록의 항목 수가 유효하지 않을 경우의 동작은? <https://github.com/w3c/csswg-drafts/issues/237>

애니메이션 가능: 예.

divisor = "<number>"

kernelMatrix를 입력 이미지에 적용하여 숫자를 얻은 후 해당 숫자를 divisor로 나누어 최종 목적지 색상 값을 도출합니다. 행렬 값의 합계를 나눗셈 값으로 사용하는 것은 결과의 전체 색상 강도에 균등한 영향을 미치는 경향이 있습니다. 지정된 나눗셈 값이 0이면 기본값이 대신 사용됩니다.

초기 값kernelMatrix의 모든 값의 합계이며, 합계가 0인 경우 나눗셈 값은 1로 설정됩니다.

애니메이션 가능: 예.

bias = "<number>"

kernelMatrix를 입력 이미지에 적용하여 숫자를 얻은 후 divisor를 적용한 후 bias 속성이 각 구성 요소에 추가됩니다. bias의 한 가지 응용은 필터의 0 반응이 .5 회색 값이 되도록 하는 경우입니다. bias 속성은 필터의 범위를 이동합니다. 이를 통해 0 또는 1로 클램핑될 값들을 표현할 수 있습니다.

초기 값0입니다.

애니메이션 가능: 예.

targetX = "<integer>"

입력 이미지에서 주어진 대상 픽셀에 대해 컨볼루션 행렬의 X 위치를 결정합니다. 행렬의 가장 왼쪽 열은 열 번호 0입니다. 값은 다음 조건을 충족해야 합니다: 0 <= targetX < orderX. 기본적으로 컨볼루션 행렬은 각 입력 이미지 픽셀에 대해 X 방향으로 중심이 맞춰져 있습니다(즉, targetX = floor ( orderX / 2 )).

애니메이션 가능: 예.

targetY = "<integer>"

입력 이미지에서 주어진 대상 픽셀에 대해 컨볼루션 행렬의 Y 위치를 결정합니다. 행렬의 가장 위쪽 행은 행 번호 0입니다. 값은 다음 조건을 충족해야 합니다: 0 <= targetY < orderY. 기본적으로 컨볼루션 행렬은 각 입력 이미지 픽셀에 대해 Y 방향으로 중심이 맞춰져 있습니다(즉, targetY = floor ( orderY / 2 )).

애니메이션 가능: 예.

edgeMode = "duplicate | wrap | none"

컨볼루션 행렬이 입력 이미지의 가장자리 또는 근처에 위치할 때 행렬 연산을 적용할 수 있도록 필요한 경우 입력 이미지를 색상 값으로 확장하는 방식을 결정합니다.

duplicate는 입력 이미지의 경계에서 필요한 만큼 해당 경계의 색상 값을 복제하여 이미지를 확장함을 나타냅니다.

원래 N-by-M 이미지에서, 여기서 m=M-1이고 n=N-1:

11 12 . . . 1 m 1 M 21 22 . . . 2 m 2 M . . . . . . . . . . . . . . . n 1 n 2 . . . nm nM N 1 N 2 . . . Nm NM left[ matrix {11 # 12 # { "." "." "."} # {1 m} # {1 M} ## 21 # 22 # { "." "." "."} # {2 m} # {2 M} ## { "." "." "."} # { "." "." "."} # { "." "." "."} # { "." "." "."} # { "." "." "."} ## {n 1} # {n 2} # { "." "." "."} # func nm # func nM ## {N 1} # {N 2} # { "." "." "."} # func Nm # func NM} right]

duplicate를 사용하여 두 픽셀 확장:

11 11 11 12 1 m 1 M 1 M 1 M 11 11 11 12 1 m 1 M 1 M 1 M 11 11 11 12 1 m 1 M 1 M 1 M 21 21 21 22 2 m 2 M 2 M 2 M n 1 n 1 n 1 n 2 nm nM nM nM N 1 N 1 N 1 N 2 Nm NM NM NM N 1 N 1 N 1 N 2 Nm NM NM NM N 1 N 1 N 1 N 2 Nm NM NM NM left[ matrix {11 # 11 # 11 # 12 # dotslow # {1 m} # {1 M} # {1 M} # {1 M} ## 11 # 11 # 11 # 12 # dotslow # {1 m} # {1 M} # {1 M} # {1 M} ## 11 # 11 # 11 # 12 # dotslow # {1 m} # {1 M} # {1 M} # {1 M} ## 21 # 21 # 21 # 22 # dotslow # {2 m} # {2 M} # {2 M} # {2 M} ## dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow ## {n 1} # {n 1} # {n 1} # {n 2} # dotslow # func nm # func nM # func nM # func nM ## {N 1} # {N 1} # {N 1} # {N 2} # dotslow # func Nm # func NM # func NM # func NM ## {N 1} # {N 1} # {N 1} # {N 2} # dotslow # func Nm # func NM # func NM # func NM ## {N 1} # {N 1} # {N 1} # {N 2} # dotslow # func Nm # func NM # func NM # func NM} right]

wrap는 입력 이미지가 이미지의 반대쪽 가장자리에서 색상 값을 가져와 확장됨을 나타냅니다.

wrap을 사용하여 두 픽셀 확장:

nm nM n1 n2 nm nM n1 n2 Nm NM N1 N2 Nm NM N1 N2 1m 1M 11 12 1m 1M 11 12 2m 2M 21 22 2m 2M 21 22 nm nM n1 n2 nm nM n1 n2 Nm NM N1 N2 Nm NM N1 N2 1m 1M 11 12 1m 1M 11 12 2m 2M 21 22 2m 2M 21 22 left[ matrix { nm # nM # n1 # n2 # dotslow # nm # nM # n1 # n2 ## Nm # NM # N1 # N2 # dotslow # Nm # NM # N1 # N2 ## 1m # 1M # 11 # 12 # dotslow # 1m # 1M # 11 # 12 ## 2m # 2M # 21 # 22 # dotslow # 2m # 2M # 21 # 22 ## dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow ## nm # nM # n1 # n2 # dotslow # nm # nM # n1 # n2 ## Nm # NM # N1 # N2 # dotslow # Nm # NM # N1 # N2 ## 1m # 1M # 11 # 12 # dotslow # 1m # 1M # 11 # 12 ## 2m # 2M # 21 # 22 # dotslow # 2m # 2M # 21 # 22 } right]

none는 입력 이미지가 R, G, B 및 A에 대해 0의 픽셀 값으로 확장됨을 나타냅니다.

초기 값edgeMode에 대해 duplicate입니다.

애니메이션 가능: 예.

kernelUnitLength = "<number-optional-number>"

첫 번째 숫자는 <dx> 값입니다. 두 번째 숫자는 <dy> 값입니다. <dy> 값이 지정되지 않으면 기본적으로 <dx> 값과 동일합니다. primitiveUnits 속성 값에 의해 결정된 단위(현재 필터 단위)에서 각각 연속 열과 행 사이의 의도된 거리를 나타냅니다. kernelUnitLength에 값이 지정되면 커널이 확장 가능하고 추상적인 좌표 시스템에서 정의됩니다. kernelUnitLength가 지정되지 않으면 기본값은 오프스크린 비트맵의 한 픽셀(픽셀 기반 좌표 시스템)이므로 확장 가능하지 않을 수 있습니다. 디스플레이 매체와 사용자 에이전트 전반에서 일관성을 어느 정도 유지하기 위해 kernelUnitLength에 값을 제공해야 합니다. 일부 구현에서는 임시 오프스크린 이미지의 픽셀 격자가 커널의 픽셀 격자와 정렬되면 가장 일관된 결과와 빠른 성능을 얻을 수 있습니다.

음수 값이나 0이 지정된 경우 기본값이 대신 사용됩니다.

참고: 이 속성은 더 이상 사용되지 않으며 제거될 예정입니다. 플랫폼 독립적인 결과를 생성하는 신뢰할 수 있는 방법을 제공하지 않습니다. 이 사용 사례는 향후 사양에서 다룰 예정입니다.

애니메이션 가능: 예.

preserveAlpha = "false | true"

false 값은 컨볼루션이 알파 채널을 포함한 모든 채널에 적용됨을 나타냅니다. 이 경우 주어진 픽셀에 대한 컨볼루션 공식ALPHAX,Y는 다음과 같습니다:

ALPHAX,Y = (
SUM I=0 to [orderY-1] {
SUM J=0 to [orderX-1] {
SOURCE X-targetX+J, Y-targetY+I * kernelMatrixorderX-J-1, orderY-I-1
}
}
) / divisor + bias

"true" 값은 컨볼루션이 색상 채널에만 적용됨을 나타냅니다. 이 경우 필터는 일시적으로 색상 구성 요소 값을 unpremultiply한 다음 커널을 적용합니다. 이 경우 주어진 픽셀에 대한 컨볼루션 공식ALPHAX,Y는 다음과 같습니다:

ALPHAX,Y = SOURCEX,Y

초기 값preserveAlpha에 대해 false입니다.

애니메이션 가능: 예.

9.10. 필터 프리미티브 feDiffuseLighting

이름: feDiffuseLighting
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 수의 설명 요소, script 및 정확히 하나의 광원 요소, 순서는 무관.
속성:
DOM 인터페이스: SVGFEDiffuseLightingElement

이 필터 프리미티브는 알파 채널을 범프 맵으로 사용하여 이미지를 조명합니다. 생성된 이미지는 알파가 모든 곳에서 1.0인 불투명 RGBA 이미지로, 조명 색상을 기반으로 합니다. 조명 계산은 Phong 조명 모델의 표준 확산 요소를 따릅니다. 생성된 이미지는 입력 범프 맵의 조명 색상, 조명 위치 및 표면 기하학에 따라 달라집니다.

이 필터 프리미티브로 생성된 조명 맵은 arithmetic feComposite 합성 방법의 곱셈 항을 사용하여 텍스처 이미지와 결합할 수 있습니다. 여러 개의 광원은 이 조명 맵을 텍스처 이미지에 적용하기 전에 여러 개를 함께 추가하여 시뮬레이션할 수 있습니다.

아래의 공식은 3x3 필터를 사용합니다. 이러한 필터는 픽셀에 작용하기 때문에 본질적으로 해상도에 의존합니다. feDiffuseLighting이 해상도 독립적인 결과를 생성하도록 하려면 속성 kernelUnitLength에 명시적인 값을 제공해야 합니다.

kernelUnitLength는 다른 속성과 조합하여 필터 효과 좌표 시스템(즉, primitiveUnits 속성에 의해 설정된 좌표 시스템)에서 암시적인 픽셀 격자를 정의합니다. 입력 이미지는 kernelUnitLength와 픽셀이 일치하도록 일시적으로 리샘플링됩니다. 3x3 필터는 리샘플링된 이미지에 적용됩니다. 필터를 적용한 후 이미지는 원래 해상도로 다시 리샘플링됩니다.

참고: 사용 가능한 보간 속도에 따라, 이 선택은 image-rendering 속성 설정에 의해 영향을 받을 수 있습니다.

참고: 문서가 축소되어 kernelUnitLength가 장치 픽셀보다 훨씬 작은 경우와 같이 적절한 결과를 생성하는 데 리샘플링이 필요하지 않은 경우 구현은 리샘플링을 최소화하거나 제거하는 접근 방식을 선택할 수 있습니다.

다음 공식에서, Norm(Ax,Ay,Az) 함수는 다음과 같이 정의됩니다:

Norm ( A x , A y , A z ) = A x 2 + A y 2 + A z 2 Norm(A_x,A_y,A_z) = sqrt { A_x^2+A_y^2+A_z^2}

참고: 사용자 에이전트는 방정식을 최적화하고 극단적인 색상 값에서 시간 차이를 방지하기 위해 "빠른 역제곱근(fast inverse square root)"을 사용할 수 있습니다. 타이밍 공격에 대한 자세한 내용은 개인 정보 보호 및 보안 고려 사항 섹션을 참조하세요.

결과 RGBA 이미지는 다음과 같이 계산됩니다:

Dr = kd * N.L * Lr
Dg = kd * N.L * Lg
Db = kd * N.L * Lb
Da = 1.0

여기서

kd = 확산 조명 상수
N = 표면 법선 단위 벡터, x와 y의 함수
L = 표면에서 조명으로의 단위 벡터, 점 및 스포트라이트의 경우 x와 y의 함수
Lr,Lg,Lb = 조명의 RGB 구성 요소, 스포트라이트의 경우 x와 y의 함수

N은 x와 y의 함수이며 표면 기울기에 따라 다음과 같이 달라집니다:

입력 알파 이미지 I(x,y)에 의해 설명된 표면은:

Z (x,y) = surfaceScale * I(x,y)

표면 법선은 Sobel 기울기 3x3 필터를 사용하여 계산됩니다. 주어진 픽셀이 내부 또는 가장자리에 있는지에 따라 서로 다른 필터 커널이 사용됩니다. 각 경우에 대한 공식은 다음과 같습니다:

Nx (x,y) = - surfaceScale * FACTORx *
(Kx(0,0)*I(x-dx,y-dy) + Kx(1,0)*I(x,y-dy) + Kx(2,0)*I(x+dx,y-dy) +
Kx(0,1)*I(x-dx,y) + Kx(1,1)*I(x,y) + Kx(2,1)*I(x+dx,y) +
Kx(0,2)*I(x-dx,y+dy) + Kx(1,2)*I(x,y+dy) + Kx(2,2)*I(x+dx,y+dy))
Ny (x,y) = - surfaceScale * FACTORy *
(Ky(0,0)*I(x-dx,y-dy) + Ky(1,0)*I(x,y-dy) + Ky(2,0)*I(x+dx,y-dy) +
Ky(0,1)*I(x-dx,y) + Ky(1,1)*I(x,y) + Ky(2,1)*I(x+dx,y) +
Ky(0,2)*I(x-dx,y+dy) + Ky(1,2)*I(x,y+dy) + Ky(2,2)*I(x+dx,y+dy))
Nz (x,y) = 1.0

N = (Nx, Ny, Nz) / Norm((Nx,Ny,Nz))

이 공식에서, dxdy 값(예: I(x-dx,y-dy))은 주어진 (x,y) 위치와 관련된 델타를 나타내며, 해당 지점에서 표면의 기울기를 추정하기 위한 것입니다. 이러한 델타는 속성 kernelUnitLength의 값(명시적 또는 암시적)에 의해 결정됩니다.

상단/좌측 모서리: 상단 행: 상단/우측 모서리:

FACTORx=2/(3*dx)
Kx =
| 0 0 0 |
| 0 -2 2 |
| 0 -1 1 |

FACTORy=2/(3*dy)
Ky =
| 0 0 0 |
| 0 -2 -1 |
| 0 2 1 |

FACTORx=1/(3*dx)
Kx =
| 0 0 0 |
| -2 0 2 |
| -1 0 1 |

FACTORy=1/(2*dy)
Ky =
| 0 0 0 |
| -1 -2 -1 |
| 1 2 1 |

FACTORx=2/(3*dx)
Kx =
| 0 0 0 |
| -2 2 0 |
| -1 1 0 |

FACTORy=2/(3*dy)
Ky =
| 0 0 0 |
| -1 -2 0 |
| 1 2 0 |

좌측 열: 내부 픽셀: 우측 열:

FACTORx=1/(2*dx)
Kx =
| 0 -1 1 |
| 0 -2 2 |
| 0 -1 1 |

FACTORy=1/(3*dy)
Ky =
| 0 -2 -1 |
| 0 0 0 |
| 0 2 1 |

FACTORx=1/(4*dx)
Kx =
| -1 0 1 |
| -2 0 2 |
| -1 0 1 |

FACTORy=1/(4*dy)
Ky =
| -1 -2 -1 |
| 0 0 0 |
| 1 2 1 |

FACTORx=1/(2*dx)
Kx =
| -1 1 0|
| -2 2 0|
| -1 1 0|

FACTORy=1/(3*dy)
Ky =
| -1 -2 0 |
| 0 0 0 |
| 1 2 0 |

하단/좌측 모서리: 하단 행: 하단/우측 모서리:

FACTORx=2/(3*dx)
Kx =
| 0 -1 1 |
| 0 -2 2 |
| 0 0 0 |

FACTORy=2/(3*dy)
Ky =
| 0 -2 -1 |
| 0 2 1 |
| 0 0 0 |

FACTORx=1/(3*dx)
Kx =
| -1 0 1 |
| -2 0 2 |
| 0 0 0 |

FACTORy=1/(2*dy)
Ky =
| -1 -2 -1 |
| 1 2 1 |
| 0 0 0 |

FACTORx=2/(3*dx)
Kx =
| -1 1 0 |
| -2 2 0 |
| 0 0 0 |

FACTORy=2/(3*dy)
Ky =
| -1 -2 0 |
| 1 2 0 |
| 0 0 0 |

L, 이미지 샘플에서 빛까지의 단위 벡터는 다음과 같이 계산됩니다:

무한 광원의 경우 일정합니다:

Lx = cos(azimuth)*cos(elevation)
Ly = sin(azimuth)*cos(elevation)
Lz = sin(elevation)

점 및 스포트라이트의 경우 위치의 함수입니다:

Lx = Lightx - x
Ly = Lighty - y
Lz = Lightz - Z(x,y)

L = (Lx, Ly, Lz) / Norm(Lx, Ly, Lz)

여기서 Lightx, Lighty, 그리고 Lightz는 입력된 광원의 위치입니다.

Lr,Lg,Lb, 빛의 색상 벡터는 스포트라이트 경우에만 위치의 함수입니다:

Lr = Lightr*pow((-L.S),specularExponent)
Lg = Lightg*pow((-L.S),specularExponent)
Lb = Lightb*pow((-L.S),specularExponent)

여기서 S는 빛에서 점(pointAtX, pointAtY, pointAtZ)으로 향하는 단위 벡터입니다:

Sx = pointsAtX - Lightx
Sy = pointsAtY - Lighty
Sz = pointsAtZ - Lightz

S = (Sx, Sy, Sz) / Norm(Sx, Sy, Sz)

만약 L.S가 양수라면, 빛이 존재하지 않습니다. (Lr = Lg = Lb = 0). 만약 limitingConeAngle이 지정되었다면, -L.S < cos(limitingConeAngle) 또한 빛이 존재하지 않음을 나타냅니다.

속성 정의:

surfaceScale = "<number>"

Ain = 1일 때 표면 높이.

속성이 지정되지 않은 경우, 1 값이 지정된 것처럼 동작합니다.

애니메이션 가능: 예.

diffuseConstant = "<number>"

Phong 조명 모델에서의 kd. SVG에서는 이 값이 0 이상의 모든 수일 수 있습니다.

속성이 지정되지 않은 경우, 1 값이 지정된 것처럼 동작합니다.

애니메이션 가능: 예.

kernelUnitLength = "<number-optional-number>"

첫 번째 숫자는 <dx> 값이고, 두 번째 숫자는 <dy> 값입니다. <dy> 값이 지정되지 않은 경우, <dx>값과 동일하게 기본값으로 설정됩니다. 이는 표면 법선 계산 공식에서 각각 dxdy에 대한 의도된 거리를 나타냅니다. primitiveUnits 속성 값에 의해 결정된 현재 필터 단위의 단위입니다. kernelUnitLength에 대한 값을 지정함으로써, 커널은 확장 가능한 추상 좌표 시스템에서 정의됩니다. 만약 kernelUnitLength가 명시되지 않은 경우, dxdy는 지정된 (x,y) 위치에 상대적으로 매우 작은 델타를 나타내야 하며, 중간 이미지 오프스크린 비트맵에서 한 픽셀과 같이 구현될 수 있으며 이는 픽셀 기반 좌표 시스템이고 따라서 확장 가능하지 않을 수 있습니다. 디스플레이 미디어와 사용자 에이전트 간의 일관성을 어느 정도 유지하기 위해, kernelUnitLength에 대한 값을 제공하는 것이 필요합니다.

음수 또는 0 값이 지정된 경우 기본값이 대신 사용됩니다.

참고: 이 속성은 더 이상 사용되지 않으며 제거될 예정입니다. 이는 플랫폼 독립적인 결과를 생성하는 신뢰할 수 있는 방법을 제공하지 않습니다. 이 명세의 향후 버전은 이 사용 사례를 다룰 것입니다.

애니메이션 가능: 예.

광원은 자식 요소 feDistantLight, fePointLight 또는 feSpotLight에 의해 정의됩니다. 빛의 색상은 속성 lighting-color에 의해 지정됩니다.

9.11. 필터 프리미티브 feDisplacementMap

이름: feDisplacementMap
범주: 필터 프리미티브
내용 모델: 설명 요소, animate, script, set 요소를 임의의 순서로 포함.
속성:
DOM 인터페이스: SVGFEDisplacementMapElement

구현이 명세와 일치하지 않습니다. <https://github.com/w3c/csswg-drafts/issues/113>

이 필터 프리미티브는 in2에서 가져온 이미지의 픽셀 값을 사용하여 in에서 이미지를 공간적으로 변위시킵니다. 수행할 변환은 다음과 같습니다:

P'(x,y) ← P( x + scale * (XC(x,y) - .5), y + scale * (YC(x,y) - .5))

여기서 P(x,y)는 입력 이미지 in을 나타내며, P'(x,y)는 결과 이미지입니다. XC(x,y)와 YC(x,y)는 xChannelSelectoryChannelSelector에 의해 지정된 채널의 구성 요소 값입니다. 예를 들어, x 축의 변위를 제어하기 위해 in2의 R 구성 요소를 사용하고 y 축의 변위를 제어하기 위해 Image2의 G 구성 요소를 사용하려면, xChannelSelector를 "R"로 설정하고 yChannelSelector를 "G"로 설정하십시오.

변위 맵 in2는 수행된 매핑의 역을 정의합니다.

입력 이미지 in은 이 필터 프리미티브에서 사전 곱셈된 상태로 유지되어야 합니다. in2의 픽셀 값을 사용한 계산은 비사전 곱셈된 색상 값으로 수행됩니다.

이 필터는 입력에 임의의 비국소적 영향을 줄 수 있으며, 처리 파이프라인에서 상당한 버퍼링이 필요할 수 있습니다. 그러나 이 공식으로 모든 중간 버퍼링 요구 사항은 x 또는 y의 최대 변위 범위를 나타내는 scale에 의해 결정될 수 있습니다.

이 필터를 적용할 때, 소스 픽셀 위치는 종종 여러 소스 픽셀 사이에 위치하게 됩니다.

참고: 사용 가능한 보간기의 속도에 따라, 이 선택은 image-rendering 속성 설정에 의해 영향을 받을 수 있습니다.

참고: 이 사양의 향후 버전에서는 소스 이미지를 왜곡할 때 사용할 보간 방법을 정의하여 UA의 렌더링 결과가 더 상호운용 가능하게 만들 것입니다.

color-interpolation-filters 속성은 in2 소스 이미지에만 적용되며 in 소스 이미지에는 적용되지 않습니다. in 소스 이미지는 현재 색상 공간에 유지되어야 합니다.

속성 정의:

scale = "<number>"

변위 스케일 팩터. 이 크기는 primitiveUnits 속성에 의해 설정된 좌표 시스템에서 표현됩니다.

이 속성의 값이 0인 경우, 이 작업은 소스 이미지에 영향을 미치지 않습니다.

초기값0입니다.

애니메이션 가능: 예.

xChannelSelector = "R | G | B | A"

in2의 어느 채널을 사용할지 지정하며, 이 채널은 x축을 따라 in의 픽셀을 변위시키는 데 사용됩니다.

초기값A입니다.

애니메이션 가능: 예.

yChannelSelector = "R | G | B | A"

in2의 어느 채널을 사용할지 지정하며, 이 채널은 y축을 따라 in의 픽셀을 변위시키는 데 사용됩니다.

초기값A입니다.

애니메이션 가능: 예.

in2 = "(in 속성을 참조)"

두 번째 입력 이미지로, in 속성에서 이미지를 변위시키는 데 사용됩니다. in 속성의 정의를 참조하십시오.

애니메이션 가능: 예.

9.12. 필터 프리미티브 feDropShadow

이름: feDropShadow
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFEDropShadowElement

이 필터는 입력 이미지의 그림자를 생성합니다. 이는 약식(shorthand) 필터로, 다른 필터 프리미티브 조합으로 정의됩니다. 구현체가 보다 쉽게 최적화할 수 있을 것으로 기대됩니다.

feDropShadow 필터 프리미티브의 결과는 다음과 동일합니다:

<feGaussianBlur in="alpha-channel-of-feDropShadow-in"   stdDeviation="stdDeviation-of-feDropShadow"/>
<feOffset dx="dx-of-feDropShadow"   dy="dy-of-feDropShadow" result="offsetblur"/>
<feFlood flood-color="flood-color-of-feDropShadow"  flood-opacity="flood-opacity-of-feDropShadow"/>
<feComposite in2="offsetblur" operator="in"/>
<feMerge>
  <feMergeNode/>
  <feMergeNode in="in-of-feDropShadow"/>
</feMerge>

위 과정을 단계별로 나누면 다음과 같습니다:

  1. feDropShadow 필터 프리미티브 입력의 알파 채널과 feDropShadowstdDeviation 값을 가져와 다음과 같이 feGaussianBlur를 적용한 것과 같게 처리합니다:

    <feGaussianBlur in="alpha-channel-of-feDropShadow-in" stdDeviation="stdDeviation-of-feDropShadow"/>
    
  2. 1단계 결과를 dxdy 값으로 오프셋하여, feDropShadow 요소에 지정된 것과 같이 feOffset을 적용한 것과 같습니다:

    <feOffset dx="dx-of-feDropShadow" dy="dy-of-feDropShadow" result="offsetblur"/>
    
  3. feFlood 요소를 flood-colorflood-opacity 속성값과 함께 feDropShadow에 지정된 것과 같이 처리합니다:

    <feFlood flood-color="flood-color-of-feDropShadow" flood-opacity="flood-opacity-of-feDropShadow"/>
    
  4. 3단계의 feFlood 결과와 2단계의 feOffset 결과를 feComposite 필터 프리미티브의 operator="in"을 적용한 것처럼 합성합니다:

    <feComposite in2="offsetblur" operator="in"/>
    
  5. 마지막으로 이전 단계의 결과를 feMerge로 처리합니다:

    <feMerge>
      <feMergeNode/>
      <feMergeNode in="in-of-feDropShadow"/>
    </feMerge>
    

참고: feDropShadow 필터 프리미티브는 동등한 트리로 확장될 수 있지만 반드시 그렇게 구현할 필요는 없습니다. 사용자 에이전트가 모든 단계를 별도로 수행하지 않고 최적화하여 처리할 수 있기를 기대합니다.

DOM 인터페이스 SVGFEDropShadowElement 외에는 feDropShadow 필터 프리미티브의 내부에 접근할 방법이 없으며, 만약 필터 프리미티브가 동등한 트리로 구현된다면 그 트리는 DOM에 노출되어서는 안 됩니다.

속성 정의:

dx = "<number>"

그림자의 x 오프셋 값입니다.

초기값dx에 대해 2입니다.

이 속성 값은 내부 dx 속성으로 전달되어 feOffset 요소가 사용합니다.

애니메이션 가능: 예.

dy = "<number>"

그림자의 y 오프셋 값입니다.

초기값dy에 대해 2입니다.

이 속성 값은 내부 dy 속성으로 전달되어 feOffset 요소가 사용합니다.

애니메이션 가능: 예.

stdDeviation = "<number-optional-number>"

드롭 섀도우의 블러 연산에 사용되는 표준 편차 값입니다.

초기값stdDeviation에 대해 2입니다.

이 속성 값은 내부 stdDeviation 속성으로 전달되어 feGaussianBlur 요소가 사용합니다.

애니메이션 가능: 예.

9.13. 필터 프리미티브 feFlood

이름: feFlood
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFEFloodElement

이 필터 프리미티브는 flood-colorflood-opacity 속성에서 지정한 색상과 불투명도로 채워진 사각형을 생성합니다. 이 사각형은 필터 프리미티브 서브리전에 의해 feFlood 요소가 정한 크기만큼 생성됩니다.

9.13.1. flood-color 속성

이름: flood-color
값: <color>
초기값: black
적용 대상: feFloodfeDropShadow 요소
상속됨: 아님
백분율: 해당 없음
계산된 값: 지정된 그대로
정식 순서: 문법에 따름
미디어: 시각적
애니메이션 가능: 계산된 값 기준

flood-color 속성은 현재 필터 프리미티브 서브리전을 채우는 데 사용할 색상을 나타냅니다.

flood-color 속성은 SVG 요소의 프레젠테이션 속성입니다.

9.13.2. flood-opacity 속성

이름: flood-opacity
값: <alpha-value>
초기값: 1
적용 대상: feFloodfeDropShadow 요소
상속됨: 아님
백분율: 해당 없음
계산된 값: 지정된 값을 숫자로 변환 후 [0,1] 범위로 클램프
정식 순서: 문법에 따름
미디어: 시각적
애니메이션 가능: 계산된 값 기준

flood-opacity 속성은 전체 필터 프리미티브 서브리전에 사용할 불투명도 값을 정의합니다. flood-color 값에 알파 채널이 포함되어 있으면, 알파 채널은 flood-opacity 속성의 계산된 값과 곱해집니다.

flood-opacity 속성은 SVG 요소의 프레젠테이션 속성입니다.

9.14. 필터 프리미티브 feGaussianBlur

이름: feGaussianBlur
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFEGaussianBlurElement

이 필터 프리미티브는 입력 이미지에 가우시안 블러를 적용합니다.

가우시안 블러 커널은 정규화된 컨볼루션의 근사값입니다:

G(x,y) = H(x)I(y)

여기서

H(x) = exp(-x2/ (2s2)) / sqrt(2π * s2)

그리고

I(y) = exp(-y2/ (2t2)) / sqrt(2π * t2)

"s"는 x 방향의 표준 편차, "t"는 stdDeviation에 의해 지정된 y 방향의 표준 편차입니다.

stdDeviation 값은 하나 또는 두 개의 숫자일 수 있습니다. 두 개의 숫자가 제공되면 첫 번째 값은 현재 좌표계의 x축에 대한 표준 편차 값을, 두 번째 값은 y축에 대한 표준 편차 값을 나타냅니다. 하나의 숫자만 제공되면 해당 값이 X와 Y 모두에 사용됩니다.

stdDeviation에 한 개의 값만 있어도, 이 연산은 분리 가능한 컨볼루션으로 구현될 수 있습니다.

"s" 값이 클 경우(s >= 2.0), 근사값을 사용할 수 있습니다: 박스 블러(box-blur)를 세 번 연속 적용하면 조각별로 이차 컨볼루션 커널이 만들어지며, 이는 가우시안 커널을 3% 이내로 근사합니다.

let d = floor(s * 3 * sqrt(2 * π) / 4 + 0.5)

... d가 홀수면, 크기가 "d"인 박스 블러를 3회, 출력 픽셀 중심으로 적용합니다.

... d가 짝수면, 크기가 "d"인 박스 블러 2번(첫 번째는 출력 픽셀과 왼쪽 픽셀 사이 경계에, 두 번째는 출력 픽셀과 오른쪽 픽셀 사이 경계에), 그리고 크기가 "d+1"인 박스 블러 1회, 출력 픽셀 중심에 적용합니다.

근사식은 "t"에도 동일하게 적용됩니다.

이 연산은 종종 내장 입력인 SourceAlpha에서 생성된 알파 전용 이미지에서 수행됩니다. 구현체는 이를 감지하여 단일 채널 최적화를 할 수 있습니다. 단, 이 최적화가 프라이버시 문제를 유발할 경우 생략해야 합니다. (자세한 내용은 프라이버시 및 보안 고려 사항 참조.) 입력이 무한 영역이고 일정(예: FillPaint에서 채움이 단색인 경우)이라면 이 연산은 아무런 효과가 없습니다. 입력이 무한 영역이고 필터 결과(채움이 단색인 경우)가 feTile의 입력인 경우, 필터는 주기적 경계 조건으로 평가됩니다.

속성 정의:

stdDeviation = "<number-optional-number>"

블러 연산의 표준 편차 값입니다. 두 개의 <number>가 제공되면, 첫 번째 값은 primitiveUnits 속성으로 결정된 좌표계의 x축에 대한 표준 편차, 두 번째 값은 y축에 대한 표준 편차를 나타냅니다. 하나의 값만 제공되면 X와 Y 모두에 적용됩니다.

음수 값 또는 0은 해당 필터 프리미티브의 효과를 비활성화합니다(즉, 결과는 입력 이미지와 동일).

X 또는 Y 중 하나만 stdDeviation 값이 0이면, 블러는 0이 아닌 방향에만 적용됩니다.

초기값stdDeviation에 대해 0입니다.

애니메이션 가능: 예.

edgeMode = "duplicate | wrap | none"

입력 이미지의 가장자리 또는 근처에 커널이 위치할 때 행렬 연산을 적용하기 위해 입력 이미지를 필요한 만큼 색상 값으로 확장하는 방법을 결정합니다.

duplicate은 입력 이미지의 각 경계에서 색상 값을 복제하여 필요한 만큼 이미지를 확장함을 나타냅니다.

원본 N×M 이미지(m=M-1, n=N-1):

wrap은 이미지의 반대쪽 경계에서 색상 값을 가져와 확장함을 나타냅니다.

none 값은 입력 이미지를 R, G, B, A가 모두 0인 픽셀 값으로 확장함을 의미합니다.

초기값edgeMode에 대해 none입니다.

애니메이션 가능: 예.

이 장의 예시에서는 feGaussianBlur 필터 프리미티브를 사용해 그림자 효과를 만듭니다.

9.15. 필터 프리미티브 feImage

이름: feImage
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 서술적 요소, animate, animateTransform, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFEImageElement

이 필터 프리미티브는 이 필터 요소 외부의 그래픽을 참조하며, 해당 그래픽을 로드하거나 RGBA 래스터로 렌더링하여 필터 프리미티브의 결과가 됩니다.

이 필터 프리미티브는 외부 이미지를 참조하거나 다른 SVG 조각을 참조할 수 있습니다. 내장 이미지 소스인 SourceGraphic과 유사한 이미지를 생성하지만, 그래픽은 외부 소스에서 가져옵니다.

href가 JPEG, PNG 또는 SVG 파일과 같은 독립 이미지 리소스를 참조하면, 해당 이미지 리소스는 image 요소의 동작에 따라 렌더링됩니다. 그렇지 않으면 참조된 리소스는 use 요소의 동작에 따라 렌더링됩니다. 두 경우 모두 현재 사용자 좌표계는 primitiveUnits 속성 값에 따라 filter 요소에서 결정됩니다. preserveAspectRatio 속성 처리 방식은 image 요소와 동일합니다.

빈 이미지(너비 또는 높이가 0), 다운로드 실패, 존재하지 않거나 표시할 수 없는(지원되지 않는 이미지 형식 등) href 참조는 필터 프리미티브 서브리전을 투명한 검정으로 채웁니다.

참조된 이미지를 디바이스 좌표계에 맞추기 위해 리샘플링해야 할 때, 고품질 뷰어에서는 적절한 보간 기법(예: bilinear 또는 bicubic 등)을 사용하는 것이 권장됩니다. 사용 가능한 보간기 속도에 따라 이 선택은 image-rendering 속성 설정에 의해 영향을 받을 수 있습니다.

속성 정의:

xlink:href = "<url>"

href 속성 참조.

애니메이션 가능: 예.

참고: xlink:href 속성은 더 이상 사용되지 않으므로 새로운 콘텐츠에서는 사용하지 않아야 하며, 하위 호환성을 위해서만 포함되어 있습니다. 작성자는 href 속성을 대신 사용해야 합니다.

href = "<url>"

이미지 리소스 또는 요소를 가리키는 <url>입니다. xlink:hrefhref가 모두 지정된 경우, 후자가 우선합니다.

애니메이션 가능: 예.

preserveAspectRatio = "[defer] <align> [<meetOrSlice>]"

preserveAspectRatio 참조.

초기값preserveAspectRatio에 대해 xMidYMid meet입니다.

애니메이션 가능: 예.

crossorigin = "anonymous | use-credentials"

crossorigin 속성은 CORS 설정 속성입니다. 목적은 크로스 오리진 접근이 허용되는 타사 사이트의 이미지를 feDisplacementMap에서 사용 가능하게 하는 것입니다. 자세한 정의는 crossorigin 속성(img 태그 [HTML5]) 및 본 명세의 프라이버시 및 보안 고려 사항 절을 참고하세요.

애니메이션 가능: 아님.

다음 예제는 이미지가 객체에 대해 어떻게 배치되는지를 보여줍니다. 왼쪽에서 오른쪽으로:

<svg width="600" height="250" viewBox="0 0 600 250"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink">
  <title>Example feImage - Examples of feImage use</title>
  <desc>Three examples of using feImage, the first showing the
        default rendering, the second showing the image fit
        to a box and the third showing the image
        shifted and clipped.</desc>
  <defs>
    <filter id="Default">
      <feImage xlink:href="smiley.png" />
    </filter>
    <filter id="Fitted" primitiveUnits="objectBoundingBox">
      <feImage xlink:href="smiley.png"
         x="0" y="0" width="100%" height="100%"
         preserveAspectRatio="none"/>
    </filter>
    <filter id="Shifted">
      <feImage xlink:href="smiley.png"
         x="500" y="5"/>
    </filter>
  </defs>
  <rect fill="none" stroke="blue"
        x="1" y="1" width="598" height="248"/>
  <g>
    <rect x="50"  y="25" width="100" height="200" filter="url(#Default)"/>
    <rect x="50"  y="25" width="100" height="200" fill="none" stroke="green"/>
    <rect x="250" y="25" width="100" height="200" filter="url(#Fitted)"/>
    <rect x="250" y="25" width="100" height="200" fill="none" stroke="green"/>
    <rect x="450" y="25" width="100" height="200" filter="url(#Shifted)"/>
    <rect x="450" y="25" width="100" height="200" fill="none" stroke="green"/>
  </g>
</svg>
Example feImage — Examples of feImage use

feImage 예제

이 예제를 SVG로 보기

9.16. 필터 프리미티브 feMerge

이름: feMerge
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 서술적 요소, feMergeNode, script 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFEMergeElement

이 필터 프리미티브는 입력 이미지 레이어들을 over 연산자를 사용하여 겹쳐서 합성합니다. Input1(첫 번째 feMergeNode 자식 요소에 해당)이 맨 아래에 위치하고, 마지막에 지정된 입력인 InputN(마지막 feMergeNode 자식 요소에 해당)이 맨 위에 위치합니다.

많은 효과들은 최종 출력 이미지를 만들기 위해 여러 개의 중간 레이어를 생성합니다. 이 필터는 그 레이어들을 하나의 이미지로 합칠 수 있게 해줍니다. 이는 n-1개의 Composite 필터를 사용하는 것으로도 할 수 있지만, 이 공통 연산을 별도의 필터로 제공하면 구현에 추가적인 유연성을 제공합니다.

feMerge 요소는 임의 개수의 feMergeNode 하위 요소를 가질 수 있으며, 각 요소는 in 속성을 가집니다.

feMerge의 정식 구현은 전체 효과를 하나의 RGBA 레이어에 렌더링한 후, 결과 레이어를 출력 장치에 렌더링하는 것입니다. 특정 경우(특히 출력 장치 자체가 연속 톤 장치일 때)에는, 병합이 결합법칙적이므로 효과를 한 번에 한 레이어씩 평가하여 각 레이어를 아래에서 위로 개별적으로 출력 장치에 렌더링하는 것도 충분한 근사일 수 있습니다.

가장 위쪽 이미지 입력이 SourceGraphic이고 이 feMerge가 필터의 마지막 프리미티브인 경우, 구현체는 그 시점까지의 레이어를 렌더링한 후 SourceGraphic을 벡터 설명에서 직접 맨 위에 렌더링하는 것이 바람직합니다.

이 장의 예시에서는 feMerge 필터 프리미티브를 사용해 두 개의 중간 필터 결과를 합성합니다.

9.16.1. 합성 노드 feMergeNode

이름: feMergeNode
카테고리: 없음.
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFEMergeNodeElement

9.17. 필터 프리미티브 feMorphology

이름: feMorphology
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFEMorphologyElement

이 필터 프리미티브는 그래픽을 "두껍게" 또는 "얇게" 만듭니다. 알파 채널을 두껍게 또는 얇게 할 때 특히 유용합니다.

팽창(또는 침식) 커널은 너비가 2*x-radius, 높이가 2*y-radius인 사각형입니다. 팽창(dilate)에서는 출력 픽셀이 입력 이미지의 커널 사각형 내에서 각 R,G,B,A 값의 최대값이 됩니다. 침식(erode)에서는 출력 픽셀이 입력 이미지의 커널 사각형 내에서 각 R,G,B,A 값의 최소값이 됩니다.

이 연산은 종종 내장 입력 SourceAlpha에서 생성된 알파 전용 이미지에서 수행됩니다. 이 경우 구현체는 단일 채널 최적화를 할 수 있습니다. 단, 이 최적화가 프라이버시 문제를 야기한다면 생략해야 합니다. (자세한 내용은 프라이버시 및 보안 고려 사항 참고.)

입력이 무한 영역이고 일정(예: FillPaint에서 채움이 단색인 경우)이라면 이 연산은 아무런 효과가 없습니다. 입력이 무한 영역이고 필터 결과가 feTile의 입력인 경우, 필터는 주기적 경계 조건으로 평가됩니다.

feMorphology는 프리멀티플라이드 색상값을 기준으로 작동하므로, 항상 알파 채널 이하의 색상값을 결과로 만듭니다.

속성 정의:

operator = "erode | dilate"

소스 그래픽을 침식(erode, 얇게) 또는 팽창(dilate, 두껍게)할지 나타내는 키워드입니다.

초기값operator에 대해 erode입니다.

애니메이션 가능: 예.

radius = "<number-optional-number>"

연산에 사용할 반지름(radii)입니다. 두 개의 <number>가 제공되면, 첫 번째 값은 x-radius, 두 번째 값은 y-radius입니다. 하나의 값만 제공되면 X와 Y 모두에 적용됩니다. 값은 primitiveUnits 속성으로 결정된 좌표계 기준입니다.

음수 또는 0 값은 해당 필터 프리미티브의 효과를 비활성화합니다(즉, 결과는 입력 이미지와 동일).

초기값radius에 대해 0입니다.

애니메이션 가능: 예.

<svg width="5cm" height="7cm" viewBox="0 0 700 500"
     xmlns="http://www.w3.org/2000/svg">
  <title>예제 feMorphology - erode와 dilate 예시</title>
  <desc>테두리로 그려진 다섯 개의 텍스트 문자열.
        첫 번째는 필터가 없음. 두 번째와 세 번째는 'erode' 사용.
        네 번째와 다섯 번째는 'dilate' 사용.</desc>
  <defs>
    <filter id="Erode3">
      <feMorphology operator="erode" in="SourceGraphic" radius="3" />
    </filter>
    <filter id="Erode6">
      <feMorphology operator="erode" in="SourceGraphic" radius="6" />
    </filter>
    <filter id="Dilate3">
      <feMorphology operator="dilate" in="SourceGraphic" radius="3" />
    </filter>
    <filter id="Dilate6">
      <feMorphology operator="dilate" in="SourceGraphic" radius="6" />
    </filter>
  </defs>
  <rect fill="none" stroke="blue" stroke-width="2"
        x="1" y="1" width="698" height="498"/>
  <g isolation="isolate" >
    <g font-family="Verdana" font-size="75"
              fill="none" stroke="black" stroke-width="6" >
      <text x="50" y="90">필터 없음</text>
      <text x="50" y="180" filter="url(#Erode3)" >Erode 반지름 3</text>
      <text x="50" y="270" filter="url(#Erode6)" >Erode 반지름 6</text>
      <text x="50" y="360" filter="url(#Dilate3)" >Dilate 반지름 3</text>
      <text x="50" y="450" filter="url(#Dilate6)" >Dilate 반지름 6</text>
    </g>
  </g>
</svg>
Example of feMorphology

feMorphology 예시

이 예시를 SVG로 보기

9.18. 필터 프리미티브 feOffset

이름: feOffset
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFEOffsetElement

이 필터 프리미티브는 입력 이미지를 현재 이미지 공간에서 지정된 벡터만큼 상대적으로 이동(오프셋)합니다.

이는 그림자 효과와 같은 효과에 중요하게 사용됩니다.

이 필터를 적용할 때, 대상 위치가 디바이스 공간에서 소수 픽셀만큼 오프셋될 수 있습니다. 이 경우, 고품질 뷰어에서는 bilinear 또는 bicubic과 같은 적절한 보간 기법을 사용하는 것이 좋습니다. 이러한 보간은 이미지의 움직임을 시각적으로 더 부드럽게 제공하기 때문에 동적 뷰어에서 특히 권장됩니다. 정적 뷰어에서는 덜 중요합니다. 저자는 image-rendering 속성 설정을 통해 의도를 명확히 해야 합니다.

속성 정의:

dx = "<number>"

입력 그래픽을 x축 방향으로 오프셋(이동)할 양입니다. 오프셋 양은 primitiveUnits 속성에 의해 결정된 좌표계 기준으로 표현됩니다.

초기값dx에 대해 0입니다.

애니메이션 가능: 예.

dy = "<number>"

입력 그래픽을 y축 방향으로 오프셋(이동)할 양입니다. 오프셋 양은 primitiveUnits 속성에 의해 결정된 좌표계 기준으로 표현됩니다.

초기값dy에 대해 0입니다.

애니메이션 가능: 예.

이 장의 예시에서는 feOffset 필터 프리미티브를 사용하여 그림자를 원본 소스 그래픽에서 오프셋합니다.

9.19. 필터 프리미티브 feSpecularLighting

이름: feSpecularLighting
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 서술적 요소, script 그리고 정확히 하나의 광원 요소, 순서 무관.
속성:
DOM 인터페이스: SVGFESpecularLightingElement

이 필터 프리미티브는 알파 채널을 범프 맵으로 사용하여 소스 그래픽에 빛을 비춥니다. 결과 이미지는 광원 색상을 기반으로 한 RGBA 이미지입니다. 조명 계산은 Blinn-Phong 조명 모델의 표준 스펙큘러 컴포넌트를 따릅니다. 결과 이미지는 광원 색, 광원 위치, 입력 범프 맵의 표면 기하에 따라 달라집니다. 조명 계산 결과가 더해집니다. 이 필터 프리미티브는 뷰어가 z 방향으로 무한대에 있다고 가정합니다(즉, 시선 방향의 단위 벡터는 모든 위치에서 (0,0,1)입니다).

참고: 이 필터 프리미티브는 조명 계산의 스펙큘러 반사 부분을 포함하는 이미지를 생성합니다. 이러한 맵은 arithmetic feComposite 방법의 add 항을 사용하여 두 번째 필터 프리미티브의 텍스처와 결합하는 용도로 설계되었습니다. 여러 광원을 시뮬레이션하려면 이 조명 맵을 여러 번 더한 후 텍스처 이미지에 적용할 수 있습니다.

결과 RGBA 이미지는 다음과 같이 계산됩니다:

Sr = ks * pow(N.H, specularExponent) * Lr
Sg = ks * pow(N.H, specularExponent) * Lg
Sb = ks * pow(N.H, specularExponent) * Lb
Sa = max(Sr, Sg, Sb)

여기서

ks = 스펙큘러 조명 상수
N = 표면 법선(unit vector), x와 y의 함수
H = 시선 단위 벡터와 광원 단위 벡터 사이의 "중간" 단위 벡터

Lr,Lg,Lb = 광원의 RGB 컴포넌트

N과 (Lr, Lg, Lb)의 정의는 feDiffuseLighting 참고.

H의 정의는 시선 벡터 E = (0,0,1)로 고정되어 있다는 가정을 반영합니다:

H = (L + E) / Norm(L+E)

여기서 L은 광원 단위 벡터입니다.

feDiffuseLighting과 달리, feSpecularLighting 필터는 불투명하지 않은 이미지를 생성합니다. 이는 스펙큘러 결과(Sr,Sg,Sb,Sa)가 텍스처 이미지에 더해지도록 설계되었기 때문입니다. 결과의 알파 채널은 색상 컴포넌트의 최대값이 되어, 스펙큘러 빛이 0인 곳에서는 이미지에 추가적인 덮어씌우기가 없고, 완전히 흰색 하이라이트는 불투명도를 추가합니다.

feDiffuseLightingfeSpecularLighting 필터는 종종 함께 적용됩니다. 구현체는 이를 감지하여 두 맵을 한 번에 계산할 수 있습니다.

속성 정의:

surfaceScale = "<number>"

Ain = 1일 때의 표면 높이.

초기값surfaceScale에 대해 1입니다.

애니메이션 가능: 예.

specularConstant = "<number>"

Phong 조명 모델의 ks. SVG에서는 0 이상의 모든 숫자가 올 수 있습니다.

초기값specularConstant에 대해 1입니다.

애니메이션 가능: 예.

specularExponent = "<number>"

스펙큘러 항에 대한 지수, 값이 클수록 더 "윤이 납니다".

초기값specularExponent에 대해 1입니다.

애니메이션 가능: 예.

kernelUnitLength = "<number-optional-number>"

첫 번째 숫자는 <dx> 값, 두 번째 숫자는 <dy> 값입니다.

<dy> 값이 지정되지 않으면 <dx> 값과 동일하게 기본값이 설정됩니다. 현재 필터 단위(즉, primitiveUnits 값으로 결정되는 단위)에서 dxdy의 거리를 나타내며, 표면 법선 계산 공식에 사용됩니다. kernelUnitLength 값을 지정하면, 커널이 확장 가능한 추상 좌표계로 정의됩니다.

kernelUnitLength가 지정되지 않으면, dxdy 값은 주어진 (x, y) 위치에 대해 매우 작은 델타로 해석되어야 하며, 경우에 따라 오프스크린 비트맵의 한 픽셀(픽셀 기반 좌표계)이 될 수도 있으므로 확장성이 떨어질 수 있습니다. 다양한 디스플레이 미디어와 사용자 에이전트에서 일관성을 위해 kernelUnitLength 값을 지정하는 것이 필요합니다.

애니메이션 가능: 예.

광원은 자식 요소 feDistantLight, fePointLight 또는 feSpotLight 중 하나로 정의됩니다. 광원 색상은 lighting-color 속성으로 지정합니다.

이 장의 예시에서는 feSpecularLighting 필터 프리미티브를 사용하여 매우 반사적이고 3D로 빛나는 효과를 만듭니다.

9.20. 필터 프리미티브 feTile

이름: feTile
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFETileElement

이 필터 프리미티브는 입력 이미지를 반복적으로 타일링하여 타겟 사각형을 채웁니다. 타겟 사각형은 필터 프리미티브 서브리전에 의해 feTile 요소가 정한 크기만큼 생성됩니다.

일반적으로 입력 이미지는 참조 타일을 정의하기 위해 고유의 필터 프리미티브 서브리전을 가지고 있습니다. feTile은 참조 타일을 X와 Y 방향 모두로 복제하여 타겟 사각형을 완전히 채웁니다. 각 타일의 좌상단 코너는 (x + i*width, y + j*height) 위치에 있으며, 여기서 (x,y)는 입력 이미지의 필터 프리미티브 서브리전의 좌상단, widthheight는 입력 이미지의 필터 프리미티브 서브리전의 너비와 높이이며, ij는 임의의 정수입니다. 대부분의 경우, 입력 이미지는 필터 프리미티브 서브리전feTile보다 작아야 반복 패턴 효과를 얻을 수 있습니다.

구현체는 타일 이미지를 구성할 때 타일 사이의 아티팩트(특히 사용자에서 디바이스로의 변환에 shear나 회전이 포함되는 경우)가 발생하지 않도록 적절한 조치를 취해야 합니다. 주의하지 않으면, 보간(interpolation)으로 인해 타일의 가장자리 픽셀에 불투명도가 기대와 다르게 낮거나 높게 나타날 수 있습니다. 이는 인접한 타일이 특정 픽셀과 부분적으로 겹쳐서 칠해질 때 발생할 수 있습니다.

9.21. 필터 프리미티브 feTurbulence

이름: feTurbulence
카테고리: 필터 프리미티브
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFETurbulenceElement

이 필터 프리미티브는 Perlin turbulence 함수를 이용하여 이미지를 생성합니다. 구름이나 대리석과 같은 인공 텍스처를 합성할 수 있습니다. Perlin turbulence 함수에 대한 자세한 설명은 "Texturing and Modeling" [TaM]을 참고하세요. 결과 이미지는 이 필터 프리미티브의 필터 프리미티브 서브리전 전체를 채웁니다.

옥타브를 하나만 합성하면 대역폭 제한 노이즈를 생성할 수 있습니다.

아래의 C 코드는 이 필터 효과에 사용되는 정확한 알고리즘을 보여줍니다. 필터 프리미티브 서브리전은 인수 fTileX, fTileY, fTileWidth, fTileHeight로 전달됩니다.

fractalSum의 경우, turbFunctionResult는 -1에서 1 범위를 목표로 합니다(실제 결과가 이 범위를 초과할 수도 있음). 색상이나 알파 값으로 변환하려면 colorValue = (turbFunctionResult + 1) / 2 공식을 사용한 다음, 0~1 범위로 클램프하세요.

turbulence의 경우, turbFunctionResult는 0에서 1 범위를 목표로 합니다(실제 결과가 이 범위를 초과할 수도 있음). 색상이나 알파 값으로 변환하려면 colorValue = turbFunctionResult 공식을 사용한 다음, 0~1 범위로 클램프하세요.

의사 난수 적용 순서는 다음과 같습니다. 초기 seed 값은 seed 속성에서 계산됩니다. 구현체는 먼저 R의 격자점을 계산하고, 추가적인 의사 난수를 마지막에 생성된 난수에 상대적으로 계속 얻어 G의 격자점을 계산하며, B와 A도 같은 방식입니다.

생성된 색상 및 알파 값은 color-interpolation-filters 속성에 의해 결정된 색상 공간에 있습니다:

/* 결과는 [1, 2**31 - 2] 범위에서 생성됩니다.*/
알고리즘: r = (a * r) mod m
a = 16807이고 m = 2**31 - 1 = 2147483647입니다.
[Park & Miller], CACM 31권 10호 1195쪽, 1988년 10월 참고
테스트: 원래의 seed가 1일 때, 10,000번째 생성된 숫자는 1043618065이어야 합니다.
*/
#define RAND_m 2147483647 /* 2**31 - 1 */
#define RAND_a 16807 /* 7**5; m의 원시근 */
#define RAND_q 127773 /* m / a */
#define RAND_r 2836 /* m % a */
long setup_seed(long lSeed)
{
  if (lSeed <= 0) lSeed = -(lSeed % (RAND_m - 1)) + 1;
  if (lSeed > RAND_m - 1) lSeed = RAND_m - 1;
  return lSeed;
}
long random(long lSeed)
{
  long result;
  result = RAND_a * (lSeed % RAND_q) - RAND_r * (lSeed / RAND_q);
  if (result <= 0) result += RAND_m;
  return result;
}
#define BSize 0x100
#define BM 0xff
#define PerlinN 0x1000
#define NP 12 /* 2^PerlinN */
#define NM 0xfff
static uLatticeSelector[BSize + BSize + 2];
static double fGradient[4][BSize + BSize + 2][2];
struct StitchInfo
{
  int nWidth; // stitching 시 wrap에 빼야 할 양
  int nHeight;
  int nWrapX; // wrap의 최소값
  int nWrapY;
};
static void init(long lSeed)
{
  double s;
  int i, j, k;
  lSeed = setup_seed(lSeed);
  for(k = 0; k < 4; k++)
  {
    for(i = 0; i < BSize; i++)
    {
      uLatticeSelector[i] = i;
      do {
         for (j = 0; j < 2; j++)
           fGradient[k][i][j] = (double)(((lSeed = random(lSeed)) % (BSize + BSize)) - BSize) / BSize;
      } while(fGradient[k][i][0] == 0 && fGradient[k][i][1] == 0);
      s = double(sqrt(fGradient[k][i][0] * fGradient[k][i][0] + fGradient[k][i][1] * fGradient[k][i][1]));
      if (s > 1) {
          i--; // 현재 난수 벡터 버림, 다시 시도
          continue;
      }
      fGradient[k][i][0] /= s;
      fGradient[k][i][1] /= s;
    }
  }
  while(--i)
  {
    k = uLatticeSelector[i];
    uLatticeSelector[i] = uLatticeSelector[j = (lSeed = random(lSeed)) % BSize];
    uLatticeSelector[j] = k;
  }
  for(i = 0; i < BSize + 2; i++)
  {
    uLatticeSelector[BSize + i] = uLatticeSelector[i];
    for(k = 0; k < 4; k++)
      for(j = 0; j < 2; j++)
        fGradient[k][BSize + i][j] = fGradient[k][i][j];
  }
}
#define s_curve(t) ( t * t * (3. - 2. * t) )
#define lerp(t, a, b) ( a + t * (b - a) )
double noise2(int nColorChannel, double vec[2], StitchInfo *pStitchInfo)
{
  int bx0, bx1, by0, by1, b00, b10, b01, b11;
  double rx0, rx1, ry0, ry1, *q, sx, sy, a, b, t, u, v;
  register i, j;
  t = vec[0] + PerlinN;
  bx0 = (int)t;
  bx1 = bx0+1;
  rx0 = t - (int)t;
  rx1 = rx0 - 1.0f;
  t = vec[1] + PerlinN;
  by0 = (int)t;
  by1 = by0+1;
  ry0 = t - (int)t;
  ry1 = ry0 - 1.0f;
  // stitching 시 격자점 조정
  if(pStitchInfo != NULL)
  {
    if(bx0 >= pStitchInfo->nWrapX)
      bx0 -= pStitchInfo->nWidth;
    if(bx1 >= pStitchInfo->nWrapX)
      bx1 -= pStitchInfo->nWidth;
    if(by0 >= pStitchInfo->nWrapY)
      by0 -= nHeight;
    if(by1 >= pStitchInfo->nWrapY)
      by1 -= nHeight;
  }
  bx0 &= BM;
  bx1 &= BM;
  by0 &= BM;
  by1 &= BM;
  i = uLatticeSelector[bx0];
  j = uLatticeSelector[bx1];
  b00 = uLatticeSelector[i + by0];
  b10 = uLatticeSelector[j + by0];
  b01 = uLatticeSelector[i + by1];
  b11 = uLatticeSelector[j + by1];
  sx = double(s_curve(rx0));
  sy = double(s_curve(ry0));
  q = fGradient[nColorChannel][b00]; u = rx0 * q[0] + ry0 * q[1];
  q = fGradient[nColorChannel][b10]; v = rx1 * q[0] + ry0 * q[1];
  a = lerp(sx, u, v);
  q = fGradient[nColorChannel][b01]; u = rx0 * q[0] + ry1 * q[1];
  q = fGradient[nColorChannel][b11]; v = rx1 * q[0] + ry1 * q[1];
  b = lerp(sx, u, v);
  return lerp(sy, a, b);
}
double turbulence(int nColorChannel, double *point, double fBaseFreqX, double fBaseFreqY,
          int nNumOctaves, bool bFractalSum, bool bDoStitching,
          double fTileX, double fTileY, double fTileWidth, double fTileHeight)
{
  StitchInfo stitch;
  StitchInfo *pStitchInfo = NULL; // NULL이면 stitching 안함.
  // stitching에 필요하다면 기본 주파수 조정.
  if(bDoStitching)
  {
    // 타일드 터뷸런스를 이어 붙일 때,
    // 타일 경계가 연속이 되도록 주파수를 조정해야 함.
    if(fBaseFreqX != 0.0)
    {
      double fLoFreq = double(floor(fTileWidth * fBaseFreqX)) / fTileWidth;
      double fHiFreq = double(ceil(fTileWidth * fBaseFreqX)) / fTileWidth;
      if(fBaseFreqX / fLoFreq < fHiFreq / fBaseFreqX)
        fBaseFreqX = fLoFreq;
      else
        fBaseFreqX = fHiFreq;
    }
    if(fBaseFreqY != 0.0)
    {
      double fLoFreq = double(floor(fTileHeight * fBaseFreqY)) / fTileHeight;
      double fHiFreq = double(ceil(fTileHeight * fBaseFreqY)) / fTileHeight;
      if(fBaseFreqY / fLoFreq < fHiFreq / fBaseFreqY)
        fBaseFreqY = fLoFreq;
      else
        fBaseFreqY = fHiFreq;
    }
    // stitch 초기값 설정.
    pStitchInfo = &stitch;
    stitch.nWidth = int(fTileWidth * fBaseFreqX + 0.5f);
    stitch.nWrapX = fTileX * fBaseFreqX + PerlinN + nWidth;
    stitch.nHeight = int(fTileHeight * fBaseFreqY + 0.5f);
    stitch.nWrapY = fTileY * fBaseFreqY + PerlinN + nHeight;
  }
  double fSum = 0.0f;
  double vec[2];
  vec[0] = point[0] * fBaseFreqX;
  vec[1] = point[1] * fBaseFreqY;
  double ratio = 1;
  for(int nOctave = 0; nOctave < nNumOctaves; nOctave++)
  {
    if(bFractalSum)
      fSum += double(noise2(nColorChannel, vec, pStitchInfo) / ratio);
    else
      fSum += double(fabs(noise2(nColorChannel, vec, pStitchInfo)) / ratio);
    vec[0] *= 2;
    vec[1] *= 2;
    ratio *= 2;
    if(pStitchInfo != NULL)
    {
      // stitch 값 업데이트. 곱하기 전에 PerlinN을 빼고
      // 이후에 더하면 결국 한 번만 빼는 것과 같음.
      stitch.nWidth *= 2;
      stitch.nWrapX = 2 * stitch.nWrapX - PerlinN;
      stitch.nHeight *= 2;
      stitch.nWrapY = 2 * stitch.nWrapY - PerlinN;
    }
  }
  return fSum;
}

속성 정의:

baseFrequency = "<number-optional-number>"

노이즈 함수의 기본 주파수(들) 파라미터입니다. 두 개의 <number>가 제공되면, 첫 번째 값은 X 방향의 기본 주파수, 두 번째 값은 Y 방향의 기본 주파수입니다. 하나의 값만 제공되면 X와 Y 모두에 사용됩니다.

초기값baseFrequency에 대해 0입니다.

음수 값은 지원되지 않음.

애니메이션 가능: 예.

numOctaves = "<integer>"

노이즈 함수에 사용할 옥타브 개수입니다.

초기값numOctaves에 대해 1입니다.

음수 값은 지원되지 않음.

애니메이션 가능: 예.

참고: 추가된 각 옥타브는 이미지의 색상 및 알파 값에 대해 이전 옥타브의 절반만큼 기여합니다. 옥타브가 많아지면 추가 옥타브의 기여도가 주어진 색상 깊이의 색상 해상도보다 작아집니다. UA는 지원 색상 깊이에 따라 처리 중 numOctaves 값을 클램프할 수 있습니다. (예: 8비트 색상 깊이에서는 numOctaves 값을 9로 클램프할 수 있음.)

seed = "<number>"

의사 난수 생성기의 시작 값입니다.

초기값seed에 대해 0입니다.

위 알고리즘에 seed 값을 넘길 때는 먼저 절삭(0 방향으로 반올림)해야 합니다.

애니메이션 가능: 예.

stitchTiles = "stitch | noStitch"

stitchTiles="noStitch"인 경우, 타일 경계에서 부드러운 전환을 시도하지 않습니다. 결과적으로 타일 경계에서 불연속이 명확하게 보일 수 있습니다.

stitchTiles="stitch"인 경우, UA는 baseFrequency-x와 baseFrequency-y 값을 자동 조정하여 feTurbulence 노드의 너비와 높이(즉, 현재 서브리전의 너비 및 높이)가 첫 번째 옥타브의 Perlin 타일 너비와 높이의 정수 배수를 가지도록 합니다. baseFrequency는 상대적(절대적 아님) 변화가 더 작은 쪽으로 위 또는 아래로 조정됩니다: 주파수로 lowFreq=floor(width*frequency)/width, hiFreq=ceil(width*frequency)/width 계산 후, frequency/lowFreq < hiFreq/frequency이면 lowFreq를, 그렇지 않으면 hiFreq를 사용합니다. turbulence 값 생성 시, Perlin Noise의 격자 벡터는 평소대로 생성하지만, 오른쪽/아래쪽 active area(타일 결과 크기)의 격자점에서는 반대쪽 active area 경계에서 벡터를 복사합니다.

초기값stitchTiles에 대해 noStitch입니다.

애니메이션 가능: 예.

type = "fractalNoise | turbulence"

필터 프리미티브가 노이즈 또는 터뷸런스 함수를 수행할지 여부를 나타냅니다.

초기값type에 대해 turbulence입니다.

애니메이션 가능: 예.

<svg width="450px" height="325px" viewBox="0 0 450 325"
     xmlns="http://www.w3.org/2000/svg">
  <title>feTurbulence 예시 - feTurbulence 동작의 예시</title>
  <desc>여섯 개의 사각형 영역에서 feTurbulence의 다양한 파라미터 설정 효과를 보여줍니다.</desc>
  <g  font-family="Verdana" text-anchor="middle" font-size="10" >
    <defs>
      <filter id="Turb1" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="turbulence" baseFrequency="0.05" numOctaves="2"/>
      </filter>
      <filter id="Turb2" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="turbulence" baseFrequency="0.1" numOctaves="2"/>
      </filter>
      <filter id="Turb3" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="turbulence" baseFrequency="0.05" numOctaves="8"/>
      </filter>
      <filter id="Turb4" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="fractalNoise" baseFrequency="0.1" numOctaves="4"/>
      </filter>
      <filter id="Turb5" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="fractalNoise" baseFrequency="0.4" numOctaves="4"/>
      </filter>
      <filter id="Turb6" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="fractalNoise" baseFrequency="0.1" numOctaves="1"/>
      </filter>
    </defs>

    <rect x="1" y="1" width="448" height="323"
          fill="none" stroke="blue" stroke-width="1"  />

    <rect x="25" y="25" width="100" height="75" filter="url(#Turb1)"  />
    <text x="75" y="117">type=turbulence</text>
    <text x="75" y="129">baseFrequency=0.05</text>
    <text x="75" y="141">numOctaves=2</text>

    <rect x="175" y="25" width="100" height="75" filter="url(#Turb2)"  />
    <text x="225" y="117">type=turbulence</text>
    <text x="225" y="129">baseFrequency=0.1</text>
    <text x="225" y="141">numOctaves=2</text>

    <rect x="325" y="25" width="100" height="75" filter="url(#Turb3)"  />
    <text x="375" y="117">type=turbulence</text>
    <text x="375" y="129">baseFrequency=0.05</text>
    <text x="375" y="141">numOctaves=8</text>

    <rect x="25" y="180" width="100" height="75" filter="url(#Turb4)"  />
    <text x="75" y="272">type=fractalNoise</text>
    <text x="75" y="284">baseFrequency=0.1</text>
    <text x="75" y="296">numOctaves=4</text>

    <rect x="175" y="180" width="100" height="75" filter="url(#Turb5)"  />
    <text x="225" y="272">type=fractalNoise</text>
    <text x="225" y="284">baseFrequency=0.4</text>
    <text x="225" y="296">numOctaves=4</text>

    <rect x="325" y="180" width="100" height="75" filter="url(#Turb6)"  />
    <text x="375" y="272">type=fractalNoise</text>
    <text x="375" y="284">baseFrequency=0.1</text>
    <text x="375" y="296">numOctaves=1</text>
  </g>
</svg>
feTurbulence 예시

feTurbulence 예시

이 예시를 SVG로 보기

10. color-interpolation-filters 속성

color-interpolation-filters 속성의 설명은 다음과 같습니다:

이름: color-interpolation-filters
값: auto | sRGB | linearRGB
초기값: linearRGB
적용 대상: 모든 필터 프리미티브
상속:
백분율: 해당 없음
계산된 값: 명시된 대로
정식 순서: 문법에 따름
미디어: visual
애니메이션 가능: 아님
auto

사용자 에이전트가 sRGB 또는 linearRGB 색상 공간을 선택하여 필터 효과 색상 연산을 수행할 수 있음을 나타냅니다. 저자가 특정 색상 공간에서 연산이 이루어져야 함을 요구하지 않을 때 선택합니다.

sRGB

필터 효과 색상 연산이 sRGB 색상 공간에서 이루어져야 함을 나타냅니다.

linearRGB

필터 효과 색상 연산이 linearRGB(선형화된 RGB) 색상 공간에서 이루어져야 함을 나타냅니다.

color-interpolation-filters 속성은 필터 효과로 수행되는 이미지 연산의 색상 공간을 지정합니다.

참고: color-interpolation-filters 속성은 필터 연산에만 영향을 미치므로, feOffset, feImage, feTile, feFlood와 같은 필터 프리미티브에는 영향을 주지 않습니다.

참고: color-interpolation-filterscolor-interpolation과 초기값이 다릅니다. color-interpolation-filters의 초기값은 linearRGB이고, color-interpolation의 초기값은 sRGB입니다. 즉, 기본값에서는 필터 효과 연산은 linearRGB 색상 공간에서 이루어지고, 그 외의 색상 보간은 기본적으로 sRGB 색상 공간에서 이루어집니다.

참고: color-interpolation-filters 속성은 Filter Functions에는 영향을 주지 않으며, 필터 함수는 sRGB 색상 공간에서 동작합니다.

color-interpolation-filters 속성은 SVG 요소의 프레젠테이션 속성입니다.

11. 광원 요소와 속성

11.1. 소개

다음 섹션에서는 광원을 정의하는 요소들, feDistantLight, fePointLight, feSpotLight와 광원의 색상을 정의하는 속성 lighting-color를 정의합니다.

11.2. 광원 feDistantLight

이름: feDistantLight
카테고리: 광원
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFEDistantLightElement

속성 정의:

azimuth = "<number>"

광원의 XY 평면(시계 방향)에서의 방향 각도(단위:도), x축으로부터의 각도입니다.

azimuth의 초기값은 0입니다.

애니메이션 가능: 예.

elevation = "<number>"

XY 평면에서 Z축 방향으로의 광원 각도(단위:도)입니다. 양의 Z축은 뷰어(사용자)를 향합니다.

elevation의 초기값은 0입니다.

애니메이션 가능: 예.

아래 다이어그램은 XYZ 좌표계에서 azimuthelevation이 나타내는 각도를 보여줍니다.

azimuth와 elevation이 나타내는 각도

azimuth와 elevation이 나타내는 각도

11.3. 광원 fePointLight

이름: fePointLight
카테고리: 광원
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFEPointLightElement

속성 정의:

x = "<number>"

광원의 X 위치. 좌표계는 primitiveUnits 속성에 의해 filter 요소에서 결정됩니다.

x의 초기값은 0입니다.

애니메이션 가능: 예.

y = "<number>"

광원의 Y 위치. 좌표계는 primitiveUnits 속성에 의해 filter 요소에서 결정됩니다.

y의 초기값은 0입니다.

애니메이션 가능: 예.

z = "<number>"

광원의 Z 위치. 좌표계는 primitiveUnits 속성에 의해 filter 요소에서 결정되며, 초기 local coordinate system에서 양의 Z축은 콘텐츠를 보는 사용자 방향으로 향하고, Z축의 한 단위는 X와 Y의 한 단위와 같습니다(참고).

z의 초기값은 0입니다.

애니메이션 가능: 예.

11.4. 광원 feSpotLight

이름: feSpotLight
카테고리: 광원
콘텐츠 모델: 임의 개수의 서술적 요소, animate, script, set 요소들, 순서 무관.
속성:
DOM 인터페이스: SVGFESpotLightElement

속성 정의:

x = "<number>"

광원의 X 위치. 좌표계는 primitiveUnits 속성에 의해 filter 요소에서 결정됩니다.

x의 초기값은 0입니다.

애니메이션 가능: 예.

y = "<number>"

광원의 Y 위치. 좌표계는 primitiveUnits 속성에 의해 filter 요소에서 결정됩니다.

y의 초기값은 0입니다.

애니메이션 가능: 예.

z = "<number>"

광원의 Z 위치. 좌표계는 primitiveUnits 속성에 의해 filter 요소에서 결정되며, 초기 local coordinate system에서 양의 Z축은 콘텐츠를 보는 사용자 방향으로 향하고, Z축의 한 단위는 X와 Y의 한 단위와 같습니다(참고).

z의 초기값은 0입니다.

애니메이션 가능: 예.

pointsAtX = "<number>"

광원이 향하는 지점의 X 위치. 좌표계는 primitiveUnits 속성에 의해 filter 요소에서 결정됩니다.

pointsAtX의 초기값은 0입니다.

애니메이션 가능: 예.

pointsAtY = "<number>"

광원이 향하는 지점의 Y 위치. 좌표계는 primitiveUnits 속성에 의해 filter 요소에서 결정됩니다.

pointsAtY의 초기값은 0입니다.

애니메이션 가능: 예.

pointsAtZ = "<number>"

광원이 향하는 지점의 Z 위치. 좌표계는 primitiveUnits 속성에 의해 filter 요소에서 결정되며, 초기 local coordinate system에서 양의 Z축은 콘텐츠를 보는 사용자 방향으로 향하고, Z축의 한 단위는 X와 Y의 한 단위와 같습니다(참고).

pointsAtZ의 초기값은 0입니다.

애니메이션 가능: 예.

specularExponent = "<number>"

광원의 초점(집광)을 제어하는 지수 값입니다.

specularExponent의 초기값은 1입니다.

필터 프리미티브 <feDiffuseLighting>에서 specularExponent 사용 방법을 참고하세요.

참고: specularExponentfeSpotLight에서 specularExponentfeSpecularLighting와 용도가 다릅니다.

애니메이션 가능: 예.

limitingConeAngle = "<number>"

광원이 투사되는 영역을 제한하는 원뿔. 원뿔 바깥쪽에는 빛이 투사되지 않습니다. limitingConeAngle은 스포트라이트 축(광원과 방향점 사이의 축)과 스포트라이트 원뿔 사이의 각도를 도 단위로 나타냅니다. 사용자 에이전트는 원뿔 경계에서 안티앨리어싱 등 경계 부드럽게 처리하는 기법을 적용해야 합니다.

값이 지정되지 않으면 원뿔 제한이 적용되지 않습니다.

애니메이션 가능: 예.

11.5. lighting-color 속성

이름: lighting-color
값: <color>
초깃값: white
적용 대상: feDiffuseLightingfeSpecularLighting 요소
상속됨: 아니오
백분율: 해당 없음
계산된 값: 명시된 대로
표준 순서: 문법에 따름
미디어: 시각적
애니메이션 가능: 계산된 값 기준으로

lighting-color 속성은 filter primitives feDiffuseLightingfeSpecularLighting의 광원 색상을 정의합니다.

lighting-color 속성은 SVG 요소에 대한 프레젠테이션 속성입니다.

12. 필터 CSS <image>

CSS <image> 값은 CSS filter 속성에 지정된 필터 함수로 필터링할 수 있습니다. 이 명세는 다음 구문을 가진 <image> <filter()> 함수를 도입합니다:

filter() = filter( [ <image> | <string> ], <filter-value-list> )

<filter()> 함수는 두 개의 인자를 받습니다. 첫 번째 인자는 <image>입니다. 두 번째는 CSS filter 속성에 지정된 필터 함수 목록입니다. 이 함수는 <image> 매개변수를 받아 필터 규칙을 적용하여 처리된 이미지를 반환합니다. 필터 및 필터 효과 영역은 입력 구체적인 오브젝트 크기에 따라 결정됩니다.

참고: 원본 이미지의 크기와 원점을 유지해야 하므로, 완전히 불투명한 이미지에 <drop-shadow()>와 같은 일부 필터 효과는 영향을 미치지 않을 수 있습니다.

<blur()> 함수의 경우 edgeMode 속성은 feGaussianBlur 요소에서 duplicate로 설정됩니다. 이는 필터링된 입력 이미지의 가장자리에서 더 부드러운 결과를 만들어줍니다.

12.1. filter() 보간

시작 이미지와 종료 이미지가 모두 필터 함수만 다를 수 있는 <filter()>인 경우, 필터 함수 목록을 필터의 보간 섹션에 설명된 대로 보간해야 합니다. 그렇지 않으면 일반 <image>로 보간해야 합니다. 필터 함수 보간이 수행될 수 없는 경우, 이미지는 일반 <image>로 보간해야 합니다.

13. filter 요소로 정의된 약어

13.1. 필터 프리미티브 표현

아래는 각 필터 함수에 대해 'filter element' 요소로 표현된 등가물입니다. 함수의 매개변수는 다음 스타일의 대괄호로 표시됩니다: [amount]. 매개변수가 백분율 값인 경우 실수로 변환됩니다.

13.1.1. grayscale

<filter id="grayscale">
  <feColorMatrix type="matrix"
             values="
    (0.2126 + 0.7874 * [1 - amount]) (0.7152 - 0.7152  * [1 - amount]) (0.0722 - 0.0722 * [1 - amount]) 0 0
    (0.2126 - 0.2126 * [1 - amount]) (0.7152 + 0.2848  * [1 - amount]) (0.0722 - 0.0722 * [1 - amount]) 0 0
    (0.2126 - 0.2126 * [1 - amount]) (0.7152 - 0.7152  * [1 - amount]) (0.0722 + 0.9278 * [1 - amount]) 0 0
    0 0 0 1 0"/>
</filter>

13.1.2. sepia

<filter id="sepia">
  <feColorMatrix type="matrix"
             values="
    (0.393 + 0.607 * [1 - amount]) (0.769 - 0.769 * [1 - amount]) (0.189 - 0.189 * [1 - amount]) 0 0
    (0.349 - 0.349 * [1 - amount]) (0.686 + 0.314 * [1 - amount]) (0.168 - 0.168 * [1 - amount]) 0 0
    (0.272 - 0.272 * [1 - amount]) (0.534 - 0.534 * [1 - amount]) (0.131 + 0.869 * [1 - amount]) 0 0
    0 0 0 1 0"/>
</filter>

13.1.3. saturate

<filter id="saturate">
  <feColorMatrix type="saturate" values="[amount]"/>
</filter>

13.1.4. hue-rotate

<filter id="hue-rotate">
  <feColorMatrix type="hueRotate" values="[angle]"/>
</filter>

13.1.5. invert

<filter id="invert">
  <feComponentTransfer>
      <feFuncR type="table" tableValues="[amount] (1 - [amount])"/>
      <feFuncG type="table" tableValues="[amount] (1 - [amount])"/>
      <feFuncB type="table" tableValues="[amount] (1 - [amount])"/>
  </feComponentTransfer>
</filter>

13.1.6. opacity

<filter id="opacity">
  <feComponentTransfer>
      <feFuncA type="table" tableValues="0 [amount]"/>
  </feComponentTransfer>
</filter>

13.1.7. brightness

<filter id="brightness">
  <feComponentTransfer>
      <feFuncR type="linear" slope="[amount]"/>
      <feFuncG type="linear" slope="[amount]"/>
      <feFuncB type="linear" slope="[amount]"/>
  </feComponentTransfer>
</filter>

13.1.8. contrast

<filter id="contrast">
  <feComponentTransfer>
      <feFuncR type="linear" slope="[amount]" intercept="-(0.5 * [amount]) + 0.5"/>
      <feFuncG type="linear" slope="[amount]" intercept="-(0.5 * [amount]) + 0.5"/>
      <feFuncB type="linear" slope="[amount]" intercept="-(0.5 * [amount]) + 0.5"/>
  </feComponentTransfer>
</filter>

13.1.9. blur

<filter id="blur">
  <feGaussianBlur stdDeviation="[radius radius]" edgeMode="[edge mode]" >
</filter>

여기서 edge mode는 filter 속성의 경우 none으로, CSS 이미지 <filter()> 함수의 경우 duplicate로 계산됩니다.

참고: <blur()> 함수는 UA 정의 필터 영역을 확장할 수 있습니다. 약어에 대한 필터 영역을 참고하세요.

13.1.10. drop-shadow

<filter id="drop-shadow">
  <feGaussianBlur in="[alpha-channel-of-input]" stdDeviation="[radius]"/>
  <feOffset dx="[offset-x]" dy="[offset-y]" result="offsetblur"/>
  <feFlood flood-color="[color]"/>
  <feComposite in2="offsetblur" operator="in"/>
  <feMerge>
    <feMergeNode/>
    <feMergeNode in="[input-image]"/>
  </feMerge>
</filter>

참고: <drop-shadow()> 함수는 UA 정의 필터 영역을 확장할 수 있습니다. 약어에 대한 필터 영역을 참고하세요.

13.2. 약어에 대한 필터 영역

이전 하위 섹션에서 filter primitive로 구현된 모든 약어 필터는 UA에서 정의한 filter region을 가져야 합니다. 필터 영역은 요소의 시각적 콘텐츠, 넘치는 콘텐츠, 스크롤바와 같은 그래픽 제어 요소, border/border-image, box-shadow, text-shadowoutline을 포함해야 합니다. 또한, 약어 필터가 <blur()> 또는 <drop-shadow()>처럼 시각적 영역을 확장하는 경우, 필터 영역은 이 영역도 포함해야 합니다.

참고: 필터 소스의 처리는 필터 영역 섹션을 참고하세요.

14. 필터의 애니메이션

14.1. 필터 함수 목록의 보간

한 필터에서 두 번째 필터로 보간할 때, 다음 목록의 첫 번째로 일치하는 조건에 따라 해당 단계를 실행해야 합니다:

두 필터 모두 <filter-value-list>의 길이가 동일하고 <url>이 없으며 각 <filter-function>에 대해 대응하는 항목이 있는 경우
<filter-function> 쌍을 필터 함수의 보간 섹션의 규칙에 따라 보간합니다.
두 필터 모두 <filter-value-list>의 길이가 다르고 <url>이 없으며 각 <filter-function>에 대해 대응하는 항목이 있는 경우
  1. 긴 목록의 누락된 <filter-function>을 짧은 목록 끝에 추가합니다. 새로 추가된 <filter-function>은 보간을 위해 초기값으로 초기화해야 합니다.
  2. <filter-function> 쌍을 필터 함수의 보간 섹션의 규칙에 따라 보간합니다.
한 필터가 none이고 다른 필터가 <filter-value-list>이며 <url>이 없는 경우
  1. none을 다른 필터의 해당 <filter-value-list>로 대체합니다. 새 <filter-function>은 보간을 위해 초기값으로 초기화해야 합니다.
  2. <filter-function> 쌍을 필터 함수의 보간 섹션의 규칙에 따라 보간합니다.
그 외의 경우
불연속 보간을 사용합니다.

필터 함수의 거리 계산. <https://github.com/w3c/csswg-drafts/issues/91>

14.2. 덧셈

독립적으로 애니메이션되는 <filter-value-list>를 결합할 수 있습니다 [SVG11].

기본값(base filter list)과 추가값(added filter list)을 나타내는 두 필터 값이 주어지면, 두 목록을 연결하여 반환합니다: ‘base filter list added filter list’.

아래 SVG 애니메이션 예시는 animate 요소 두 개가 filter 속성을 rect 요소에 대해 애니메이션합니다. 두 애니메이션 모두 누적(additive)이며, 10초의 지속 시간을 가집니다.
<rect width="200px" filter="none" ...>
  <animate attributeName="filter" from="blur(0px)" to="blur(10px)" dur="10s"
           additive="sum"/>
  <animate attributeName="filter" from="sepia(0)" to="sepia(1)" dur="10s"
           additive="sum"/>
</rect>

5초사용된 값 filterblur(5px) sepia(0.5)가 됩니다.

14.3. 누적

두 개의 필터 값 VaVb가 주어지면, 필터 값 Vb를 반환합니다.

15. 프라이버시 및 보안 고려사항

15.1. 오염된 필터 프리미티브

필터 연산의 타이밍이 필터링된 콘텐츠에서 도출된 픽셀 값이나 프라이버시 관련 정보가 포함될 수 있는 다른 소스와는 독립적이어야 합니다.

다음 filter primitive들은 필터링된 객체 자체 또는 CSS 스타일링과 같은 다른 소스에서 프라이버시 관련 정보가 포함될 수 있는 픽셀 값에 접근할 수 있습니다. 이러한 프리미티브는 "오염됨(tainted)"으로 플래그 처리되어야 합니다.

  1. feFlood 에서 지정된 값flood-color 속성에서 currentColor로 계산되는 경우,

  2. feDropShadow에서 지정된 값flood-color 속성에서 currentColor로 계산되는 경우,

  3. feDiffuseLighting에서 지정된 값lighting-color 속성에서 currentColor로 계산되는 경우

  4. feSpecularLighting에서 지정된 값lighting-color 속성에서 currentColor로 계산되는 경우,

  5. feImage에서, <url> 참조가 요소를 가리키거나 No-CORS 페치 모드로 리소스를 가져오는 경우

  6. 다음 filter primitive들: SourceGraphic, SourceAlpha, BackgroundImage, BackgroundAlpha, FillPaint, StrokePaint

feFlood, feDropShadow, feDiffuseLighting 그리고 feSpecularLighting<color> 속성 값을 가질 수 있는 하나 이상의 CSS 속성을 가진 프리미티브입니다. <color> 값에는 currentColor 키워드가 포함될 수 있습니다. 사용된 값 currentColorcolor 속성에서 파생됩니다. color:visited 의사 선택자로 설정될 수 있으므로, 프라이버시 관련 정보를 포함할 수 있고, 따라서 이러한 프리미티브는 오염됨(tainted)으로 표시해야 합니다.

feImage는 크로스 도메인 이미지와 SVG 그래픽 요소와 같은 문서 프래그먼트를 참조할 수 있습니다. 이러한 참조는 프라이버시 관련 정보를 포함할 수 있으므로 해당 프리미티브는 오염됨(tainted)으로 표시해야 합니다.

필터 프리미티브 SourceGraphic, SourceAlpha, BackgroundImage, BackgroundAlpha, FillPaint, StrokePaint는 SVG 그래픽 요소와 같은 문서 프래그먼트나 color 속성에서 직접 또는 간접적으로 파생될 수 있는 스타일 정보를 참조합니다. 따라서 이러한 프리미티브는 오염됨(tainted)으로 표시해야 합니다.

"오염됨" 플래그가 지정된 filter primitive를 입력으로 가지는 모든 filter primitive 역시 "오염됨"으로 표시되어야 합니다.

필터 연산은 입력 필터 프리미티브 중 하나라도 "오염됨"으로 플래그 처리된 경우, 픽셀 값과 무관하게 항상 동일한 시간만 소요되도록 구현되어야 합니다.

참고: 이 명세는 사용자 에이전트의 구현 피드백을 기반으로 필터 프리미티브에 대한 제한을 강화합니다.

15.2. feDisplacementMap 제한

feDisplacementMap가 입력으로 "오염됨" 플래그가 지정된 filter primitive를 가지고 있고, 이 입력 filter primitive가 displacement map(in2로 참조됨)으로 사용되는 경우, feDisplacementMap은 필터 연산을 진행하지 않고 pass through filter로 동작해야 합니다.

15.3. 출처(origin) 제한

사용자 에이전트는 잠재적으로 CORS가 활성화된 fetch 메서드를 [HTML5] 명세에 따라 filter 속성에 사용해야 합니다. 페치 시 "Anonymous" 모드를 사용하고, referrer 소스를 스타일시트의 URL로 설정하며, origin을 포함 문서의 URL로 설정해야 합니다. 이로 인해 네트워크 오류가 발생하면, none 값을 지정한 것과 동일한 효과가 나타납니다.

15.4. 타이밍 공격

위 규칙 중 어느 하나라도 준수하지 않으면, 공격자가 정보를 추론하여 타이밍 공격을 할 수 있습니다.

타이밍 공격은 연산이 이루어지는 시간의 차이를 분석해 보호된 콘텐츠에 대한 정보를 획득하는 방법입니다. 예를 들어 빨간 픽셀을 그릴 때 초록 픽셀보다 더 오래 걸린다면, 렌더링되는 요소의 대략적인 이미지를 콘텐츠에 직접 접근하지 않고도 복원할 수 있습니다. 보안 연구에 따르면 산술 연산의 타이밍 차이는 하드웨어 아키텍처나 컴파일러에 의해 발생할 수 있습니다 [ArTD].

부록 A: 더 이상 사용되지 않는 enable-background 속성

SVG 1.1에서는 enable-background 속성을 도입했습니다 [SVG11]. 이 속성은 filter region 아래의 배경을 filter 요소가 호출될 때 정의했습니다. 이 속성에서 정의한 개념은 현행 표준 작성 당시 CSS의 stacking context 모델과 호환되지 않는 것으로 확인되었습니다. UA는 enable-background 속성을 SVG 1.1에서 정의한 대로 구현할 수 있지만, 이 명세나 CSS Compositing and Blending [COMPOSITING-1]과는 호환되지 않습니다.

이 명세는 enable-background 속성을 지원하지 않습니다. UA는 대신 isolation 속성을 지원해야 합니다 [COMPOSITING-1].

부록 B: DOM 인터페이스

SVGFilterElement 인터페이스

SVGFilterElement 인터페이스는 filter 요소에 대응합니다.

interface SVGFilterElement : SVGElement {
  readonly attribute SVGAnimatedEnumeration filterUnits;
  readonly attribute SVGAnimatedEnumeration primitiveUnits;
  readonly attribute SVGAnimatedLength x;
  readonly attribute SVGAnimatedLength y;
  readonly attribute SVGAnimatedLength width;
  readonly attribute SVGAnimatedLength height;
};

SVGFilterElement includes SVGURIReference;
속성:
filterUnits, 타입 SVGAnimatedEnumeration, 읽기 전용

지정된 filterUnits 속성에 해당하며, filter 요소에서 사용됩니다. SVGUnitTypes에서 정의된 상수 중 하나를 사용합니다.

primitiveUnits, 타입 SVGAnimatedEnumeration, 읽기 전용

지정된 primitiveUnits 속성에 해당하며, filter 요소에서 사용됩니다. SVGUnitTypes에서 정의된 상수 중 하나를 사용합니다.

x, 타입 SVGAnimatedLength, 읽기 전용

지정된 x 속성에 해당하며, filter 요소에서 사용됩니다.

y, 타입 SVGAnimatedLength, 읽기 전용

지정된 y 속성에 해당하며, filter 요소에서 사용됩니다.

width, 타입 SVGAnimatedLength, 읽기 전용

지정된 width 속성에 해당하며, filter 요소에서 사용됩니다.

height, 타입 SVGAnimatedLength, 읽기 전용

지정된 height 속성에 해당하며, filter 요소에서 사용됩니다.

SVGFilterPrimitiveStandardAttributes 인터페이스

interface mixin SVGFilterPrimitiveStandardAttributes {
  readonly attribute SVGAnimatedLength x;
  readonly attribute SVGAnimatedLength y;
  readonly attribute SVGAnimatedLength width;
  readonly attribute SVGAnimatedLength height;
  readonly attribute SVGAnimatedString result;
};
속성:
x, 타입 SVGAnimatedLength, 읽기 전용

지정된 요소의 x 속성에 해당합니다.

y, 타입 SVGAnimatedLength, 읽기 전용

지정된 요소의 y 속성에 해당합니다.

width, 타입 SVGAnimatedLength, 읽기 전용

지정된 요소의 width 속성에 해당합니다.

height, 타입 SVGAnimatedLength, 읽기 전용

지정된 요소의 height 속성에 해당합니다.

result, 타입 SVGAnimatedString, 읽기 전용

지정된 요소의 result 속성에 해당합니다.

SVGFEBlendElement 인터페이스

SVGFEBlendElement 인터페이스는 feBlend 요소에 대응합니다.

interface SVGFEBlendElement : SVGElement {

  // Blend Mode Types
  const unsigned short SVG_FEBLEND_MODE_UNKNOWN = 0;
  const unsigned short SVG_FEBLEND_MODE_NORMAL = 1;
  const unsigned short SVG_FEBLEND_MODE_MULTIPLY = 2;
  const unsigned short SVG_FEBLEND_MODE_SCREEN = 3;
  const unsigned short SVG_FEBLEND_MODE_DARKEN = 4;
  const unsigned short SVG_FEBLEND_MODE_LIGHTEN = 5;
  const unsigned short SVG_FEBLEND_MODE_OVERLAY = 6;
  const unsigned short SVG_FEBLEND_MODE_COLOR_DODGE = 7;
  const unsigned short SVG_FEBLEND_MODE_COLOR_BURN = 8;
  const unsigned short SVG_FEBLEND_MODE_HARD_LIGHT = 9;
  const unsigned short SVG_FEBLEND_MODE_SOFT_LIGHT = 10;
  const unsigned short SVG_FEBLEND_MODE_DIFFERENCE = 11;
  const unsigned short SVG_FEBLEND_MODE_EXCLUSION = 12;
  const unsigned short SVG_FEBLEND_MODE_HUE = 13;
  const unsigned short SVG_FEBLEND_MODE_SATURATION = 14;
  const unsigned short SVG_FEBLEND_MODE_COLOR = 15;
  const unsigned short SVG_FEBLEND_MODE_LUMINOSITY = 16;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedEnumeration mode;
};

SVGFEBlendElement includes SVGFilterPrimitiveStandardAttributes;
“혼합 모드 타입” 그룹의 상수:
SVG_FEBLEND_MODE_UNKNOWN

이 타입은 미리 정의된 타입 중 하나가 아닙니다. 이 타입의 새 값을 정의하거나 기존 값을 이 타입으로 변경하려고 시도하는 것은 올바르지 않습니다.

SVG_FEBLEND_MODE_NORMAL

normal 값에 해당합니다.

SVG_FEBLEND_MODE_MULTIPLY

multiply 값에 해당합니다.

SVG_FEBLEND_MODE_SCREEN

screen 값에 해당합니다.

SVG_FEBLEND_MODE_DARKEN

darken 값에 해당합니다.

SVG_FEBLEND_MODE_LIGHTEN

lighten 값에 해당합니다.

SVG_FEBLEND_MODE_OVERLAY

overlay 값에 해당합니다.

SVG_FEBLEND_MODE_COLOR_DODGE

color-dodge 값에 해당합니다.

SVG_FEBLEND_MODE_COLOR_BURN

color-burn 값에 해당합니다.

SVG_FEBLEND_MODE_HARD_LIGHT

hard-light 값에 해당합니다.

SVG_FEBLEND_MODE_SOFT_LIGHT

soft-light 값에 해당합니다.

SVG_FEBLEND_MODE_DIFFERENCE

difference 값에 해당합니다.

SVG_FEBLEND_MODE_EXCLUSION

exclusion 값에 해당합니다.

SVG_FEBLEND_MODE_HUE

hue 값에 해당합니다.

SVG_FEBLEND_MODE_SATURATION

saturation 값에 해당합니다.

SVG_FEBLEND_MODE_COLOR

color 값에 해당합니다.

SVG_FEBLEND_MODE_LUMINOSITY

luminosity 값에 해당합니다.

속성:
in1, 타입 SVGAnimatedString, 읽기 전용

지정된 in 속성에 해당하며, feBlend 요소에서 사용됩니다.

in2, 타입 SVGAnimatedString, 읽기 전용

지정된 in2 속성에 해당하며, feBlend 요소에서 사용됩니다.

mode, 타입 SVGAnimatedEnumeration, 읽기 전용

지정된 mode 속성에 해당하며, feBlend 요소에서 사용됩니다. 이 인터페이스에 정의된 SVG_FEBLEND_MODE_* 상수 중 하나를 사용합니다.

SVGFEColorMatrixElement 인터페이스

SVGFEColorMatrixElement 인터페이스는 feColorMatrix 요소에 대응합니다.

interface SVGFEColorMatrixElement : SVGElement {

  // Color Matrix Types
  const unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
  const unsigned short SVG_FECOLORMATRIX_TYPE_MATRIX = 1;
  const unsigned short SVG_FECOLORMATRIX_TYPE_SATURATE = 2;
  const unsigned short SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
  const unsigned short SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedEnumeration type;
  readonly attribute SVGAnimatedNumberList values;
};

SVGFEColorMatrixElement includes SVGFilterPrimitiveStandardAttributes;
“컬러 매트릭스 타입” 그룹의 상수:
SVG_FECOLORMATRIX_TYPE_UNKNOWN

이 타입은 미리 정의된 타입 중 하나가 아닙니다. 이 타입의 새 값을 정의하거나 기존 값을 이 타입으로 변경하려고 시도하는 것은 올바르지 않습니다.

SVG_FECOLORMATRIX_TYPE_MATRIX

matrix 값에 해당합니다.

SVG_FECOLORMATRIX_TYPE_SATURATE

saturate 값에 해당합니다.

SVG_FECOLORMATRIX_TYPE_HUEROTATE

hueRotate 값에 해당합니다.

SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA

luminanceToAlpha 값에 해당합니다.

속성:
in1, 타입 SVGAnimatedString, 읽기 전용

지정된 in 속성에 해당하며, feColorMatrix 요소에서 사용됩니다.

type, 타입 SVGAnimatedEnumeration, 읽기 전용

지정된 type 속성에 해당하며, feColorMatrix 요소에서 사용됩니다. 이 인터페이스에 정의된 SVG_FECOLORMATRIX_TYPE_* 상수 중 하나를 사용합니다.

values, 타입 SVGAnimatedNumberList, 읽기 전용

지정된 values 속성에 해당하며, feColorMatrix 요소에서 사용됩니다.

SVGFEComponentTransferElement 인터페이스

SVGFEComponentTransferElement 인터페이스는 feComponentTransfer 요소에 대응합니다.

interface SVGFEComponentTransferElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};

SVGFEComponentTransferElement includes SVGFilterPrimitiveStandardAttributes;
속성:
in1, 타입 SVGAnimatedString, 읽기 전용

지정된 in 속성에 해당하며, feComponentTransfer 요소에서 사용됩니다.

SVGComponentTransferFunctionElement 인터페이스

이 인터페이스는 컴포넌트 전환 함수 인터페이스에서 사용하는 기본 인터페이스를 정의합니다.

interface SVGComponentTransferFunctionElement : SVGElement {

  // Component Transfer Types
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5;

  readonly attribute SVGAnimatedEnumeration type;
  readonly attribute SVGAnimatedNumberList tableValues;
  readonly attribute SVGAnimatedNumber slope;
  readonly attribute SVGAnimatedNumber intercept;
  readonly attribute SVGAnimatedNumber amplitude;
  readonly attribute SVGAnimatedNumber exponent;
  readonly attribute SVGAnimatedNumber offset;
};
“컴포넌트 전환 타입” 그룹의 상수:
SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN

이 타입은 미리 정의된 타입 중 하나가 아닙니다. 이 타입의 새 값을 정의하거나 기존 값을 이 타입으로 변경하려고 시도하는 것은 올바르지 않습니다.

SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY

identity 값에 해당합니다.

SVG_FECOMPONENTTRANSFER_TYPE_TABLE

table 값에 해당합니다.

SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE

discrete 값에 해당합니다.

SVG_FECOMPONENTTRANSFER_TYPE_LINEAR

linear 값에 해당합니다.

SVG_FECOMPONENTTRANSFER_TYPE_GAMMA

gamma 값에 해당합니다.

속성:
type, 타입 SVGAnimatedEnumeration, 읽기 전용

지정된 in 속성에 해당하며, feComponentTransfer 요소에서 사용됩니다. 이 인터페이스에 정의된 SVG_FECOMPONENTTRANSFER_TYPE_* 상수 중 하나를 사용합니다.

tableValues, 타입 SVGAnimatedNumberList, 읽기 전용

지정된 tableValues 속성에 해당하며, feComponentTransfer 요소에서 사용됩니다. 이 인터페이스에 정의된 SVG_FECOLORMATRIX_TYPE_* 상수 중 하나를 사용합니다.

slope, 타입 SVGAnimatedNumber, 읽기 전용

지정된 slope 속성에 해당하며, feComponentTransfer 요소에서 사용됩니다.

intercept, 타입 SVGAnimatedNumber, 읽기 전용

지정된 intercept 속성에 해당하며, feComponentTransfer 요소에서 사용됩니다.

amplitude, 타입 SVGAnimatedNumber, 읽기 전용

지정된 amplitude 속성에 해당하며, feComponentTransfer 요소에서 사용됩니다.

exponent, 타입 SVGAnimatedNumber, 읽기 전용

지정된 exponent 속성에 해당하며, feComponentTransfer 요소에서 사용됩니다.

offset, 타입 SVGAnimatedNumber, 읽기 전용

지정된 offset 속성에 해당하며, feComponentTransfer 요소에서 사용됩니다.

SVGFEFuncRElement 인터페이스

SVGFEFuncRElement 인터페이스는 feFuncR 요소에 대응합니다.

interface SVGFEFuncRElement : SVGComponentTransferFunctionElement {
};

SVGFEFuncGElement 인터페이스

SVGFEFuncGElement 인터페이스는 feFuncG 요소에 대응합니다.

interface SVGFEFuncGElement : SVGComponentTransferFunctionElement {
};

SVGFEFuncBElement 인터페이스

SVGFEFuncBElement 인터페이스는 feFuncB 요소에 대응합니다.

interface SVGFEFuncBElement : SVGComponentTransferFunctionElement {
};

SVGFEFuncAElement 인터페이스

SVGFEFuncAElement 인터페이스는 feFuncA 요소에 대응합니다.

interface SVGFEFuncAElement : SVGComponentTransferFunctionElement {
};

SVGFECompositeElement 인터페이스

SVGFECompositeElement 인터페이스는 feComposite 요소에 대응합니다.

interface SVGFECompositeElement : SVGElement {

  // Composite Operators
  const unsigned short SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_OVER = 1;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_IN = 2;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_OUT = 3;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_ATOP = 4;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_XOR = 5;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedEnumeration operator;
  readonly attribute SVGAnimatedNumber k1;
  readonly attribute SVGAnimatedNumber k2;
  readonly attribute SVGAnimatedNumber k3;
  readonly attribute SVGAnimatedNumber k4;
};

SVGFECompositeElement includes SVGFilterPrimitiveStandardAttributes;
“합성 연산자” 그룹의 상수:
SVG_FECOMPOSITE_OPERATOR_UNKNOWN

이 타입은 미리 정의된 타입 중 하나가 아닙니다. 이 타입의 새 값을 정의하거나 기존 값을 이 타입으로 변경하려고 시도하는 것은 올바르지 않습니다.

SVG_FECOMPOSITE_OPERATOR_OVER

over 값에 해당합니다.

SVG_FECOMPOSITE_OPERATOR_IN

in 값에 해당합니다.

SVG_FECOMPOSITE_OPERATOR_OUT

out 값에 해당합니다.

SVG_FECOMPOSITE_OPERATOR_ATOP

atop 값에 해당합니다.

SVG_FECOMPOSITE_OPERATOR_XOR

xor 값에 해당합니다.

SVG_FECOMPOSITE_OPERATOR_ARITHMETIC

arithmetic 값에 해당합니다.

속성:
in1, 타입 SVGAnimatedString, 읽기 전용

지정된 in 속성에 해당하며, feComposite 요소에서 사용됩니다.

in2, 타입 SVGAnimatedString, 읽기 전용

지정된 in2 속성에 해당하며, feComposite 요소에서 사용됩니다.

operator, 타입 SVGAnimatedEnumeration, 읽기 전용

지정된 operator 속성에 해당하며, feComposite 요소에서 사용됩니다.

k1, 타입 SVGAnimatedNumber, 읽기 전용

지정된 k1 속성에 해당하며, feComposite 요소에서 사용됩니다.

k2, 타입 SVGAnimatedNumber, 읽기 전용

지정된 k2 속성에 해당하며, feComposite 요소에서 사용됩니다.

k3, 타입 SVGAnimatedNumber, 읽기 전용

지정된 k3 속성에 해당하며, feComposite 요소에서 사용됩니다.

k4, 타입 SVGAnimatedNumber, 읽기 전용

지정된 k4 속성에 해당하며, feComposite 요소에서 사용됩니다.

SVGFEConvolveMatrixElement 인터페이스

SVGFEConvolveMatrixElement 인터페이스는 feConvolveMatrix 요소에 대응합니다.

interface SVGFEConvolveMatrixElement : SVGElement {

  // Edge Mode Values
  const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
  const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
  const unsigned short SVG_EDGEMODE_WRAP = 2;
  const unsigned short SVG_EDGEMODE_NONE = 3;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedInteger orderX;
  readonly attribute SVGAnimatedInteger orderY;
  readonly attribute SVGAnimatedNumberList kernelMatrix;
  readonly attribute SVGAnimatedNumber divisor;
  readonly attribute SVGAnimatedNumber bias;
  readonly attribute SVGAnimatedInteger targetX;
  readonly attribute SVGAnimatedInteger targetY;
  readonly attribute SVGAnimatedEnumeration edgeMode;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
  readonly attribute SVGAnimatedBoolean preserveAlpha;
};

SVGFEConvolveMatrixElement includes SVGFilterPrimitiveStandardAttributes;
“에지 모드 값” 그룹의 상수:
SVG_EDGEMODE_UNKNOWN

이 타입은 미리 정의된 타입 중 하나가 아닙니다. 이 타입의 새 값을 정의하거나 기존 값을 이 타입으로 변경하려고 시도하는 것은 올바르지 않습니다.

SVG_EDGEMODE_DUPLICATE

duplicate 값에 해당합니다.

SVG_EDGEMODE_WRAP

wrap 값에 해당합니다.

SVG_EDGEMODE_NONE

none 값에 해당합니다.

속성:
in1, 타입 SVGAnimatedString, 읽기 전용

지정된 in 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

orderX, 타입 SVGAnimatedInteger, 읽기 전용

지정된 order 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

orderY, 타입 SVGAnimatedInteger, 읽기 전용

지정된 order 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

kernelMatrix, 타입 SVGAnimatedNumberList, 읽기 전용

지정된 kernelMatrix 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

divisor, 타입 SVGAnimatedNumber, 읽기 전용

지정된 divisor 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

bias, 타입 SVGAnimatedNumber, 읽기 전용

지정된 bias 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

targetX, 타입 SVGAnimatedInteger, 읽기 전용

지정된 targetX 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

targetY, 타입 SVGAnimatedInteger, 읽기 전용

지정된 targetY 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

edgeMode, 타입 SVGAnimatedEnumeration, 읽기 전용

지정된 edgeMode 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

kernelUnitLengthX, 타입 SVGAnimatedNumber, 읽기 전용

지정된 kernelUnitLength 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

kernelUnitLengthY, 타입 SVGAnimatedNumber, 읽기 전용

지정된 kernelUnitLength 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

preserveAlpha, 타입 SVGAnimatedBoolean, 읽기 전용

지정된 preserveAlpha 속성에 해당하며, feConvolveMatrix 요소에서 사용됩니다.

SVGFEDiffuseLightingElement 인터페이스

SVGFEDiffuseLightingElement 인터페이스는 feDiffuseLighting 요소에 대응합니다.

interface SVGFEDiffuseLightingElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber surfaceScale;
  readonly attribute SVGAnimatedNumber diffuseConstant;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
};

SVGFEDiffuseLightingElement includes SVGFilterPrimitiveStandardAttributes;
속성:
in1, 타입 SVGAnimatedString, 읽기 전용

지정된 in 속성에 해당하며, feDiffuseLighting 요소에서 사용됩니다.

surfaceScale, 타입 SVGAnimatedNumber, 읽기 전용

지정된 surfaceScale 속성에 해당하며, feDiffuseLighting 요소에서 사용됩니다.

diffuseConstant, 타입 SVGAnimatedNumber, 읽기 전용

지정된 diffuseConstant 속성에 해당하며, feDiffuseLighting 요소에서 사용됩니다.

kernelUnitLengthX, 타입 SVGAnimatedNumber, 읽기 전용

지정된 kernelUnitLength 속성에 해당하며, feDiffuseLighting 요소에서 사용됩니다.

kernelUnitLengthY, 타입 SVGAnimatedNumber, 읽기 전용

지정된 kernelUnitLength 속성에 해당하며, feDiffuseLighting 요소에서 사용됩니다.

SVGFEDistantLightElement 인터페이스

SVGFEDistantLightElement 인터페이스는 feDistantLight 요소에 대응합니다.

interface SVGFEDistantLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber azimuth;
  readonly attribute SVGAnimatedNumber elevation;
};
속성:
azimuth, 타입 SVGAnimatedNumber, 읽기 전용

지정된 azimuth 속성에 해당하며, feDistantLight 요소에서 사용됩니다.

elevation, 타입 SVGAnimatedNumber, 읽기 전용

지정된 elevation 속성에 해당하며, feDistantLight 요소에서 사용됩니다.

SVGFEPointLightElement 인터페이스

SVGFEPointLightElement 인터페이스는 fePointLight 요소에 대응합니다.

interface SVGFEPointLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber x;
  readonly attribute SVGAnimatedNumber y;
  readonly attribute SVGAnimatedNumber z;
};
속성:
x, 타입 SVGAnimatedNumber, 읽기 전용

지정된 x 속성에 해당하며, fePointLight 요소에서 사용됩니다.

y, 타입 SVGAnimatedNumber, 읽기 전용

지정된 y 속성에 해당하며, fePointLight 요소에서 사용됩니다.

z, 타입 SVGAnimatedNumber, 읽기 전용

지정된 z 속성에 해당하며, fePointLight 요소에서 사용됩니다.

SVGFESpotLightElement 인터페이스

SVGFESpotLightElement 인터페이스는 feSpotLight 요소에 대응합니다.

interface SVGFESpotLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber x;
  readonly attribute SVGAnimatedNumber y;
  readonly attribute SVGAnimatedNumber z;
  readonly attribute SVGAnimatedNumber pointsAtX;
  readonly attribute SVGAnimatedNumber pointsAtY;
  readonly attribute SVGAnimatedNumber pointsAtZ;
  readonly attribute SVGAnimatedNumber specularExponent;
  readonly attribute SVGAnimatedNumber limitingConeAngle;
};
속성:
x, 타입 SVGAnimatedNumber, 읽기 전용

지정된 x 속성에 해당하며, feSpotLight 요소에서 사용됩니다.

y, 타입 SVGAnimatedNumber, 읽기 전용

지정된 y 속성에 해당하며, feSpotLight 요소에서 사용됩니다.

z, 타입 SVGAnimatedNumber, 읽기 전용

지정된 z 속성에 해당하며, feSpotLight 요소에서 사용됩니다.

pointsAtX, 타입 SVGAnimatedNumber, 읽기 전용

지정된 pointsAtX 속성에 해당하며, feSpotLight 요소에서 사용됩니다.

pointsAtY, 타입 SVGAnimatedNumber, 읽기 전용

지정된 pointsAtY 속성에 해당하며, feSpotLight 요소에서 사용됩니다.

pointsAtZ, 타입 SVGAnimatedNumber, 읽기 전용

지정된 pointsAtZ 속성에 해당하며, feSpotLight 요소에서 사용됩니다.

specularExponent, 타입 SVGAnimatedNumber, 읽기 전용

지정된 specularExponent 속성에 해당하며, feSpotLight 요소에서 사용됩니다.

limitingConeAngle, 타입 SVGAnimatedNumber, 읽기 전용

지정된 limitingConeAngle 속성에 해당하며, feSpotLight 요소에서 사용됩니다.

SVGFEDisplacementMapElement 인터페이스

SVGFEDisplacementMapElement 인터페이스는 feDisplacementMap 요소에 대응합니다.

interface SVGFEDisplacementMapElement : SVGElement {

  // Channel Selectors
  const unsigned short SVG_CHANNEL_UNKNOWN = 0;
  const unsigned short SVG_CHANNEL_R = 1;
  const unsigned short SVG_CHANNEL_G = 2;
  const unsigned short SVG_CHANNEL_B = 3;
  const unsigned short SVG_CHANNEL_A = 4;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedNumber scale;
  readonly attribute SVGAnimatedEnumeration xChannelSelector;
  readonly attribute SVGAnimatedEnumeration yChannelSelector;
};

SVGFEDisplacementMapElement includes SVGFilterPrimitiveStandardAttributes;
“채널 선택자” 그룹의 상수:
SVG_CHANNEL_UNKNOWN

이 타입은 미리 정의된 타입 중 하나가 아닙니다. 이 타입의 새 값을 정의하거나 기존 값을 이 타입으로 변경하려고 시도하는 것은 올바르지 않습니다.

SVG_CHANNEL_R

R 값에 해당합니다.

SVG_CHANNEL_G

G 값에 해당합니다.

SVG_CHANNEL_B

B 값에 해당합니다.

SVG_CHANNEL_A

A 값에 해당합니다.

속성:
in1, 타입 SVGAnimatedString, 읽기 전용

지정된 in 속성에 해당하며, feDisplacementMap 요소에서 사용됩니다.

in2, 타입 SVGAnimatedString, 읽기 전용

지정된 in2 속성에 해당하며, feDisplacementMap 요소에서 사용됩니다.

scale, 타입 SVGAnimatedNumber, 읽기 전용

지정된 scale 속성에 해당하며, feDisplacementMap 요소에서 사용됩니다.

xChannelSelector, 타입 SVGAnimatedEnumeration, 읽기 전용

지정된 xChannelSelector 속성에 해당하며, feDisplacementMap 요소에서 사용됩니다. 이 인터페이스에 정의된 SVG_CHANNEL_* 상수 중 하나를 사용합니다.

yChannelSelector, 타입 SVGAnimatedEnumeration, 읽기 전용

지정된 yChannelSelector 속성에 해당하며, feDisplacementMap 요소에서 사용됩니다. 이 인터페이스에 정의된 SVG_CHANNEL_* 상수 중 하나를 사용합니다.

SVGFEDropShadowElement 인터페이스

SVGFEDropShadowElement 인터페이스는 feDropShadow 요소에 대응합니다.

interface SVGFEDropShadowElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber dx;
  readonly attribute SVGAnimatedNumber dy;
  readonly attribute SVGAnimatedNumber stdDeviationX;
  readonly attribute SVGAnimatedNumber stdDeviationY;

  void setStdDeviation(float stdDeviationX, float stdDeviationY);
};

SVGFEDropShadowElement includes SVGFilterPrimitiveStandardAttributes;
속성:
in1, 타입 SVGAnimatedString, 읽기 전용

지정된 in 속성에 해당하며, feDropShadow 요소에서 사용됩니다.

dx, 타입 SVGAnimatedNumber, 읽기 전용

지정된 dx 속성에 해당하며, feDropShadow 요소에서 사용됩니다.

dy, 타입 SVGAnimatedNumber, 읽기 전용

지정된 dy 속성에 해당하며, feDropShadow 요소에서 사용됩니다.

stdDeviationX, 타입 SVGAnimatedNumber, 읽기 전용

지정된 stdDeviation 속성에 해당하며, feDropShadow 요소에서 사용됩니다. stdDeviation 속성의 X 성분을 포함합니다.

stdDeviationY, 타입 SVGAnimatedNumber, 읽기 전용

지정된 stdDeviation 속성에 해당하며, feDropShadow 요소에서 사용됩니다. stdDeviation 속성의 Y 성분을 포함합니다.

메서드:
setStdDeviation(stdDeviationX, stdDeviationY)

stdDeviation 속성의 값을 설정합니다.

stdDeviationX

stdDeviation 속성의 X 성분.

stdDeviationY

stdDeviation 속성의 Y 성분.

SVGFEFloodElement 인터페이스

SVGFEFloodElement 인터페이스는 feFlood 요소에 대응합니다.

interface SVGFEFloodElement : SVGElement {
};

SVGFEFloodElement includes SVGFilterPrimitiveStandardAttributes;

SVGFEGaussianBlurElement 인터페이스

SVGFEGaussianBlurElement 인터페이스는 feGaussianBlur 요소에 대응합니다.

interface SVGFEGaussianBlurElement : SVGElement {

  // Edge Mode Values
  const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
  const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
  const unsigned short SVG_EDGEMODE_WRAP = 2;
  const unsigned short SVG_EDGEMODE_NONE = 3;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber stdDeviationX;
  readonly attribute SVGAnimatedNumber stdDeviationY;
  readonly attribute SVGAnimatedEnumeration edgeMode;

  void setStdDeviation(float stdDeviationX, float stdDeviationY);
};

SVGFEGaussianBlurElement includes SVGFilterPrimitiveStandardAttributes;
“에지 모드 값” 그룹의 상수:
SVG_EDGEMODE_UNKNOWN

이 타입은 미리 정의된 타입 중 하나가 아닙니다. 이 타입의 새 값을 정의하거나 기존 값을 이 타입으로 변경하려고 시도하는 것은 올바르지 않습니다.

SVG_EDGEMODE_DUPLICATE

duplicate 값에 해당합니다.

SVG_EDGEMODE_WRAP

wrap 값에 해당합니다.

SVG_EDGEMODE_NONE

none 값에 해당합니다.

속성:
in1, 타입 SVGAnimatedString, 읽기 전용

지정된 in 속성에 해당하며, feGaussianBlur 요소에서 사용됩니다.

stdDeviationX, 타입 SVGAnimatedNumber, 읽기 전용

지정된 stdDeviation 속성에 해당하며, feGaussianBlur 요소에서 사용됩니다. stdDeviation 속성의 X 성분을 포함합니다.

stdDeviationY, 타입 SVGAnimatedNumber, 읽기 전용

지정된 stdDeviation 속성에 해당하며, feGaussianBlur 요소에서 사용됩니다. stdDeviation 속성의 Y 성분을 포함합니다.

edgeMode, 타입 SVGAnimatedEnumeration, 읽기 전용

지정된 edgeMode 속성에 해당하며, feGaussianBlur 요소에서 사용됩니다. 이 인터페이스에 정의된 SVG_EDGEMODE_* 상수 중 하나를 사용합니다.

메서드:
setStdDeviation(stdDeviationX, stdDeviationY)

stdDeviation 속성의 값을 설정합니다.

stdDeviationX

stdDeviation 속성의 X 성분.

stdDeviationY

stdDeviation 속성의 Y 성분.

SVGFEImageElement 인터페이스

SVGFEImageElement 인터페이스는 feImage 요소에 대응합니다.

interface SVGFEImageElement : SVGElement {
  readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
  readonly attribute SVGAnimatedString crossOrigin;
};

SVGFEImageElement includes SVGFilterPrimitiveStandardAttributes;
SVGFEImageElement includes SVGURIReference;
속성:
preserveAspectRatio, 타입 SVGAnimatedPreserveAspectRatio, 읽기 전용

지정된 preserveAspectRatio 속성에 해당하며, feImage 요소에서 사용됩니다.

crossOrigin, 타입 SVGAnimatedString, 읽기 전용

crossOrigin IDL 속성은 crossorigin 콘텐츠 속성을 반영해야 하며, 알려진 값만으로 제한됩니다.

SVGFEMergeElement 인터페이스

SVGFEMergeElement 인터페이스는 feMerge 요소에 대응합니다.

interface SVGFEMergeElement : SVGElement {
};

SVGFEMergeElement includes SVGFilterPrimitiveStandardAttributes;

SVGFEMergeNodeElement 인터페이스

SVGFEMergeNodeElement 인터페이스는 feMergeNode 요소에 대응합니다.

interface SVGFEMergeNodeElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};
속성:
in1, 타입 SVGAnimatedString, 읽기 전용

지정된 in 속성에 해당하며, feMergeNode 요소에서 사용됩니다.

인터페이스 SVGFEMorphologyElement

SVGFEMorphologyElement 인터페이스는 feMorphology 요소에 해당합니다.

interface SVGFEMorphologyElement : SVGElement {

  // Morphology Operators
  const unsigned short SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
  const unsigned short SVG_MORPHOLOGY_OPERATOR_ERODE = 1;
  const unsigned short SVG_MORPHOLOGY_OPERATOR_DILATE = 2;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedEnumeration operator;
  readonly attribute SVGAnimatedNumber radiusX;
  readonly attribute SVGAnimatedNumber radiusY;
};

SVGFEMorphologyElement includes SVGFilterPrimitiveStandardAttributes;
“형태학 연산자” 그룹 내 상수:
SVG_MORPHOLOGY_OPERATOR_UNKNOWN

이 타입은 미리 정의된 타입 중 하나가 아닙니다. 이 타입의 새로운 값을 정의하거나 기존 값을 이 타입으로 변경하는 것은 유효하지 않습니다.

SVG_MORPHOLOGY_OPERATOR_ERODE

erode 값에 해당합니다.

SVG_MORPHOLOGY_OPERATOR_DILATE

dilate 값에 해당합니다.

속성:
in1, 타입 SVGAnimatedString, 읽기 전용

주어진 in 속성 및 feMorphology 요소에 해당합니다.

operator, 타입 SVGAnimatedEnumeration, 읽기 전용

주어진 operator 속성 및 feMorphology 요소에 해당합니다. 이 인터페이스에 정의된 SVG_MORPHOLOGY_OPERATOR_* 상수 중 하나를 사용합니다.

radiusX, 타입 SVGAnimatedNumber, 읽기 전용

주어진 radius 속성 및 feMorphology 요소에 해당합니다. radius 속성의 X 컴포넌트를 포함합니다.

radiusY, 타입 SVGAnimatedNumber, 읽기 전용

주어진 radius 속성 및 feMorphology 요소에 해당합니다. radius 속성의 Y 컴포넌트를 포함합니다.

인터페이스 SVGFEOffsetElement

SVGFEOffsetElement 인터페이스는 feOffset 요소에 해당합니다.

interface SVGFEOffsetElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber dx;
  readonly attribute SVGAnimatedNumber dy;
};

SVGFEOffsetElement includes SVGFilterPrimitiveStandardAttributes;
속성:
in1, 타입 SVGAnimatedString, 읽기 전용

주어진 in 속성 및 feOffset 요소에 해당합니다.

dx, 타입 SVGAnimatedNumber, 읽기 전용

주어진 dx 속성 및 feOffset 요소에 해당합니다.

dy, 타입 SVGAnimatedNumber, 읽기 전용

주어진 dy 속성 및 feOffset 요소에 해당합니다.

인터페이스 SVGFESpecularLightingElement

SVGFESpecularLightingElement 인터페이스는 feSpecularLighting 요소에 해당합니다.

interface SVGFESpecularLightingElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber surfaceScale;
  readonly attribute SVGAnimatedNumber specularConstant;
  readonly attribute SVGAnimatedNumber specularExponent;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
};

SVGFESpecularLightingElement includes SVGFilterPrimitiveStandardAttributes;
속성:
in1, 타입 SVGAnimatedString, 읽기 전용

주어진 in 속성 및 feSpecularLighting 요소에 해당합니다.

surfaceScale, 타입 SVGAnimatedNumber, 읽기 전용

주어진 surfaceScale 속성 및 feSpecularLighting 요소에 해당합니다.

specularConstant, 타입 SVGAnimatedNumber, 읽기 전용

주어진 specularConstant 속성 및 feSpecularLighting 요소에 해당합니다.

specularExponent, 타입 SVGAnimatedNumber, 읽기 전용

주어진 specularExponent 속성 및 feSpecularLighting 요소에 해당합니다.

kernelUnitLengthX, 타입 SVGAnimatedNumber, 읽기 전용

주어진 kernelUnitLength 속성 및 feSpecularLighting 요소에 해당합니다.

kernelUnitLengthY, 타입 SVGAnimatedNumber, 읽기 전용

주어진 kernelUnitLength 속성 및 feSpecularLighting 요소에 해당합니다.

인터페이스 SVGFETileElement

SVGFETileElement 인터페이스는 feTile 요소에 해당합니다.

interface SVGFETileElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};

SVGFETileElement includes SVGFilterPrimitiveStandardAttributes;
속성:
in1, 타입 SVGAnimatedString, 읽기 전용

주어진 in 속성 및 feTile 요소에 해당합니다.

인터페이스 SVGFETurbulenceElement

SVGFETurbulenceElement 인터페이스는 feTurbulence 요소에 해당합니다.

interface SVGFETurbulenceElement : SVGElement {

  // 터뷸런스 타입
  const unsigned short SVG_TURBULENCE_TYPE_UNKNOWN = 0;
  const unsigned short SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
  const unsigned short SVG_TURBULENCE_TYPE_TURBULENCE = 2;

  // 스티치 옵션
  const unsigned short SVG_STITCHTYPE_UNKNOWN = 0;
  const unsigned short SVG_STITCHTYPE_STITCH = 1;
  const unsigned short SVG_STITCHTYPE_NOSTITCH = 2;

  readonly attribute SVGAnimatedNumber baseFrequencyX;
  readonly attribute SVGAnimatedNumber baseFrequencyY;
  readonly attribute SVGAnimatedInteger numOctaves;
  readonly attribute SVGAnimatedNumber seed;
  readonly attribute SVGAnimatedEnumeration stitchTiles;
  readonly attribute SVGAnimatedEnumeration type;
};

SVGFETurbulenceElement includes SVGFilterPrimitiveStandardAttributes;
“터뷸런스 타입” 그룹 내 상수:
SVG_TURBULENCE_TYPE_UNKNOWN

이 타입은 미리 정의된 타입 중 하나가 아닙니다. 이 타입의 새로운 값을 정의하거나 기존 값을 이 타입으로 변경하는 것은 유효하지 않습니다.

SVG_TURBULENCE_TYPE_FRACTALNOISE

fractalNoise 값에 해당합니다.

SVG_TURBULENCE_TYPE_TURBULENCE

turbulence 값에 해당합니다.

“스티치 옵션” 그룹 내 상수:
SVG_STITCHTYPE_UNKNOWN

이 타입은 미리 정의된 타입 중 하나가 아닙니다. 이 타입의 새로운 값을 정의하거나 기존 값을 이 타입으로 변경하는 것은 유효하지 않습니다.

SVG_STITCHTYPE_STITCH

stitch 값에 해당합니다.

SVG_STITCHTYPE_NOSTITCH

noStitch 값에 해당합니다.

속성:
baseFrequencyX, 타입 SVGAnimatedNumber, 읽기 전용

주어진 baseFrequency 속성 및 feTurbulence 요소에 해당합니다. baseFrequency 속성의 X 컴포넌트를 포함합니다.

baseFrequencyY, 타입 SVGAnimatedNumber, 읽기 전용

주어진 baseFrequency 속성 및 feTurbulence 요소에 해당합니다. baseFrequency 속성의 Y 컴포넌트를 포함합니다.

numOctaves, 타입 SVGAnimatedInteger, 읽기 전용

주어진 numOctaves 속성 및 feTurbulence 요소에 해당합니다.

seed, 타입 SVGAnimatedNumber, 읽기 전용

주어진 seed 속성 및 feTurbulence 요소에 해당합니다.

stitchTiles, 타입 SVGAnimatedEnumeration, 읽기 전용

주어진 stitchTiles 속성 및 feTurbulence 요소에 해당합니다. 이 인터페이스에 정의된 SVG_TURBULENCE_TYPE_* 상수 중 하나를 사용합니다.

type, 타입 SVGAnimatedEnumeration, 읽기 전용

주어진 type 속성 및 feTurbulence 요소에 해당합니다. 이 인터페이스에 정의된 SVG_STITCHTYPE_* 상수 중 하나를 사용합니다.

변경 사항

다음은 2014년 11월 25일 현행 표준 초안 이후로 이루어진 주요 변경 사항입니다.

다음은 2013년 11월 26일 현행 표준 초안 이후로 이루어진 주요 변경 사항입니다.

다음은 2012년 10월 25일 현행 표준 초안 이후로 이루어진 주요 변경 사항입니다.

더 자세하고 장기적인 변경 사항은 ChangeLog에서 볼 수 있습니다.

감사의 글

편집자들은 Robert O’Callahan, Coralie Mercier, Chris Lilley, Nikos Andronikos, Stephen Chenney, Simon Fraser, Tavmjong Bah, Robert Longson, Cameron McCormack, Brad Kemper, Tab Atkins, Brian Birtles, Michael Mullany, Rik Cabanier, Anne van Kesteren, Boris Zbarsky, Kristopher Giesing, Stephen White, Jasper van de Gronde, Kang-Hao Lu, Paul LeBeau, Debarshi Ray, Jarek Foksa, Sebastian Zartner, Yuqian Li, Amelia Bellamy-Royds 및 Max Vujovic에게 꼼꼼한 리뷰, 의견, 교정에 감사드립니다.

적합성

문서 규약

적합성 요구 사항은 설명적인 단언과 RFC 2119 용어의 조합으로 표현됩니다. "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL" 등의 주요 단어는 이 문서의 규범적 부분에서 RFC 2119에 설명된 대로 해석되어야 합니다. 단, 가독성을 위해 이 명세에서는 이러한 단어를 모두 대문자로 표기하지 않습니다.

이 명세의 모든 텍스트는 명시적으로 비규범적, 예시, 또는 주석으로 표시된 섹션을 제외하고는 규범적입니다. [RFC2119]

이 명세의 예시는 "예를 들어"라는 문구로 시작하거나, class="example"로 구분되어 규범적 텍스트와 구분됩니다. 예를 들면 다음과 같습니다:

이것은 정보 제공을 위한 예시입니다.

정보 제공용 주석은 "참고"라는 단어로 시작하며 class="note"로 구분되어 규범적 텍스트와 구분됩니다. 예를 들면 다음과 같습니다:

참고, 이것은 정보 제공용 주석입니다.

권고 사항은 규범적 섹션으로 특별한 주의를 환기시키기 위해 스타일링되며, <strong class="advisement">로 규범적 텍스트와 구분됩니다. 예를 들면 다음과 같습니다: UA는 접근 가능한 대체 수단을 제공해야 합니다.

적합성 클래스

이 명세에 대한 적합성은 세 가지 적합성 클래스로 정의됩니다:

스타일 시트
CSS 스타일 시트.
렌더러
UA는 스타일 시트의 의미를 해석하고, 이를 사용하는 문서를 렌더링합니다.
저작 도구
UA는 스타일 시트를 작성합니다.

스타일 시트가 이 명세를 준수하려면, 이 모듈에 정의된 구문을 사용하는 모든 문이 이 모듈에 정의된 각 기능의 개별 문법 및 일반 CSS 문법에 따라 유효해야 합니다.

렌더러가 이 명세를 준수하려면, 해당 명세에 정의된 대로 스타일 시트를 해석하는 것 외에도, 이 명세에 정의된 모든 기능을 올바르게 구문 분석하고 문서를 해당 기능에 맞게 렌더링해야 합니다. 단, UA가 디바이스의 한계로 인해 문서를 올바르게 렌더링하지 못하더라도, UA가 비적합하다고 볼 수는 없습니다. (예를 들어, UA는 흑백 모니터에서 색상을 렌더링할 필요가 없습니다.)

저작 도구가 이 명세를 준수하려면, 스타일 시트를 이 모듈에 정의된 각 기능의 개별 문법 및 일반 CSS 문법에 맞게 문법적으로 올바르게 작성하고, 이 모듈에 기술된 스타일 시트의 모든 기타 적합성 요구 사항을 충족해야 합니다.

CSS의 책임 있는 구현을 위한 요구 사항

다음 섹션에서는 현재와 미래의 상호 운용성을 촉진하는 방식으로 CSS를 책임 있게 구현하기 위한 여러 적합성 요구 사항을 정의합니다.

부분 구현

저자가 전방 호환 구문 분석 규칙을 활용하여 대체 값을 지정할 수 있도록, CSS 렌더러는 지원할 수 없는 at-rule, 속성, 속성 값, 키워드 및 그 밖의 구문 구조를 적절히 무시해야 하며, 무효로 간주해야 합니다. 특히, 사용자 에이전트는 다중 값 속성 선언에서 지원되지 않는 속성 값을 선택적으로 무시하고 지원되는 값만 적용해서는 안 됩니다: 하나의 값이라도 무효(지원되지 않는 값이어야 함)로 간주되면, CSS는 전체 선언을 무시해야 함을 요구합니다.

불안정 및 독점 기능 구현

향후 안정적인 CSS 기능과의 충돌을 방지하기 위해, CSSWG는 모범 사례를 따를 것을 권장합니다. 이는 불안정 기능 및 독점적 확장 CSS의 구현에 해당합니다.

CR 수준 기능 구현

명세가 후보 권고(Candidate Recommendation) 단계에 도달하면, 구현자는 명세에 따라 올바르게 구현했음을 입증할 수 있는 모든 CR 수준 기능에 대해 접두어 없는 구현을 출시해야 하며, 해당 기능의 접두어 버전을 노출하는 것을 피해야 합니다.

CSS의 구현 간 상호 운용성을 확립하고 유지하기 위해, CSS 작업 그룹은 실험적이지 않은 CSS 렌더러가 W3C에 구현 보고서(필요하다면 해당 테스트 케이스도 함께)를 제출한 후 CSS 기능의 접두어 없는 구현을 출시할 것을 요청합니다. W3C에 제출된 테스트 케이스는 CSS 작업 그룹의 검토 및 수정 대상이 됩니다.

테스트 케이스 및 구현 보고서 제출에 대한 추가 정보는 CSS 작업 그룹 웹사이트 https://www.w3.org/Style/CSS/Test/에서 확인할 수 있습니다. 문의 사항은 public-css-testsuite@w3.org 메일링 리스트로 문의하십시오.

색인

이 명세에서 정의된 용어

참조로 정의된 용어

참고 문헌

규범적 참고 문헌

[COMPOSITING-1]
Rik Cabanier; Nikos Andronikos. Compositing and Blending Level 1. 2015년 1월 13일. CR. URL: https://www.w3.org/TR/compositing-1/
[CSS-CASCADE-4]
Elika Etemad; Tab Atkins Jr.. CSS Cascading and Inheritance Level 4. 2018년 8월 28일. CR. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley. CSS Color Module Level 4. 2016년 7월 5일. WD. URL: https://www.w3.org/TR/css-color-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3. 2018년 8월 28일. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-FONTS-3]
John Daggett; Myles Maxfield; Chris Lilley. CSS Fonts Module Level 3. 2018년 9월 20일. REC. URL: https://www.w3.org/TR/css-fonts-3/
[CSS-FONTS-4]
John Daggett; Myles Maxfield; Chris Lilley. CSS Fonts Module Level 4. 2018년 9월 20일. WD. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSS Masking Module Level 1. 2014년 8월 26일. CR. URL: https://www.w3.org/TR/css-masking-1/
[CSS-OVERFLOW-3]
David Baron; Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2018년 7월 31일. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-POSITION-3]
Rossen Atanassov; Arron Eicholz. CSS Positioned Layout Module Level 3. 2016년 5월 17일. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS Text Module Level 3. 2018년 12월 12일. WD. URL: https://www.w3.org/TR/css-text-3/
[CSS-TEXT-DECOR-3]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 3. 2018년 7월 3일. CR. URL: https://www.w3.org/TR/css-text-decor-3/
[CSS-TRANSFORMS-1]
Simon Fraser; et al. CSS Transforms Module Level 1. 2018년 11월 30일. WD. URL: https://www.w3.org/TR/css-transforms-1/
[CSS-UI-3]
Tantek Çelik; Florian Rivoal. CSS Basic User Interface Module Level 3 (CSS3 UI). 2018년 6월 21일. REC. URL: https://www.w3.org/TR/css-ui-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2018년 10월 10일. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2018년 5월 24일. CR. URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2018년 5월 24일. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS21]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011년 6월 7일. REC. URL: https://www.w3.org/TR/CSS2/
[CSS3-IMAGES]
Elika Etemad; Tab Atkins Jr.. CSS Image Values and Replaced Content Module Level 3. 2012년 4월 17일. CR. URL: https://www.w3.org/TR/css3-images/
[CSS3BG]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2017년 10월 17일. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS3COLOR]
Tantek Çelik; Chris Lilley; David Baron. CSS Color Module Level 3. 2018년 6월 19일. REC. URL: https://www.w3.org/TR/css-color-3/
[CSS3VAL]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2018년 8월 14일. CR. URL: https://www.w3.org/TR/css-values-3/
[HTML]
Anne van Kesteren; et al. HTML 현행 표준. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[HTML5]
Ian Hickson; et al. HTML5. 2018년 3월 27일. REC. URL: https://www.w3.org/TR/html5/
[MEDIAQUERIES-5]
Media Queries Level 5 URL: https://drafts.csswg.org/mediaqueries-5/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997년 3월. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 2018년 11월 21일. WD. URL: https://www.w3.org/TR/selectors-4/
[SVG11]
Erik Dahlström; et al. Scalable Vector Graphics (SVG) 1.1 (Second Edition). 2011년 8월 16일. REC. URL: https://www.w3.org/TR/SVG11/
[SVG2]
Amelia Bellamy-Royds; et al. Scalable Vector Graphics (SVG) 2. 2018년 10월 4일. CR. URL: https://www.w3.org/TR/SVG2/
[WebIDL]
Cameron McCormack; Boris Zbarsky; Tobie Langel. Web IDL. 2016년 12월 15일. ED. URL: https://heycam.github.io/webidl/

정보 제공 참고 문헌

[ArTD]
B. Jacob. 산술 타이밍 차이(Arithmetic Timing Differences). URL: https://wiki.mozilla.org/User:Bjacob/ArithmeticTimingDifferences
[Cmam]
IEC. IEC 61966-2-1:1999 색상 측정 및 관리 - Part 2-1: 색상 관리 - 기본 RGB 색 공간 - sRGB. URL: https://webstore.iec.ch/publication/6169
[CSS3-ANIMATIONS]
Dean Jackson; et al. CSS Animations Level 1. 2018년 10월 11일. WD. URL: https://www.w3.org/TR/css-animations-1/
[PORTERDUFF]
Thomas Porter; Tom Duff. 디지털 이미지 합성(Compositing digital images).
[TaM]
Ebert 외, AP Professional. 텍스처링과 모델링(Texturing and Modeling). 1994.

속성 색인

이름 초기값 적용 대상 상속 퍼센티지 애니메이션 가능 정규 순서 계산된 값 미디어
color-interpolation-filters auto | sRGB | linearRGB linearRGB 모든 필터 프리미티브 해당 없음 아니오 문법에 따름 지정된 대로 visual
filter none | <filter-value-list> none 모든 요소. SVG에서는 defs 요소가 없는 container 요소, 모든 그래픽 요소 및 use 요소에 적용됩니다. 아니오 해당 없음 필터 애니메이션의 설명 참조 문법에 따름 지정된 대로 visual
flood-color <color> black feFlood 및 feDropShadow 요소 아니오 해당 없음 색상으로 문법에 따름 지정된 대로 visual
flood-opacity <alpha-value> 1 feFlood 및 feDropShadow 요소 아니오 해당 없음 숫자 또는 백분율로 문법에 따름 지정된 값을 [0,1] 범위로 클램프한 숫자 visual
lighting-color <color> white feDiffuseLighting 및 feSpecularLighting 요소 아니오 해당 없음 색상으로 문법에 따름 지정된 대로 visual

IDL 색인

interface SVGFilterElement : SVGElement {
  readonly attribute SVGAnimatedEnumeration filterUnits;
  readonly attribute SVGAnimatedEnumeration primitiveUnits;
  readonly attribute SVGAnimatedLength x;
  readonly attribute SVGAnimatedLength y;
  readonly attribute SVGAnimatedLength width;
  readonly attribute SVGAnimatedLength height;
};

SVGFilterElement includes SVGURIReference;

interface mixin SVGFilterPrimitiveStandardAttributes {
  readonly attribute SVGAnimatedLength x;
  readonly attribute SVGAnimatedLength y;
  readonly attribute SVGAnimatedLength width;
  readonly attribute SVGAnimatedLength height;
  readonly attribute SVGAnimatedString result;
};

interface SVGFEBlendElement : SVGElement {

  // Blend Mode Types
  const unsigned short SVG_FEBLEND_MODE_UNKNOWN = 0;
  const unsigned short SVG_FEBLEND_MODE_NORMAL = 1;
  const unsigned short SVG_FEBLEND_MODE_MULTIPLY = 2;
  const unsigned short SVG_FEBLEND_MODE_SCREEN = 3;
  const unsigned short SVG_FEBLEND_MODE_DARKEN = 4;
  const unsigned short SVG_FEBLEND_MODE_LIGHTEN = 5;
  const unsigned short SVG_FEBLEND_MODE_OVERLAY = 6;
  const unsigned short SVG_FEBLEND_MODE_COLOR_DODGE = 7;
  const unsigned short SVG_FEBLEND_MODE_COLOR_BURN = 8;
  const unsigned short SVG_FEBLEND_MODE_HARD_LIGHT = 9;
  const unsigned short SVG_FEBLEND_MODE_SOFT_LIGHT = 10;
  const unsigned short SVG_FEBLEND_MODE_DIFFERENCE = 11;
  const unsigned short SVG_FEBLEND_MODE_EXCLUSION = 12;
  const unsigned short SVG_FEBLEND_MODE_HUE = 13;
  const unsigned short SVG_FEBLEND_MODE_SATURATION = 14;
  const unsigned short SVG_FEBLEND_MODE_COLOR = 15;
  const unsigned short SVG_FEBLEND_MODE_LUMINOSITY = 16;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedEnumeration mode;
};

SVGFEBlendElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEColorMatrixElement : SVGElement {

  // Color Matrix Types
  const unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
  const unsigned short SVG_FECOLORMATRIX_TYPE_MATRIX = 1;
  const unsigned short SVG_FECOLORMATRIX_TYPE_SATURATE = 2;
  const unsigned short SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
  const unsigned short SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedEnumeration type;
  readonly attribute SVGAnimatedNumberList values;
};

SVGFEColorMatrixElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEComponentTransferElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};

SVGFEComponentTransferElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGComponentTransferFunctionElement : SVGElement {

  // Component Transfer Types
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5;

  readonly attribute SVGAnimatedEnumeration type;
  readonly attribute SVGAnimatedNumberList tableValues;
  readonly attribute SVGAnimatedNumber slope;
  readonly attribute SVGAnimatedNumber intercept;
  readonly attribute SVGAnimatedNumber amplitude;
  readonly attribute SVGAnimatedNumber exponent;
  readonly attribute SVGAnimatedNumber offset;
};

interface SVGFEFuncRElement : SVGComponentTransferFunctionElement {
};

interface SVGFEFuncGElement : SVGComponentTransferFunctionElement {
};

interface SVGFEFuncBElement : SVGComponentTransferFunctionElement {
};

interface SVGFEFuncAElement : SVGComponentTransferFunctionElement {
};

interface SVGFECompositeElement : SVGElement {

  // Composite Operators
  const unsigned short SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_OVER = 1;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_IN = 2;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_OUT = 3;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_ATOP = 4;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_XOR = 5;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedEnumeration operator;
  readonly attribute SVGAnimatedNumber k1;
  readonly attribute SVGAnimatedNumber k2;
  readonly attribute SVGAnimatedNumber k3;
  readonly attribute SVGAnimatedNumber k4;
};

SVGFECompositeElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEConvolveMatrixElement : SVGElement {

  // Edge Mode Values
  const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
  const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
  const unsigned short SVG_EDGEMODE_WRAP = 2;
  const unsigned short SVG_EDGEMODE_NONE = 3;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedInteger orderX;
  readonly attribute SVGAnimatedInteger orderY;
  readonly attribute SVGAnimatedNumberList kernelMatrix;
  readonly attribute SVGAnimatedNumber divisor;
  readonly attribute SVGAnimatedNumber bias;
  readonly attribute SVGAnimatedInteger targetX;
  readonly attribute SVGAnimatedInteger targetY;
  readonly attribute SVGAnimatedEnumeration edgeMode;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
  readonly attribute SVGAnimatedBoolean preserveAlpha;
};

SVGFEConvolveMatrixElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEDiffuseLightingElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber surfaceScale;
  readonly attribute SVGAnimatedNumber diffuseConstant;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
};

SVGFEDiffuseLightingElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEDistantLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber azimuth;
  readonly attribute SVGAnimatedNumber elevation;
};

interface SVGFEPointLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber x;
  readonly attribute SVGAnimatedNumber y;
  readonly attribute SVGAnimatedNumber z;
};

interface SVGFESpotLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber x;
  readonly attribute SVGAnimatedNumber y;
  readonly attribute SVGAnimatedNumber z;
  readonly attribute SVGAnimatedNumber pointsAtX;
  readonly attribute SVGAnimatedNumber pointsAtY;
  readonly attribute SVGAnimatedNumber pointsAtZ;
  readonly attribute SVGAnimatedNumber specularExponent;
  readonly attribute SVGAnimatedNumber limitingConeAngle;
};

interface SVGFEDisplacementMapElement : SVGElement {

  // Channel Selectors
  const unsigned short SVG_CHANNEL_UNKNOWN = 0;
  const unsigned short SVG_CHANNEL_R = 1;
  const unsigned short SVG_CHANNEL_G = 2;
  const unsigned short SVG_CHANNEL_B = 3;
  const unsigned short SVG_CHANNEL_A = 4;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedNumber scale;
  readonly attribute SVGAnimatedEnumeration xChannelSelector;
  readonly attribute SVGAnimatedEnumeration yChannelSelector;
};

SVGFEDisplacementMapElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEDropShadowElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber dx;
  readonly attribute SVGAnimatedNumber dy;
  readonly attribute SVGAnimatedNumber stdDeviationX;
  readonly attribute SVGAnimatedNumber stdDeviationY;

  void setStdDeviation(float stdDeviationX, float stdDeviationY);
};

SVGFEDropShadowElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEFloodElement : SVGElement {
};

SVGFEFloodElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEGaussianBlurElement : SVGElement {

  // Edge Mode Values
  const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
  const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
  const unsigned short SVG_EDGEMODE_WRAP = 2;
  const unsigned short SVG_EDGEMODE_NONE = 3;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber stdDeviationX;
  readonly attribute SVGAnimatedNumber stdDeviationY;
  readonly attribute SVGAnimatedEnumeration edgeMode;

  void setStdDeviation(float stdDeviationX, float stdDeviationY);
};

SVGFEGaussianBlurElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEImageElement : SVGElement {
  readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
  readonly attribute SVGAnimatedString crossOrigin;
};

SVGFEImageElement includes SVGFilterPrimitiveStandardAttributes;
SVGFEImageElement includes SVGURIReference;

interface SVGFEMergeElement : SVGElement {
};

SVGFEMergeElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEMergeNodeElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};

interface SVGFEMorphologyElement : SVGElement {

  // Morphology Operators
  const unsigned short SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
  const unsigned short SVG_MORPHOLOGY_OPERATOR_ERODE = 1;
  const unsigned short SVG_MORPHOLOGY_OPERATOR_DILATE = 2;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedEnumeration operator;
  readonly attribute SVGAnimatedNumber radiusX;
  readonly attribute SVGAnimatedNumber radiusY;
};

SVGFEMorphologyElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEOffsetElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber dx;
  readonly attribute SVGAnimatedNumber dy;
};

SVGFEOffsetElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFESpecularLightingElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber surfaceScale;
  readonly attribute SVGAnimatedNumber specularConstant;
  readonly attribute SVGAnimatedNumber specularExponent;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
};

SVGFESpecularLightingElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFETileElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};

SVGFETileElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFETurbulenceElement : SVGElement {

  // Turbulence Types
  const unsigned short SVG_TURBULENCE_TYPE_UNKNOWN = 0;
  const unsigned short SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
  const unsigned short SVG_TURBULENCE_TYPE_TURBULENCE = 2;

  // Stitch Options
  const unsigned short SVG_STITCHTYPE_UNKNOWN = 0;
  const unsigned short SVG_STITCHTYPE_STITCH = 1;
  const unsigned short SVG_STITCHTYPE_NOSTITCH = 2;

  readonly attribute SVGAnimatedNumber baseFrequencyX;
  readonly attribute SVGAnimatedNumber baseFrequencyY;
  readonly attribute SVGAnimatedInteger numOctaves;
  readonly attribute SVGAnimatedNumber seed;
  readonly attribute SVGAnimatedEnumeration stitchTiles;
  readonly attribute SVGAnimatedEnumeration type;
};

SVGFETurbulenceElement includes SVGFilterPrimitiveStandardAttributes;

이슈 색인

고정된 배경 이미지에서 filter의 동작 방식은? <https://github.com/w3c/csswg-drafts/issues/238>
값 목록에 항목 수가 잘못된 경우 어떻게 동작해야 하나요? <https://github.com/w3c/csswg-drafts/issues/237>
구현이 명세와 일치하지 않습니다. <https://github.com/w3c/csswg-drafts/issues/113>
필터 함수의 거리를 계산하는 방법. <https://github.com/w3c/csswg-drafts/issues/91>