필터 효과 모듈 레벨 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 속성)에 의해 실행됩니다. 이 명세에서는 필터를 HTML 및 SVG와 같이 CSS로 스타일이 지정된 콘텐츠에서 사용할 수 있는 방식으로 설명합니다. 또한 CSS 속성 값 함수가 CSS <image> 값을 생성하도록 정의합니다.

CSS는 구조화된 문서의 렌더링을 설명하기 위한 언어입니다 (예: HTML 및 XML) 화면, 종이 등에 표시할 때 사용됩니다.

이 문서의 상태

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

작업 초안으로 발행되었다고 해서 W3C 회원의 승인을 의미하지는 않습니다. 이 문서는 초안이며 언제든 다른 문서에 의해 업데이트되거나, 대체되거나 폐기될 수 있습니다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 적절하지 않습니다.

이 명세에 대한 논의에는 GitHub 이슈를 사용하는 것이 권장됩니다. 이슈를 등록할 때는 제목에 “filter-effects”라는 텍스트를 넣어 주십시오. 다음과 같은 형식을 권장합니다: “[filter-effects] …의견 요약…”. 모든 이슈와 의견은 보관되며, 과거 기록 보관소도 있습니다.

이 문서는 CSS 작업 그룹에서 작성했습니다(스타일 활동의 일부입니다).

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성했습니다. W3C는 해당 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지하며, 해당 페이지에는 특허를 공개하는 방법도 포함되어 있습니다. 자신이 필수 청구항을 포함한다고 믿는 특허에 대해 실제로 알고 있는 개인은 W3C 특허 정책 제6절에 따라 해당 정보를 공개해야 합니다.

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

1. 소개

이 절은 규범적이지 않습니다

필터 효과는 요소가 문서에 그려질 때 해당 요소에 적용되는 그래픽 연산입니다. 이는 이미지 기반 효과로, 0개 이상의 이미지를 입력으로 받고 효과에 고유한 여러 매개변수를 사용한 다음 이미지를 출력으로 생성합니다. 출력 이미지는 원래 요소 대신 문서에 렌더링되거나, 다른 필터 효과의 입력 이미지로 사용되거나, CSS 이미지 값으로 제공됩니다.

필터 효과의 간단한 예는 “flood”입니다. 이미지 입력은 받지 않지만 색상을 정의하는 매개변수를 갖습니다. 이 효과는 지정된 색상으로 완전히 채워진 출력 이미지를 생성합니다. 조금 더 복잡한 예로는 단일 이미지 입력(일반적으로 요소가 정상적으로 부모에 렌더링될 때의 이미지)을 받고 각 픽셀을 반대 색상 값을 갖도록 조정하는 “inversion”이 있습니다.

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

  1. 이름으로 지정되는 소수의 미리 정의된 필터 함수입니다. 특별히 강력하지는 않지만, 편리하고 이해하기 쉬우며 흐리게 하기와 같은 일반적인 효과를 구현하는 간단한 방법을 제공합니다. 미리 정의된 필터는 [CSS3-ANIMATIONS]를 통해 애니메이션할 수도 있습니다.

  2. 전체 효과를 정의하도록 마크업으로 기술된 개별 필터 효과의 그래프입니다. 이 그래프는 어떤 콘텐츠에도 효과를 적용할 수 있으므로 입력에 구애받지 않습니다. 이러한 그래프는 각각만 보면 단순할 수 있는 효과들의 조합이지만, 그래프 전체로는 복잡한 효과를 생성할 수 있습니다. 아래에 예가 나와 있습니다.

이 예에서는 이미지에 <grayscale()> 필터 함수를 적용합니다.
#image {
    filter: grayscale(100%);
}
이미지에 grayscale 필터를 적용한 예

필터가 없는 이미지(왼쪽)와 동일한 이미지에 100% grayscale 필터를 적용한 모습 (오른쪽).

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

필터링된 객체의 초기 예입니다.

이 예를 SVG로 보기

위 예에서 사용한 필터 효과를 여기에서 다시 보여 주며, 여섯 개의 각 필터 프리미티브 앞 왼쪽 열에 참조 번호를 표시합니다:



1
2
3




4
5

6


<filter id="MyFilter" filterUnits="userSpaceOnUse" x="0" y="0" width="200" height="120">
  <desc>3D 조명 효과를 생성합니다.</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 - 원본 소스 그래픽

소스 그래픽

filters01 - 필터 요소 1 적용 후

필터 프리미티브 1 적용 후

filters01 - 필터 요소 2 적용 후

필터 프리미티브 2 적용 후

filters01 - 필터 요소 3 적용 후

필터 프리미티브 3 적용 후

filters01 - 필터 요소 4 적용 후

필터 프리미티브 4 적용 후

filters01 - 필터 요소 5 적용 후

필터 프리미티브 5 적용 후

filters01 - 필터 요소 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. 값

이 명세는 [CSS21]의 CSS 속성 정의 규칙을 따릅니다. 이러한 명세에 정의되지 않은 값 유형은 CSS Values and Units Module Level 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이 아닌 계산값은 CSS opacity와 같은 방식으로 스태킹 컨텍스트 [CSS21]를 생성합니다. 요소의 모든 자손은 하나의 그룹으로 함께 렌더링되며 필터 효과는 그룹 전체에 적용됩니다.

filter 속성은 filter가 요소의 테두리 박스 바깥에 페인팅을 발생시킬 수 있더라도 대상 요소의 CSS 박스 기하 구조에는 영향을 주지 않습니다.

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

합성 모델은 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의 블러 반경과 다릅니다.

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]와 동일하게 해석되지만, 선택적인 세 번째 <length> 값은 블러 반경 대신 표준 편차입니다. 이 함수에 대응하는 마크업은 아래에 나와 있습니다.

생략된 값의 기본값은 누락된 길이 값을 0으로 설정하고 누락된 사용 색상은 color 속성에서 가져옵니다.

보간을 위한 초기 값은 모든 길이 값을 0으로 설정하고 사용 색상을 transparent로 설정한 값입니다.

참고: 이 명세 레벨에서는 확산 값이나 여러 개의 그림자를 허용하지 않습니다.

참고: 표준 편차는 box-shadow의 블러 반경과 다릅니다.

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

입력 이미지를 회색조로 변환합니다. 전달된 매개변수는 변환 비율을 정의합니다. 100% 값은 완전한 회색조입니다. 0% 값은 입력을 변경하지 않습니다. 0%와 100% 사이의 값은 효과에 대한 선형 승수입니다. 100%를 초과하는 값도 허용되지만 UA는 값을 1로 제한해야 합니다. 이 함수에 대응하는 마크업은 아래에 나와 있습니다.

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

생략했을 때의 기본값은 1입니다.

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

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

입력 이미지에 색상환 회전을 적용합니다. 전달된 매개변수는 입력 샘플이 색상환을 따라 조정될 각도의 수를 정의합니다. 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% 사이의 값은 효과에 대한 선형 승수입니다. 이는 입력 이미지 샘플에 해당 양을 곱하는 것과 같습니다. 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"

필터 프리미티브 내부의 여러 길이 값과 필터 프리미티브 하위 영역을 정의하는 속성에 사용할 좌표계를 지정합니다.

primitiveUnits가 userSpaceOnUse와 같으면 필터 정의 내부의 모든 길이 값은 filter 요소가 참조되는 시점에 사용 중인 현재 로컬 좌표계의 값을 나타냅니다(즉, filter 속성을 통해 filter 요소를 참조하는 요소의 사용자 좌표계).

primitiveUnits가 objectBoundingBox와 같으면 필터 정의 내부의 모든 길이 값은 참조하는 요소의 경계 상자의 비율 또는 백분율을 나타냅니다(객체 경계 상자 단위 참조). <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 요소에 적용되지 않습니다. 따라서 display 속성이 none이 아닌 값으로 설정되어 있더라도 filter 요소는 직접 렌더링되지 않으며, filter 요소 자체 또는 그 조상의 display 속성이 none으로 설정되어 있어도 filter 요소를 참조할 수 있습니다.

8. 필터 영역

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

filterUnits

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

filterUnits가 userSpaceOnUse와 같으면 x, y, width, height는 filter 요소가 참조되는 시점에 사용 중인 현재 사용자 좌표계의 값을 나타냅니다(즉, filter 속성을 통해 filter 요소를 참조하는 요소의 사용자 좌표계).

filterUnits가 objectBoundingBox와 같으면 x, y, width, height는 참조하는 요소의 경계 상자에 대한 비율 또는 백분율을 나타냅니다(객체 경계 상자 단위 참조).

filterUnits의 초기 값은 objectBoundingBox입니다.

애니메이션 가능: 예.

x, y, width, height

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

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

이 직사각형의 경계는 지정된 filter 요소에 포함된 각 필터 프리미티브에 대한 강제 클리핑 영역으로 작동합니다. 따라서 특정 필터 프리미티브의 효과가 직사각형 경계를 넘어 확장되는 경우(이는 매우 큰 stdDeviation을 가진 feGaussianBlur 필터 프리미티브를 사용할 때 종종 발생합니다) 효과의 일부가 클리핑됩니다.

x와 y의 초기 값은 -10%입니다.

width와 height의 초기 값은 120%입니다.

필터를 참조한 요소의 ng.

애니메이션 가능: 예.

참고: filterUnits에 가능한 두 값(즉, objectBoundingBox와 userSpaceOnUse) 모두 X축과 Y축이 각각 필터가 적용될 요소의 로컬 좌표계의 X축 및 Y축과 평행한 좌표계를 갖는 필터 영역을 생성합니다.

참고: 필터 영역을 기기 픽셀에 직접 매핑할 수 있는 경우 구현자가 더 빠른 성능을 얻을 수 있는 경우가 있습니다. 따라서 디스플레이 장치에서 최상의 성능을 얻으려면 사용자 에이전트가 필터 영역을 배경과 픽셀 단위로 정렬할 수 있도록 작성자가 영역을 정의하는 것이 권장됩니다. 특히 최상의 필터 효과 성능을 위해서는 사용자 좌표계를 회전하거나 기울이지 마십시오.

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

9. 필터 프리미티브

9.1. 개요

이 절에서는 특정 필터 효과를 구현하기 위해 조합할 수 있는 여러 필터 프리미티브를 설명합니다.

달리 명시되지 않는 한 모든 이미지 필터는 미리 곱해진 RGBA 샘플에서 동작합니다. feColorMatrix 및 feComponentTransfer와 같은 일부 필터는 미리 곱해지지 않은 데이터에서 더 자연스럽게 동작합니다. 필터 연산을 수행하는 동안 모든 색상 값은 현재 필터가 요구하는 색상 곱셈 방식으로 일시적으로 변환되어야 합니다.

참고: 모든 입력 이미지는 미리 곱해진 RGBA라고 가정합니다. 사용자 에이전트는 미리 곱해지지 않은 데이터 버퍼링을 사용하여 성능을 최적화할 수 있습니다.

모든 래스터 효과 필터링 연산은 1개에서 N개의 입력 RGBA 이미지와 매개변수 역할을 하는 추가 속성을 받아 하나의 출력 RGBA 이미지를 생성합니다.

각 필터 프리미티브의 RGBA 결과는 색상과 불투명도 값에 허용되는 범위로 제한됩니다. 따라서 예를 들어 지정된 필터 프리미티브의 결과에 포함된 음의 색상 값이나 불투명도 값은 0의 색상/불투명도 값으로 조정됩니다.

특정 필터 프리미티브가 연산을 수행하는 색 공간은 해당 필터 프리미티브의 color-interpolation-filters 속성 값에 의해 결정됩니다. 별개의 속성인 color-interpolation은 다른 색상 연산의 색 공간을 결정합니다. 이 두 속성은 초기 값이 서로 다르기 때문에(color-interpolation-filters의 초기 값은 linearRGB이고 color-interpolation의 초기 값은 sRGB입니다), 특정 결과를 얻기 위해 (예: 그래디언트 보간을 필터링 연산과 조정할 때) 특정 요소에서 color-interpolation을 linearRGB로 명시적으로 설정하거나 color-interpolation-filters를 sRGB로 설정해야 하는 경우가 있습니다. 아래 예에서는 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 속성으로 참조할 수 있습니다. 값을 제공하지 않으면 출력은 다음 필터 프리미티브가 자신의 in 속성 값을 제공하지 않는 경우에만 해당 다음 필터 프리미티브의 암시적 입력으로 다시 사용할 수 있습니다.

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

속성 정의:

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

지정된 필터 프리미티브의 입력을 식별합니다. 값은 여섯 개의 키워드 중 하나이거나 동일한 filter 요소 안의 이전 result 속성 값과 일치하는 문자열일 수 있습니다. 값이 제공되지 않았고 이것이 첫 번째 필터 프리미티브인 경우 이 필터 프리미티브는 SourceGraphic을 입력으로 사용합니다. 값이 제공되지 않았고 이것이 이후의 필터 프리미티브인 경우 이 필터 프리미티브는 이전 필터 프리미티브의 결과를 입력으로 사용합니다.

result 값이 지정된 filter 요소 안에 여러 번 나타나면 해당 결과에 대한 참조는 속성 result에 지정된 값을 가진 가장 가까운 앞쪽 필터 프리미티브를 사용합니다.

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

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

여섯 개 키워드의 정의:

SourceGraphic

이 키워드는 filter 요소의 원래 입력이었던 그래픽 요소를 나타냅니다. 래스터 효과 필터 프리미티브의 경우 그래픽 요소는 이미지 공간에서 처음에는 비어 있는 RGBA 래스터로 래스터화됩니다. 원본 그래픽이 건드리지 않은 픽셀은 비어 있는 상태로 남습니다. 이미지는 선형 RGBA 픽셀로 렌더링되도록 지정됩니다. 이 이미지의 알파 채널은 SVG가 지정한 모든 앤티앨리어싱을 반영합니다. (래스터가 선형이므로 이 이미지의 알파 채널은 각 픽셀의 정확한 커버리지 백분율을 나타냅니다.)

SourceAlpha

이 키워드는 filter 요소의 원래 입력이었던 그래픽 요소를 나타냅니다. SourceAlpha에는 알파 채널만 사용한다는 점을 제외하고 SourceGraphic과 동일한 모든 규칙이 적용됩니다. 입력 이미지는 RGB 채널에 암시적으로 검은색 값이 들어 있지만 알파 채널은 SourceGraphic과 동일한 RGBA 이미지입니다.

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

BackgroundImage

이 키워드는 filter 요소가 호출된 시점에 필터 영역 뒤에 있는 현재 격리 그룹이 정의한 배경을 나타냅니다. isolation 속성 [COMPOSITING-1]을 참조하십시오.

BackgroundAlpha

알파 채널만 사용한다는 점을 제외하면 BackgroundImage와 같습니다. SourceAlpha 및 isolation 속성 [COMPOSITING-1]을 참조하십시오.

FillPaint

이 키워드는 필터 효과의 대상 요소에 있는 fill 속성의 값을 나타냅니다. FillPaint 이미지는 개념적으로 무한한 범위를 갖습니다. 흔히 이 이미지는 모든 곳에서 불투명하지만, 그라디언트나 패턴 자체에 투명하거나 반투명한 부분이 포함된 경우처럼 "paint" 자체에 알파가 있으면 그렇지 않을 수 있습니다. 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는 필터 체인을 생성합니다.

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

일부 필터 프리미티브는 둘 이상의 필터 프리미티브 입력을 가질 수 있습니다. in 및 result 속성을 사용하면 여러 필터 프리미티브를 복잡한 필터 구조로 결합할 수 있습니다. 필터 프리미티브의 전방 참조 금지 제한으로 인해 모든 필터 구조는 트리, 즉 필터 프리미티브 트리로 나타낼 수 있습니다. 필터 프리미티브 트리의 루트 필터 프리미티브는 filter 요소의 필터 프리미티브 자식 중 가장 뒤에 이어지는 프리미티브입니다.

필터 체인은 필터 프리미티브 트리로도 나타낼 수 있는 필터 구조 중 하나입니다. 따라서 이후에는 필터 체인도 필터 프리미티브 트리라고 합니다.

filter 요소는 하나 이상의 필터 프리미티브 트리를 가질 수 있습니다. 후속 필터 프리미티브가 filter 요소의 마지막 필터 프리미티브 자식인 필터 프리미티브 트리를 기본 필터 프리미티브 트리라고 합니다.

기본 필터 프리미티브 트리만 필터 처리에 기여합니다. 구현은 그 밖의 가능한 모든 필터 프리미티브 트리를 무시하도록 선택할 수 있습니다.

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

여러 필터 프리미티브 트리의 예:
<filter id="filter">
  <-- 첫 번째 필터 프리미티브 트리. 필터 처리에서는 무시됩니다 . -->
  <feColorMatrix type="hueRotate" values="45"/>
  <feOffset dx="10" dy="10"/>
  <feGaussianBlur stdDeviation="3"/>
  <-- 기본 필터 프리미티브 트리.  -->
  <feFlood flood-color="green" result="flood"/>
  <feComposite operator="in" in="SourceAlpha" in2="flood"/>
</filter>

위 필터에는 다음 필터 프리미티브로 구성된 2개의 필터 프리미티브 트리가 있습니다:

  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>
하위 영역의 예

하위 영역의 예

이 예를 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를 나타냅니다. 이 필터 프리미티브의 출력 Cm은 Cs와 Cb를 혼합한 결과입니다.

mode의 초기 값은 normal입니다.

애니메이션 가능: 예.

no-composite = "no-composite"

no-composite 속성이 존재하면 지정된 혼합 모드는 알파 합성을 적용해서는 안 됩니다. 합성을 사용하지 않는 "mixing" 공식은 혼합 [COMPOSITING-1]을 참조하십시오. 그렇지 않으면 구현은 mode로 지정한 혼합 모드를 Source Over 합성 연산자와 결합해야 합니다. 합성을 사용하는 "mixing" 공식은 혼합 [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)" >보통</text>
      <text x="50" y="180" filter="url(#Multiply)" >곱하기</text>
      <text x="50" y="270" filter="url(#Screen)" >스크린</text>
      <text x="50" y="360" filter="url(#Darken)" >어둡게</text>
      <text x="50" y="450" filter="url(#Lighten)" >밝게</text>
    </g>
  </g>
</svg>
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 = "<number> 목록"

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]

    따라서 색조 행렬의 왼쪽 위 항은 다음과 같습니다:

    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의 효과를 보여 주는 다섯 개의 텍스트 문자열:
        참조 역할을 하는 필터링되지 않은 텍스트 문자열,
        회색조로 변환하기 위한 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">필터 없음</text>
    <text x="100" y="190" filter="url(#Matrix)" >행렬</text>
    <text x="100" y="290" filter="url(#Saturate40)" >채도</text>
    <text x="100" y="390" filter="url(#HueRotate90)" >색조 회전</text>
    <text x="100" y="490" filter="url(#LuminanceToAlpha)" >휘도</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개의 동일한 크기의 보간 영역에 대한 시작 및 끝 값을 지정하는 n+1개의 값(즉, v0부터 vn까지)이 있습니다. 보간에는 다음 공식을 사용합니다:

    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개의 단계로 구성된 계단 함수를 식별하기 위한 n개의 값(즉, v0부터 vn-1까지) 목록을 제공합니다. 계단 함수는 다음 공식으로 정의됩니다:

    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

type의 초기 값은 identity입니다.

애니메이션 가능: 예.

tableValues = "(<number> 목록)"

type="table"인 경우, 조회 테이블을 정의하는 <number> 목록 v0,v1,...vn이며, 공백 및/또는 쉼표로 구분됩니다. 빈 목록은 항등 전달 함수를 생성합니다.

속성이 지정되지 않은 경우 빈 목록이 제공된 것처럼 동작합니다.

애니메이션 가능: 예.

slope = "<number>"

type="linear"인 경우 선형 함수의 기울기입니다.

slope의 초기 값은 1입니다.

애니메이션 가능: 예.

intercept = "<number>"

type="linear"인 경우 선형 함수의 절편입니다.

intercept의 초기 값은 0입니다.

애니메이션 가능: 예.

amplitude = "<number>"

type="gamma"인 경우 감마 함수의 진폭입니다.

amplitude의 초기 값은 1입니다.

애니메이션 가능: 예.

exponent = "<number>"

type="gamma"인 경우 감마 함수의 지수입니다.

exponent의 초기 값은 1입니다.

애니메이션 가능: 예.

offset = "<number>"

type="gamma"인 경우 감마 함수의 오프셋입니다.

offset의 초기 값은 0입니다.

애니메이션 가능: 예.

<svg width="8cm" height="4cm" viewBox="0 0 800 400"
     xmlns="http://www.w3.org/2000/svg">
  <title>feComponentTransfer 예 - feComponentTransfer 연산의 예</title>
  <desc>feComponentTransfer의 효과를 보여 주는 네 개의 텍스트 문자열:
        참조 역할을 하는 항등 함수,
        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">항등</text>
    <text x="100" y="190" filter="url(#Table)" >테이블 조회</text>
    <text x="100" y="290" filter="url(#Linear)" >선형 함수</text>
    <text x="100" y="390" filter="url(#Gamma)" >감마 함수</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 연산은 feDiffuseLighting 및 feSpecularLighting 필터의 출력을 텍스처 데이터와 결합하는 데 유용합니다. 또한 dissolve를 구현하는 데도 유용합니다. arithmetic 연산을 선택하면 각 결과 픽셀은 다음 공식을 사용하여 계산됩니다:

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

여기서:

이 필터 프리미티브의 경우 결과 이미지의 범위는 필터 프리미티브 하위 영역을 설명하는 절에 기술된 대로 확장될 수 있습니다.

속성 정의:

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

수행할 합성 연산입니다. arithmetic을 제외한 모든 operator 유형은 [COMPOSITING-1]에서 설명하는 해당 연산과 일치하며, in은 소스를, in2는 대상을 나타냅니다. arithmetic 연산자는 위에서 설명했습니다.

operator의 초기 값은 over입니다.

애니메이션 가능: 예.

k1 = "<number>"

operator="arithmetic"인 경우에만 적용됩니다.

k1의 초기 값은 0입니다.

애니메이션 가능: 예.

k2 = "<number>"

operator="arithmetic"인 경우에만 적용됩니다.

k2의 초기 값은 0입니다.

애니메이션 가능: 예.

k3 = "<number>"

operator="arithmetic"인 경우에만 적용됩니다.

k3의 초기 값은 0입니다.

애니메이션 가능: 예.

k4 = "<number>"

operator="arithmetic"인 경우에만 적용됩니다.

k4의 초기 값은 0입니다.

애니메이션 가능: 예.

in2 = "(in 속성 참조)"

합성 연산의 두 번째 입력 이미지입니다.

애니메이션 가능: 예.

참고: Compositing and Blending [COMPOSITING-1]에서는 더 많은 합성 키워드를 정의합니다. 추가 키워드의 기능은 입력 필터 프리미티브의 in과 in2를 서로 바꾸어 구현할 수 있습니다.

<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>여섯 가지 각 합성 연산자에 대해 여섯 개 필터로 구성된 두 집합을 정의합니다.
          첫 번째 집합은 불투명한 흰색으로 채워 배경 이미지를 지웁니다.
          두 번째 집합은 배경을 지우지 않으므로,
          배경이 때때로 비쳐 보이고 다른 경우에는
          배경 자체와 혼합됩니다(즉, "이중 계산").</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>배경을 가리지 않는 필터를 사용하여 예를 렌더링하므로,
          일부 경우에는 배경이 계속 보이고,
          다른 경우에는 배경 이미지가
          자기 자신과 혼합됩니다("이중 계산").</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×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]

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

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

이미지의 두 번째 행과 두 번째 열에 있는 색상 값(소스 픽셀 값은 120)에 주목해 보겠습니다. 가장 단순한 경우(입력 이미지의 픽셀 그리드가 커널의 픽셀 그리드와 완벽하게 정렬된 경우)를 가정하고 divisor, targetX 및 targetY 속성에 기본값을 사용하면, 결과 색상 값은 다음과 같습니다:

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가 정의하는 좌표계에 맞추기 위해 이미지를 리샘플링해야 하거나, 컨볼루션 후 기기 좌표계에 맞추기 위해 다시 리샘플링해야 하는 경우에는 고품질 뷰어가 쌍선형 또는 쌍삼차 보간과 같은 적절한 보간 기법을 사용하는 것이 권장됩니다. 사용할 수 있는 보간 기법의 속도에 따라 이 선택은 image-rendering 속성 설정의 영향을 받을 수 있습니다. 문서가 축소되어 kernelUnitLength가 기기 픽셀보다 상당히 작은 경우처럼 올바른 결과를 생성하는 데 리샘플링이 필요하지 않은 경우, 구현은 리샘플링을 최소화하거나 제거하는 방법을 선택할 수 있다는 점에 유의하십시오.

속성 정의:

order = "<number-optional-number>"

kernelMatrix의 각 차원에 있는 셀 수를 나타냅니다. 제공되는 값은 0보다 큰 <integer>여야 합니다. 정수가 아닌 값은 잘립니다. 즉, 0에 가까운 방향의 가장 가까운 정수 값으로 반올림됩니다. 첫 번째 숫자 <orderX>는 행렬의 열 수를 나타냅니다. 두 번째 숫자 <orderY>는 행렬의 행 수를 나타냅니다. <orderY>가 제공되지 않으면 <orderX>를 기본값으로 사용합니다.

작은 값(예: 3)만 사용하는 것이 권장됩니다. 값이 크면 CPU 오버헤드가 매우 커질 수 있으며 일반적으로 성능에 미치는 영향을 정당화할 만큼의 결과를 생성하지 못합니다.

order의 초기 값은 3입니다.

애니메이션 가능: 예.

kernelMatrix = "<숫자 목록>"

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

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

값 목록의 항목 수가 잘못된 경우 어떻게 동작해야 합니까? <https://github.com/w3c/csswg-drafts/issues/237>

애니메이션 가능: 예.

divisor = "<number>"

kernelMatrix를 입력 이미지에 적용해 숫자를 얻은 후, 해당 숫자를 divisor로 나누어 최종 대상 색상 값을 얻습니다. 모든 행렬 값의 합인 divisor는 결과의 전체 색상 강도를 균등하게 만드는 효과를 내는 경향이 있습니다. 지정된 divisor가 0이면 대신 기본값을 사용합니다.

초기 값은 kernelMatrix의 모든 값의 합이며, 합이 0인 경우에는 divisor를 1로 설정합니다.

애니메이션 가능: 예.

bias = "<number>"

kernelMatrix를 입력 이미지에 적용해 숫자를 얻고 divisor를 적용한 후, bias 속성을 각 컴포넌트에 더합니다. bias의 한 가지 용도는 .5 회색 값을 필터의 0 응답으로 사용하려는 경우입니다. bias 속성은 필터의 범위를 이동시킵니다. 이를 통해 그렇지 않으면 0 또는 1로 제한될 값을 표현할 수 있습니다.

bias의 초기 값은 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×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>와 같은 값을 기본값으로 사용합니다. kernelMatrix의 연속된 열과 행 사이의 현재 필터 단위(즉, 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" 값은 컨볼루션이 색상 채널에만 적용됨을 나타냅니다. 이 경우 필터는 색상 컴포넌트 값의 사전 곱셈을 일시적으로 해제하고 커널을 적용합니다. 이 경우 지정된 픽셀에 대한 컨볼루션 공식의 ALPHAX,Y는 다음과 같습니다:

ALPHAX,Y = SOURCEX,Y

preserveAlpha의 초기 값은 false입니다.

애니메이션 가능: 예.

9.10. 필터 프리미티브 feDiffuseLighting

이름: feDiffuseLighting
범주: 필터 프리미티브
콘텐츠 모델: 임의 개수의 설명 요소, script 및 정확히 하나의 광원 요소를 임의의 순서로 사용할 수 있습니다.
속성:
DOM 인터페이스: SVGFEDiffuseLightingElement

이 필터 프리미티브는 알파 채널을 범프 맵으로 사용하여 이미지에 조명을 적용합니다. 결과 이미지는 조명 색상을 기반으로 하며 모든 위치에서 alpha = 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}

참고: 사용자 에이전트는 방정식을 최적화하고 극단적인 색상 값에서 시간 차이가 발생하는 것을 방지하기 위해 "빠른 역제곱근"을 사용할 수 있습니다. 타이밍 공격에 대한 자세한 내용은 개인정보 보호 및 보안 고려사항 절을 참조하십시오.

결과 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))

이 공식에서 dx 및 dy 값(예: 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는 조명에서 x-y 평면의 지점 (pointsAtX, pointsAtY, pointsAtZ)을 향하는 단위 벡터입니다:

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에서는 음수가 아닌 임의의 숫자일 수 있습니다.

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

애니메이션 가능: 예.

kernelUnitLength = "<number-optional-number>"

첫 번째 숫자는 <dx> 값입니다. 두 번째 숫자는 <dy> 값입니다. <dy> 값이 지정되지 않으면 <dx>와 같은 값을 기본값으로 사용합니다. primitiveUnits 속성 값에 의해 결정되는 현재 필터 단위에서 표면 법선 계산 공식의 dx와 dy에 대해 의도된 거리를 각각 나타냅니다. kernelUnitLength에 값을 지정하면 커널은 확장 가능한 추상 좌표계에서 정의됩니다. kernelUnitLength가 지정되지 않으면 dx 및 dy 값은 지정된 (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)는 xChannelSelector 및 yChannelSelector가 지정한 채널의 컴포넌트 값입니다. 예를 들어 in2의 R 컴포넌트로 x 방향 변위를 제어하고 Image2의 G 컴포넌트로 y 방향 변위를 제어하려면 xChannelSelector를 "R"로 설정하고 yChannelSelector를 "G"로 설정합니다.

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

입력 이미지 in은 이 필터 프리미티브에서 미리 곱해진 상태로 유지되어야 합니다. in2의 픽셀 값을 사용하는 계산은 미리 곱해지지 않은 색상 값을 사용하여 수행됩니다.

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

이 필터를 적용할 때 소스 픽셀 위치는 흔히 여러 소스 픽셀 사이에 놓입니다.

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

참고: 이 명세의 향후 버전에서는 소스 이미지를 왜곡할 때 사용할 보간 방법을 정의하여 UA의 렌더링 결과 간 상호 운용성을 높일 예정입니다.

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

속성 정의:

scale = "<number>"

변위 스케일 계수입니다. 값은 primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계로 표현됩니다.

이 속성의 값이 0이면 이 연산은 소스 이미지에 영향을 주지 않습니다.

scale의 초기 값은 0입니다.

애니메이션 가능: 예.

xChannelSelector = "R | G | B | A"

in2의 어느 채널을 사용하여 in의 픽셀을 x축을 따라 변위시킬지 나타냅니다.

xChannelSelector의 초기 값은 A입니다.

애니메이션 가능: 예.

yChannelSelector = "R | G | B | A"

in2의 어느 채널을 사용하여 in의 픽셀을 y축을 따라 변위시킬지 나타냅니다.

yChannelSelector의 초기 값은 A입니다.

애니메이션 가능: 예.

in2 = "(in 속성 참조)"

in 속성의 이미지 픽셀을 변위시키는 데 사용되는 두 번째 입력 이미지입니다. in 속성의 정의를 참조하십시오.

애니메이션 가능: 예.

9.12. 필터 프리미티브 feDropShadow

이름: feDropShadow
범주: 필터 프리미티브
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다.
속성:
DOM 인터페이스: SVGFEDropShadowElement

이 필터는 입력 이미지의 드롭 섀도를 생성합니다. 이는 단축 필터이며, 다른 필터 프리미티브의 조합으로 정의됩니다. 구현에서 더 쉽게 최적화할 수 있을 것으로 예상됩니다.

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 필터 프리미티브 입력의 알파 채널과 feDropShadow의 stdDeviation을 가져와 다음 feGaussianBlur가 적용된 것처럼 처리합니다:

    <feGaussianBlur in="alpha-channel-of-feDropShadow-in" stdDeviation="stdDeviation-of-feDropShadow"/>
    
  2. 1단계의 결과를 feDropShadow 요소에 지정된 dx 및 dy만큼 오프셋합니다. 이는 해당 매개변수로 feOffset을 적용하는 것과 동등합니다:

    <feOffset dx="dx-of-feDropShadow" dy="dy-of-feDropShadow" result="offsetblur"/>
    
  3. feDropShadow에 지정된 flood-color 및 flood-opacity을 가진 feFlood 요소가 적용된 것처럼 처리합니다:

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

    <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입니다.

그런 다음 이 속성은 내부 feOffset 요소의 dx 속성으로 전달됩니다.

애니메이션 가능: 예.

dy = "<number>"

드롭 섀도의 y 오프셋입니다.

dy의 초기 값은 2입니다.

그런 다음 이 속성은 내부 feOffset 요소의 dy 속성으로 전달됩니다.

애니메이션 가능: 예.

stdDeviation = "<number-optional-number>"

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

stdDeviation의 초기 값은 2입니다.

그런 다음 이 속성은 내부 feGaussianBlur 요소의 stdDeviation 속성으로 전달됩니다.

애니메이션 가능: 예.

9.13. 필터 프리미티브 feFlood

이름: feFlood
범주: 필터 프리미티브
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다.
속성:
DOM 인터페이스: SVGFEFloodElement

이 필터 프리미티브는 flood-color 및 flood-opacity 속성의 색상과 불투명도 값으로 채워진 직사각형을 생성합니다. 이 직사각형은 feFlood 요소가 설정한 필터 프리미티브 하위 영역만큼 큽니다.

9.13.1. flood-color 속성

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

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

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

9.13.2. flood-opacity 속성

이름: flood-opacity
값: <alpha-value>
초기값: 1
적용 대상: feFlood 및 feDropShadow 요소
상속: 아니요
백분율: 해당 없음
계산값: 지정된 값을 숫자로 변환하고 [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"는 y 방향의 표준 편차이며, stdDeviation으로 지정됩니다.

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

stdDeviation에 하나의 값만 제공되어도 이는 분리 가능한 컨볼루션으로 구현할 수 있습니다.

"s" 값이 큰 경우(s >= 2.0)에는 근사값을 사용할 수 있습니다. 연속된 세 번의 박스 블러는 구간별 이차 컨볼루션 커널을 구성하며, 이는 가우시안 커널을 대략 3% 이내로 근사합니다.

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

... d가 홀수이면 출력 픽셀을 중심으로 크기가 "d"인 박스 블러 세 개를 사용합니다.

... d가 짝수이면 크기가 "d"인 박스 블러 두 개(첫 번째는 출력 픽셀과 왼쪽 픽셀 사이의 픽셀 경계를 중심으로 하고, 두 번째는 출력 픽셀과 오른쪽 픽셀 사이의 픽셀 경계를 중심으로 함)와 출력 픽셀을 중심으로 하는 크기가 "d+1"인 박스 블러 하나를 사용합니다.

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

이 연산은 흔히 내장 입력인 SourceAlpha가 생성하는 것과 같은 알파 전용 이미지에서 수행됩니다. 구현은 이를 감지하여 단일 채널의 경우를 최적화할 수 있습니다. 이 최적화가 어떤 형태로든 개인정보 보호 문제를 일으키는 경우에는 생략해야 합니다. (타이밍 공격에 대한 자세한 내용은 개인정보 보호 및 보안 고려사항 절을 참조하십시오.) 입력이 무한한 범위를 가지며 일정한 경우(예: 채우기가 단색인 FillPaint) 이 연산은 영향을 주지 않습니다. 입력이 무한한 범위를 가지며 필터 결과 (채우기가 단색인 경우)가 feTile의 입력인 경우 필터는 주기적 경계 조건으로 평가됩니다.

속성 정의:

stdDeviation = "<number-optional-number>"

블러 연산의 표준 편차입니다. 두 개의 <number>가 제공되면 첫 번째 숫자는 filter 요소의 primitiveUnits 속성이 설정한 좌표계의 x축을 따른 표준 편차 값을 나타냅니다. 두 번째 값은 Y 방향의 표준 편차를 나타냅니다. 하나의 숫자만 제공되면 해당 값이 X와 Y 모두에 사용됩니다.

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

stdDeviation이 X 또는 Y 중 하나에서만 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 요소의 동작에 따라 렌더링됩니다. 어느 경우든 현재 사용자 좌표계는 filter 요소의 primitiveUnits 속성 값에 따라 달라집니다. feImage 요소의 preserveAspectRatio 속성 처리는 image 요소의 처리와 동일합니다.

href 참조가 빈 이미지(너비가 0이거나 높이가 0), 다운로드에 실패한 이미지, 존재하지 않는 이미지 또는 표시할 수 없는 이미지(예: 지원되는 이미지 형식이 아닌 경우)인 경우 필터 프리미티브 하위 영역을 투명한 검정색으로 채웁니다.

참조된 이미지를 기기 좌표계에 맞추기 위해 리샘플링해야 하는 경우 고품질 뷰어는 쌍선형 또는 쌍삼차와 같은 적절한 보간 기법을 사용하는 것이 권장됩니다. 사용할 수 있는 보간 기법의 속도에 따라 이 선택은 image-rendering 속성 설정의 영향을 받을 수 있습니다.

속성 정의:

xlink:href = "<url>"

href 속성을 참조하십시오.

애니메이션 가능: 예.

참고: 이 xlink:href 속성은 더 이상 사용되지 않으며 새 콘텐츠에서 사용해서는 안 됩니다. 이전 버전과의 호환성을 위해서만 포함되어 있습니다. 작성자는 대신 href 속성을 사용해야 합니다.

href = "<url>"

이미지 리소스 또는 요소를 가리키는 <url>입니다. xlink:href와 href 속성이 모두 지정된 경우 후자가 전자의 정의를 재정의합니다.

애니메이션 가능: 예.

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

preserveAspectRatio를 참조하십시오.

preserveAspectRatio의 초기 값은 xMidYMid meet입니다.

애니메이션 가능: 예.

crossorigin = "anonymous | use-credentials"

crossorigin 속성은 CORS 설정 속성입니다. 이 속성의 목적은 교차 출처 접근을 허용하는 서드 파티 사이트의 이미지를 feDisplacementMap과 함께 사용할 수 있게 하는 것입니다. 정의는 img 태그 [HTML5]의 crossorigin 속성과 이 명세의 개인정보 보호 및 보안 고려사항 절을 참조하십시오.

애니메이션 가능: 아니요.

다음 예는 객체를 기준으로 이미지가 배치되는 방법을 보여 줍니다. 왼쪽에서 오른쪽 순서입니다:

<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>feImage 예 - feImage 사용 예</title>
  <desc>feImage를 사용하는 세 가지 예로, 첫 번째는
        기본 렌더링을 보여 주고, 두 번째는 이미지를 상자에
        맞춘 모습을 보여 주며, 세 번째는 이미지를
        이동하고 클리핑한 모습을 보여 줍니다.</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>
feImage 예 — feImage 사용 예

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인 직사각형입니다. 팽창에서는 출력 픽셀이 입력 이미지의 커널 직사각형에 있는 해당 R,G,B,A 값 각각의 컴포넌트별 최댓값입니다. 침식에서는 출력 픽셀이 입력 이미지의 커널 직사각형에 있는 해당 R,G,B,A 값 각각의 컴포넌트별 최솟값입니다.

이 연산은 흔히 내장 입력인 SourceAlpha가 생성하는 것과 같은 알파 전용 이미지에서 수행됩니다. 이 경우 구현은 단일 채널의 경우를 최적화할 수 있습니다. 이 최적화가 어떤 형태로든 개인정보 보호 문제를 일으키는 경우에는 생략해야 합니다. (자세한 내용은 개인정보 보호 및 보안 고려사항 절을 참조하십시오.)

입력이 무한한 범위를 가지며 일정한 경우(예: 채우기가 단색인 FillPaint) 이 연산은 영향을 주지 않습니다. 입력이 무한한 범위를 가지며 필터 결과가 feTile의 입력인 경우 필터는 주기적 경계 조건으로 평가됩니다.

feMorphology는 미리 곱해진 색상 값에서 동작하므로 항상 알파 채널보다 작거나 같은 색상 값이 결과로 생성됩니다.

속성 정의:

operator = "erode | dilate"

소스 그래픽을 침식(즉, 가늘게)할지 팽창(굵게)할지를 나타내는 키워드입니다.

operator의 초기 값은 erode입니다.

애니메이션 가능: 예.

radius = "<number-optional-number>"

연산의 반지름(또는 반지름들)입니다. 두 개의 <number>가 제공되면 첫 번째 숫자는 x-radius를 나타내고 두 번째 값은 y-radius를 나타냅니다. 하나의 숫자만 제공되면 해당 값이 X와 Y 모두에 사용됩니다. 값은 filter 요소의 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>
feMorphology의 예

feMorphology의 예

이 예를 SVG로 보기

9.18. 필터 프리미티브 feOffset

이름: feOffset
범주: 필터 프리미티브
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다.
속성:
DOM 인터페이스: SVGFEOffsetElement

이 필터 프리미티브는 지정된 벡터만큼 이미지 공간에서 입력 이미지를 현재 위치를 기준으로 오프셋합니다.

이는 드롭 섀도와 같은 효과에 중요합니다.

이 필터를 적용할 때 대상 위치가 기기 공간에서 픽셀의 일부만큼 오프셋될 수 있습니다. 이 경우 고품질 뷰어는 쌍선형 또는 쌍삼차와 같은 적절한 보간 기법을 사용해야 합니다. 이러한 보간으로 이미지가 시각적으로 더 부드럽게 움직이는 동적 뷰어에서는 특히 권장됩니다. 정적 뷰어에서는 이 문제가 덜 중요합니다. 작성자의 의도를 파악하려면 image-rendering 속성 설정에 세심한 주의를 기울여야 합니다.

속성 정의:

dx = "<number>"

x축을 따라 입력 그래픽을 오프셋할 양입니다. 오프셋 양은 primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계로 표현됩니다.

dx의 초기 값은 0입니다.

애니메이션 가능: 예.

dy = "<number>"

y축을 따라 입력 그래픽을 오프셋할 양입니다. 오프셋 양은 primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계로 표현됩니다.

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 = 표면 법선 단위 벡터, 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인 위치에서는 이미지에 추가적인 커버리지가 더해지지 않고, 완전히 흰색인 하이라이트는 불투명도를 더합니다.

feDiffuseLighting 및 feSpecularLighting 필터는 함께 적용되는 경우가 많습니다. 구현은 이를 감지하여 두 번이 아니라 한 번의 패스로 두 맵을 모두 계산할 수 있습니다.

속성 정의:

surfaceScale = "<number>"

Ain = 1일 때의 표면 높이입니다.

surfaceScale의 초기 값은 1입니다.

애니메이션 가능: 예.

specularConstant = "<number>"

Phong 조명 모델의 ks입니다. SVG에서는 음수가 아닌 임의의 숫자일 수 있습니다.

specularConstant의 초기 값은 1입니다.

애니메이션 가능: 예.

specularExponent = "<number>"

정반사 항의 지수이며, 값이 클수록 더 "광택"이 납니다.

specularExponent의 초기 값은 1입니다.

애니메이션 가능: 예.

kernelUnitLength = "<number-optional-number>"

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

<dy> 값이 지정되지 않으면 <dx>와 같은 값을 기본값으로 사용합니다. 표면 법선 계산 공식의 dx와 dy에 대해 각각 현재 필터 단위(즉, primitiveUnits 속성 값에 의해 결정되는 단위)에서 의도된 거리를 나타냅니다. kernelUnitLength에 값을 지정하면 커널은 확장 가능한 추상 좌표계에서 정의됩니다.

kernelUnitLength가 지정되지 않으면 dx 및 dy 값은 지정된 (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)는 입력 이미지의 필터 프리미티브 하위 영역의 위/왼쪽을 나타내고, width와 height는 입력 이미지의 필터 프리미티브 하위 영역의 너비와 높이를 나타내며, i와 j는 임의의 정수 값일 수 있습니다. 대부분의 경우 반복 패턴 효과를 얻기 위해 입력 이미지는 feTile보다 작은 필터 프리미티브 하위 영역을 갖습니다.

구현자는 타일 이미지 구성 시 타일 사이의 아티팩트를 방지하기 위해 적절한 조치를 취해야 하며, 특히 사용자 좌표에서 기기 좌표로의 변환에 전단 및/또는 회전이 포함되는 경우가 그렇습니다. 주의하지 않으면 각각 특정 픽셀과 부분적으로 겹치는 인접 타일을 그리는 과정의 상호작용으로 인해 보간이 타일 가장자리 픽셀의 불투명도 값을 예상보다 낮거나 높게 만들 수 있습니다.

9.21. 필터 프리미티브 feTurbulence

이름: feTurbulence
범주: 필터 프리미티브
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다.
속성:
DOM 인터페이스: SVGFETurbulenceElement

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

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

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

fractalSum의 경우 -1에서 1 범위를 목표로 하는 turbFunctionResult를 얻습니다(실제 결과는 일부 경우 이 범위를 벗어날 수 있습니다). 색상 또는 알파 값으로 변환하려면 colorValue = (turbFunctionResult + 1) / 2 공식을 사용한 다음 0에서 1 범위로 제한합니다.

turbulence의 경우 0에서 1 범위를 목표로 하는 turbFunctionResult를 얻습니다(실제 결과는 일부 경우 이 범위를 벗어날 수 있습니다). 색상 또는 알파 값으로 변환하려면 colorValue = turbFunctionResult 공식을 사용한 다음 0에서 1 범위로 제한합니다.

의사 난수를 적용하는 데 다음 순서를 사용합니다. 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 vol. 31 no. 10 p. 1195, 1988년 10월 참조
테스트: 원래 시드가 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; // 스티칭을 위해 래핑할 때 뺄 값.
  int nHeight;
  int nWrapX; // 래핑할 최소값.
  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;
  // 스티칭하는 경우 격자점을 그에 맞게 조정합니다.
  if(pStitchInfo != NULL)
  {
    if(bx0 >= pStitchInfo->nWrapX)
      bx0 -= pStitchInfo->nWidth;
    if(bx1 >= pStitchInfo->nWrapX)
      bx1 -= pStitchInfo->nWidth;
    if(by0 >= pStitchInfo->nWrapY)
      by0 -= pStitchInfo->nHeight;
    if(by1 >= pStitchInfo->nWrapY)
      by1 -= pStitchInfo->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이면 스티칭하지 않습니다.
  // 스티칭에 필요한 경우 기본 주파수를 조정합니다.
  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;
    }
    // 초기 스티치 값을 설정합니다.
    pStitchInfo = &stitch;
    stitch.nWidth = int(fTileWidth * fBaseFreqX + 0.5f);
    stitch.nWrapX = fTileX * fBaseFreqX + PerlinN + stitch.nWidth;
    stitch.nHeight = int(fTileHeight * fBaseFreqY + 0.5f);
    stitch.nWrapY = fTileY * fBaseFreqY + PerlinN + stitch.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)
    {
      // 스티치 값을 갱신합니다. 곱셈 전에 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 매개변수입니다.

numOctaves의 초기 값은 1입니다.

음수 값은 지원되지 않습니다.

애니메이션 가능: 예.

참고: 최종 이미지의 색상 및 알파 값에 대한 추가 옥타브 각각의 기여도는 이전 옥타브의 절반입니다. 어느 시점이 되면 추가 옥타브의 기여도가 지정된 색상 깊이의 색상 해상도보다 작아집니다. UA는 지원되는 색상 깊이에 따라 처리 중 numOctaves에 지정된 값을 제한할 수 있습니다. (예: 채널당 8비트의 색상 깊이에서는 UA가 numOctaves 값을 9로 제한할 수 있습니다.)

seed = "<number>"

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

seed의 초기 값은 0입니다.

시드 숫자를 위 알고리즘에 전달할 때는 먼저 잘라내야 합니다. 즉, 0 방향의 가장 가까운 정수 값으로 반올림해야 합니다.

애니메이션 가능: 예.

stitchTiles = "stitch | noStitch"

stitchTiles="noStitch"이면 터뷸런스 함수를 포함하는 타일의 경계에서 부드러운 전환을 만들려는 시도를 하지 않습니다. 경우에 따라 결과에 타일 경계에서 명확한 불연속이 나타납니다.

stitchTiles="stitch"이면 사용자 에이전트는 feTurbulence 노드의 너비와 높이(즉, 현재 하위 영역의 너비와 높이)에 첫 번째 옥타브의 Perlin 타일 너비와 높이가 정수 개수만큼 포함되도록 baseFrequency-x와 baseFrequency-y 값을 자동으로 조정합니다. baseFrequency는 상대적(절대적이 아님) 변화가 가장 작은 방향에 따라 위 또는 아래로 조정됩니다. 다음과 같이 주파수가 주어지면 lowFreq=floor(width*frequency)/width 및 hiFreq=ceil(width*frequency)/width를 계산합니다. frequency/lowFreq < hiFreq/frequency이면 lowFreq를 사용하고, 그렇지 않으면 hiFreq를 사용합니다. 터뷸런스 값을 생성하는 동안 결과 타일의 크기인 활성 영역의 오른쪽 또는 아래쪽 가장자리에 놓인 격자점을 제외하고는 Perlin Noise에 대해 일반적인 방식으로 격자 벡터를 생성합니다. 이러한 경우에는 활성 영역의 반대쪽 가장자리에서 격자 벡터를 복사합니다.

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
적용 대상: 모든 필터 프리미티브
상속: 예
백분율: 해당 없음
계산값: 지정된 대로
표준 순서: 문법에 따름
미디어: 시각
애니메이션 가능: 아니요
auto

사용자 에이전트가 필터 효과 색상 연산에 sRGB 또는 linearRGB 공간 중 하나를 선택할 수 있음을 나타냅니다. 이 옵션은 작성자가 색상 연산이 특정 색 공간에서 이루어질 것을 요구하지 않음을 나타냅니다.

sRGB

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

linearRGB

필터 효과 색상 연산이 선형화된 RGB 색 공간에서 수행되어야 함을 나타냅니다.

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

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

참고: color-interpolation-filters의 초기 값은 color-interpolation과 다릅니다. color-interpolation-filters의 초기 값은 linearRGB인 반면, color-interpolation의 초기 값은 sRGB입니다. 따라서 기본적으로 필터 효과 연산은 linearRGB 색 공간에서 수행되는 반면, 다른 모든 색상 보간은 기본적으로 sRGB 색 공간에서 수행됩니다.

참고: color-interpolation-filters 속성은 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입니다.

애니메이션 가능: 예.

다음 다이어그램은 azimuth 및 elevation이 XYZ 좌표계에서 나타내는 각도를 보여 줍니다.

azimuth 및 elevation이 나타내는 각도

azimuth 및 elevation이 나타내는 각도

11.3. 광원 fePointLight

이름: fePointLight
범주: 광원
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다.
속성:
DOM 인터페이스: SVGFEPointLightElement

속성 정의:

x = "<number>"

primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 X 위치입니다.

x의 초기 값은 0입니다.

애니메이션 가능: 예.

y = "<number>"

primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 Y 위치입니다.

y의 초기 값은 0입니다.

애니메이션 가능: 예.

z = "<number>"

primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 Z 위치입니다. 초기 로컬 좌표계에서 양의 Z축이 콘텐츠를 보는 사람을 향해 나온다고 가정하며, Z축을 따른 한 단위는 X 및 Y의 한 단위와 같다고 가정합니다.

z의 초기 값은 0입니다.

애니메이션 가능: 예.

11.4. 광원 feSpotLight

이름: feSpotLight
범주: 광원
콘텐츠 모델: 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다.
속성:
DOM 인터페이스: SVGFESpotLightElement

속성 정의:

x = "<number>"

primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 X 위치입니다.

x의 초기 값은 0입니다.

애니메이션 가능: 예.

y = "<number>"

primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 Y 위치입니다.

y의 초기 값은 0입니다.

애니메이션 가능: 예.

z = "<number>"

primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 Z 위치입니다. 초기 로컬 좌표계에서 양의 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 요소에 설정하여 확립한 좌표계로 표현됩니다. 초기 로컬 좌표계에서 양의 Z축이 콘텐츠를 보는 사람을 향해 나온다고 가정하며, Z축을 따른 한 단위는 X 및 Y의 한 단위와 같다고 가정합니다.

pointsAtZ의 초기 값은 0입니다.

애니메이션 가능: 예.

specularExponent = "<number>"

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

specularExponent의 초기 값은 1입니다.

specularExponent 사용 방법은 필터 프리미티브 <feDiffuseLighting> 절을 참조하십시오.

참고: specularExponent는 feSpotLight에서 specularExponent가 feSpecularLighting에서 수행하는 것과는 다른 사용 사례를 제공합니다.

애니메이션 가능: 예.

limitingConeAngle = "<number>"

빛이 투사되는 영역을 제한하는 제한 원뿔입니다. 원뿔 바깥에는 빛이 투사되지 않습니다. limitingConeAngle은 스폿 광원 축(즉, 광원과 광원이 가리키는 지점 사이의 축)과 스폿 광원 원뿔 사이의 각도를 도 단위로 나타냅니다. 사용자 에이전트는 원뿔 경계에 안티앨리어싱과 같은 평활화 기법을 적용해야 합니다.

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

애니메이션 가능: 예.

11.5. lighting-color 속성

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

lighting-color 속성은 필터 프리미티브 feDiffuseLighting 및 feSpecularLighting의 광원 색상을 정의합니다.

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

12. 필터 CSS <image> 값

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

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

<filter()> 함수는 두 개의 인수를 받습니다. 첫 번째 인수는 <image>입니다. 두 번째는 CSS filter 속성에 지정된 필터 함수 목록입니다. 함수는 <image> 매개변수를 받아 필터 규칙을 적용하고 처리된 이미지를 반환합니다. 필터 및 필터 효과 영역의 크기는 입력 <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. 단축형의 필터 영역

이전 하위 절에서 필터 프리미티브로 구현된 모든 단축형 필터에는 UA가 정의한 필터 영역이 있어야 합니다. 필터 영역은 오버플로되는 콘텐츠, 스크롤바와 같은 그래픽 제어 요소, border/border-image, box-shadow, text-shadow 및 outline을 포함하여 요소의 시각적 콘텐츠를 덮어야 합니다. 또한 <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 요소에서 애니메이션합니다. 지정된 두 애니메이션은 모두 가산형이며 지속 시간은 10s입니다.
<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>

5s 후 filter의 사용값은 blur(5px) sepia(0.5)입니다.

14.3. 누적

두 필터 값 Va와 Vb가 주어지면 필터 값 Vb를 반환합니다.

15. 개인정보 보호 및 보안 고려사항

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

모든 필터 연산의 실행 시간은 필터링된 콘텐츠 또는 개인정보에 민감한 정보를 잠재적으로 포함할 수 있는 다른 소스에서 파생된 픽셀 값과 독립적이어야 합니다.

다음 필터 프리미티브는 필터링된 객체 자체 또는 CSS 스타일 지정과 같은 다른 소스에서 개인정보에 민감한 정보를 잠재적으로 포함하는 픽셀 값에 접근할 수 있습니다. 이러한 프리미티브는 "오염됨"으로 표시해야 합니다.

  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. 필터 프리미티브: SourceGraphic, SourceAlpha, BackgroundImage, BackgroundAlpha, FillPaint 및 StrokePaint.

feFlood, feDropShadow, feDiffuseLighting 및 feSpecularLighting은 속성 값으로 <color>를 받는 하나 이상의 CSS 속성을 가진 프리미티브입니다. <color>는 (그 밖에도) currentColor 키워드로 구성됩니다. currentColor의 사용값은 color 속성에서 파생됩니다. color는 :visited 의사 선택자로 설정될 수 있으므로 개인정보에 민감한 정보를 잠재적으로 포함할 수 있으며, 따라서 이러한 프리미티브는 오염된 것으로 표시해야 합니다.

feImage는 교차 도메인 이미지뿐 아니라 SVG 그래픽 요소와 같은 문서 조각도 참조할 수 있습니다. 이러한 참조는 개인정보에 민감한 정보를 잠재적으로 포함할 수 있으므로 프리미티브를 오염된 것으로 표시해야 합니다.

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

입력으로 "오염됨" 표시가 된 필터 프리미티브를 갖는 모든 필터 프리미티브도 "오염됨"으로 표시해야 합니다.

입력 필터 프리미티브 중 하나라도 "오염됨"으로 표시된 경우 필터 연산은 픽셀 값과 관계없이 항상 같은 시간이 걸리도록 구현해야 합니다.

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

15.2. feDisplacementMap 제한

feDisplacementMap이 입력으로 "오염됨" 표시가 된 필터 프리미티브를 가지고 있고 이 입력 필터 프리미티브가 변위 맵(in2에서 참조됨)으로 사용되는 경우, feDisplacementMap은 필터 연산을 진행해서는 안 되며 통과 필터로 동작해야 합니다.

15.3. 출처 제한

사용자 에이전트는 filter 속성에 대해 [HTML5] 명세에서 정의한 잠재적으로 CORS가 활성화된 가져오기 방법을 사용해야 합니다. 가져올 때 사용자 에이전트는 "Anonymous" 모드를 사용하고, 리퍼러 소스를 스타일시트의 URL로 설정하며, 출처를 포함하는 문서의 URL로 설정해야 합니다. 이로 인해 네트워크 오류가 발생하면 none 값이 지정된 것처럼 동작합니다.

15.4. 타이밍 공격

위 규칙 중 하나라도 따르지 않으면 공격자가 정보를 추론하고 타이밍 공격을 수행할 수 있습니다.

타이밍 공격은 연산이 수행되는 데 걸리는 시간을 조사하여 원래 보호되는 콘텐츠에 대한 정보를 얻는 방법입니다. 예를 들어 빨간색 픽셀을 그리는 데 녹색 픽셀보다 더 오래 걸린다면, 요소의 콘텐츠에 한 번도 접근하지 않고도 렌더링되는 요소의 대략적인 이미지를 복원할 수 있습니다. 보안 연구에 따르면 산술 연산의 시간 차이는 하드웨어 아키텍처 또는 컴파일러로 인해 발생할 수 있습니다 [ArTD].

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

SVG 1.1에서는 enable-background 속성을 도입했습니다 [SVG11]. 이 속성은 filter 요소가 호출될 때 필터 영역 아래의 배경을 정의했습니다. 이 속성이 정의한 개념은 이 명세를 작성할 당시 CSS의 스태킹 컨텍스트 모델과 호환되지 않는 것으로 확인되었습니다. UA는 SVG 1.1에서 정의한 대로 enable-background 속성을 구현하도록 선택할 수 있지만, 이 명세 또는 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, 읽기 전용

지정된 filter 요소의 filterUnits 속성에 대응합니다. SVGUnitTypes에 정의된 상수 중 하나를 사용합니다.

primitiveUnits, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 filter 요소의 primitiveUnits 속성에 대응합니다. SVGUnitTypes에 정의된 상수 중 하나를 사용합니다.

x, 유형: SVGAnimatedLength, 읽기 전용

지정된 filter 요소의 x 속성에 대응합니다.

y, 유형: SVGAnimatedLength, 읽기 전용

지정된 filter 요소의 y 속성에 대응합니다.

width, 유형: SVGAnimatedLength, 읽기 전용

지정된 filter 요소의 width 속성에 대응합니다.

height, 유형: SVGAnimatedLength, 읽기 전용

지정된 filter 요소의 height 속성에 대응합니다.

인터페이스 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 {

  // 블렌드 모드 유형
  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, 읽기 전용

지정된 feBlend 요소의 in 속성에 대응합니다.

in2, 유형: SVGAnimatedString, 읽기 전용

지정된 feBlend 요소의 in2 속성에 대응합니다.

mode, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 feBlend 요소의 mode 속성에 대응합니다. 이 인터페이스에 정의된 SVG_FEBLEND_MODE_* 상수 중 하나를 사용합니다.

인터페이스 SVGFEColorMatrixElement

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

interface SVGFEColorMatrixElement : SVGElement {

  // 색상 행렬 유형
  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, 읽기 전용

지정된 feColorMatrix 요소의 in 속성에 대응합니다.

type, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 feColorMatrix 요소의 type 속성에 대응합니다. 이 인터페이스에 정의된 SVG_FECOLORMATRIX_TYPE_* 상수 중 하나를 사용합니다.

values, 유형: SVGAnimatedNumberList, 읽기 전용

지정된 feColorMatrix 요소의 values 속성에 대응합니다.

인터페이스 SVGFEComponentTransferElement

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

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

SVGFEComponentTransferElement includes SVGFilterPrimitiveStandardAttributes;
속성:
in1, 유형: SVGAnimatedString, 읽기 전용

지정된 feComponentTransfer 요소의 in 속성에 대응합니다.

인터페이스 SVGComponentTransferFunctionElement

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

interface SVGComponentTransferFunctionElement : SVGElement {

  // 컴포넌트 전달 유형
  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, 읽기 전용

지정된 feComponentTransfer 요소의 in 속성에 대응합니다. 이 인터페이스에 정의된 SVG_FECOMPONENTTRANSFER_TYPE_* 상수 중 하나를 사용합니다.

tableValues, 유형: SVGAnimatedNumberList, 읽기 전용

지정된 feComponentTransfer 요소의 tableValues 속성에 대응합니다. 이 인터페이스에 정의된 SVG_FECOLORMATRIX_TYPE_* 상수 중 하나를 사용합니다.

slope, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feComponentTransfer 요소의 slope 속성에 대응합니다.

intercept, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feComponentTransfer 요소의 intercept 속성에 대응합니다.

amplitude, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feComponentTransfer 요소의 amplitude 속성에 대응합니다.

exponent, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feComponentTransfer 요소의 exponent 속성에 대응합니다.

offset, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feComponentTransfer 요소의 offset 속성에 대응합니다.

인터페이스 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 {

  // 합성 연산자
  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, 읽기 전용

지정된 feComposite 요소의 in 속성에 대응합니다.

in2, 유형: SVGAnimatedString, 읽기 전용

지정된 feComposite 요소의 in2 속성에 대응합니다.

operator, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 feComposite 요소의 operator 속성에 대응합니다.

k1, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feComposite 요소의 k1 속성에 대응합니다.

k2, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feComposite 요소의 k2 속성에 대응합니다.

k3, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feComposite 요소의 k3 속성에 대응합니다.

k4, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feComposite 요소의 k4 속성에 대응합니다.

인터페이스 SVGFEConvolveMatrixElement

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

interface SVGFEConvolveMatrixElement : SVGElement {

  // 가장자리 모드 값
  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, 읽기 전용

지정된 feConvolveMatrix 요소의 in 속성에 대응합니다.

orderX, 유형: SVGAnimatedInteger, 읽기 전용

지정된 feConvolveMatrix 요소의 order 속성에 대응합니다.

orderY, 유형: SVGAnimatedInteger, 읽기 전용

지정된 feConvolveMatrix 요소의 order 속성에 대응합니다.

kernelMatrix, 유형: SVGAnimatedNumberList, 읽기 전용

지정된 feConvolveMatrix 요소의 kernelMatrix 속성에 대응합니다.

divisor, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feConvolveMatrix 요소의 divisor 속성에 대응합니다.

bias, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feConvolveMatrix 요소의 bias 속성에 대응합니다.

targetX, 유형: SVGAnimatedInteger, 읽기 전용

지정된 feConvolveMatrix 요소의 targetX 속성에 대응합니다.

targetY, 유형: SVGAnimatedInteger, 읽기 전용

지정된 feConvolveMatrix 요소의 targetY 속성에 대응합니다.

edgeMode, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 feConvolveMatrix 요소의 edgeMode 속성에 대응합니다.

kernelUnitLengthX, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feConvolveMatrix 요소의 kernelUnitLength 속성에 대응합니다.

kernelUnitLengthY, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feConvolveMatrix 요소의 kernelUnitLength 속성에 대응합니다.

preserveAlpha, 유형: SVGAnimatedBoolean, 읽기 전용

지정된 feConvolveMatrix 요소의 preserveAlpha 속성에 대응합니다.

인터페이스 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, 읽기 전용

지정된 feDiffuseLighting 요소의 in 속성에 대응합니다.

surfaceScale, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feDiffuseLighting 요소의 surfaceScale 속성에 대응합니다.

diffuseConstant, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feDiffuseLighting 요소의 diffuseConstant 속성에 대응합니다.

kernelUnitLengthX, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feDiffuseLighting 요소의 kernelUnitLength 속성에 대응합니다.

kernelUnitLengthY, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feDiffuseLighting 요소의 kernelUnitLength 속성에 대응합니다.

인터페이스 SVGFEDistantLightElement

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

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

지정된 feDistantLight 요소의 azimuth 속성에 대응합니다.

elevation, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feDistantLight 요소의 elevation 속성에 대응합니다.

인터페이스 SVGFEPointLightElement

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

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

지정된 fePointLight 요소의 x 속성에 대응합니다.

y, 유형: SVGAnimatedNumber, 읽기 전용

지정된 fePointLight 요소의 y 속성에 대응합니다.

z, 유형: SVGAnimatedNumber, 읽기 전용

지정된 fePointLight 요소의 z 속성에 대응합니다.

인터페이스 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, 읽기 전용

지정된 feSpotLight 요소의 x 속성에 대응합니다.

y, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpotLight 요소의 y 속성에 대응합니다.

z, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpotLight 요소의 z 속성에 대응합니다.

pointsAtX, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpotLight 요소의 pointsAtX 속성에 대응합니다.

pointsAtY, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpotLight 요소의 pointsAtY 속성에 대응합니다.

pointsAtZ, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpotLight 요소의 pointsAtZ 속성에 대응합니다.

specularExponent, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpotLight 요소의 specularExponent 속성에 대응합니다.

limitingConeAngle, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpotLight 요소의 limitingConeAngle 속성에 대응합니다.

인터페이스 SVGFEDisplacementMapElement

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

interface SVGFEDisplacementMapElement : SVGElement {

  // 채널 선택자
  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, 읽기 전용

지정된 feDisplacementMap 요소의 in 속성에 대응합니다.

in2, 유형: SVGAnimatedString, 읽기 전용

지정된 feDisplacementMap 요소의 in2 속성에 대응합니다.

scale, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feDisplacementMap 요소의 scale 속성에 대응합니다.

xChannelSelector, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 feDisplacementMap 요소의 xChannelSelector 속성에 대응합니다. 이 인터페이스에 정의된 SVG_CHANNEL_* 상수 중 하나를 사용합니다.

yChannelSelector, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 feDisplacementMap 요소의 yChannelSelector 속성에 대응합니다. 이 인터페이스에 정의된 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, 읽기 전용

지정된 feDropShadow 요소의 in 속성에 대응합니다.

dx, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feDropShadow 요소의 dx 속성에 대응합니다.

dy, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feDropShadow 요소의 dy 속성에 대응합니다.

stdDeviationX, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feDropShadow 요소의 stdDeviation 속성에 대응합니다. stdDeviation 속성의 X 컴포넌트를 포함합니다.

stdDeviationY, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feDropShadow 요소의 stdDeviation 속성에 대응합니다. 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 {

  // 가장자리 모드 값
  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, 읽기 전용

지정된 feGaussianBlur 요소의 in 속성에 대응합니다.

stdDeviationX, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feGaussianBlur 요소의 stdDeviation 속성에 대응합니다. stdDeviation 속성의 X 컴포넌트를 포함합니다.

stdDeviationY, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feGaussianBlur 요소의 stdDeviation 속성에 대응합니다. stdDeviation 속성의 Y 컴포넌트를 포함합니다.

edgeMode, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 feGaussianBlur 요소의 edgeMode 속성에 대응합니다. 이 인터페이스에 정의된 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, 읽기 전용

지정된 feImage 요소의 preserveAspectRatio 속성에 대응합니다.

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, 읽기 전용

지정된 feMergeNode 요소의 in 속성에 대응합니다.

인터페이스 SVGFEMorphologyElement

SVGFEMorphologyElement 인터페이스는 feMorphology 요소에 대응합니다.

interface SVGFEMorphologyElement : SVGElement {

  // 모폴로지 연산자
  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, 읽기 전용

지정된 feMorphology 요소의 in 속성에 대응합니다.

operator, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 feMorphology 요소의 operator 속성에 대응합니다. 이 인터페이스에 정의된 SVG_MORPHOLOGY_OPERATOR_* 상수 중 하나를 사용합니다.

radiusX, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feMorphology 요소의 radius 속성에 대응합니다. radius 속성의 X 컴포넌트를 포함합니다.

radiusY, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feMorphology 요소의 radius 속성에 대응합니다. 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, 읽기 전용

지정된 feOffset 요소의 in 속성에 대응합니다.

dx, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feOffset 요소의 dx 속성에 대응합니다.

dy, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feOffset 요소의 dy 속성에 대응합니다.

인터페이스 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, 읽기 전용

지정된 feSpecularLighting 요소의 in 속성에 대응합니다.

surfaceScale, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpecularLighting 요소의 surfaceScale 속성에 대응합니다.

specularConstant, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpecularLighting 요소의 specularConstant 속성에 대응합니다.

specularExponent, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpecularLighting 요소의 specularExponent 속성에 대응합니다.

kernelUnitLengthX, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpecularLighting 요소의 kernelUnitLength 속성에 대응합니다.

kernelUnitLengthY, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feSpecularLighting 요소의 kernelUnitLength 속성에 대응합니다.

인터페이스 SVGFETileElement

SVGFETileElement 인터페이스는 feTile 요소에 대응합니다.

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

SVGFETileElement includes SVGFilterPrimitiveStandardAttributes;
속성:
in1, 유형: SVGAnimatedString, 읽기 전용

지정된 feTile 요소의 in 속성에 대응합니다.

인터페이스 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, 읽기 전용

지정된 feTurbulence 요소의 baseFrequency 속성에 대응합니다. baseFrequency 속성의 X 컴포넌트를 포함합니다.

baseFrequencyY, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feTurbulence 요소의 baseFrequency 속성에 대응합니다. baseFrequency 속성의 Y 컴포넌트를 포함합니다.

numOctaves, 유형: SVGAnimatedInteger, 읽기 전용

지정된 feTurbulence 요소의 numOctaves 속성에 대응합니다.

seed, 유형: SVGAnimatedNumber, 읽기 전용

지정된 feTurbulence 요소의 seed 속성에 대응합니다.

stitchTiles, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 feTurbulence 요소의 stitchTiles 속성에 대응합니다. 이 인터페이스에 정의된 SVG_TURBULENCE_TYPE_* 상수 중 하나를 사용합니다.

type, 유형: SVGAnimatedEnumeration, 읽기 전용

지정된 feTurbulence 요소의 type 속성에 대응합니다. 이 인터페이스에 정의된 SVG_STITCHTYPE_* 상수 중 하나를 사용합니다.

변경 사항

2014년 11월 25일 작업 초안 이후 다음과 같은 중요한 변경 사항이 적용되었습니다.

2013년 11월 26일 작업 초안 이후 다음과 같은 중요한 변경 사항이 적용되었습니다.

2012년 10월 25일 작업 초안 이후 다음과 같은 중요한 변경 사항이 적용되었습니다.

더 자세하고 장기적인 변경 사항은 변경 로그를 참조하십시오.

감사의 말

편집자들은 세심한 검토, 의견 및 수정에 도움을 주신 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-규칙, 속성, 속성 값, 키워드 및 기타 구문 구조를 반드시 유효하지 않은 것으로 취급하고 (그리고 적절히 무시해야) 합니다. 특히 사용자 에이전트는 하나의 다중 값 속성 선언에서 지원되지 않는 속성 값만 선택적으로 무시하고 지원되는 값은 적용해서는 안 됩니다: 어떤 값이라도 유효하지 않은 것으로 간주되면(지원되지 않는 값은 반드시 그렇게 간주해야 함), CSS는 전체 선언을 무시하도록 요구합니다.

불안정 및 독점 기능의 구현

향후 안정적인 CSS 기능과의 충돌을 피하기 위해 CSSWG는 CSS의 불안정한 기능과 독점 확장을 구현할 때 모범 사례를 따를 것을 권장합니다.

CR 수준 기능의 구현

명세가 후보 권고안 단계에 도달하면 구현자는 명세에 따라 올바르게 구현되었음을 입증할 수 있는 모든 CR 수준 기능의 접두사 없는 구현을 공개해야 하며, 해당 기능의 접두사 버전을 노출하지 않는 것이 좋습니다.

여러 구현 간 CSS의 상호 운용성을 확립하고 유지하기 위해 CSS Working Group은 비실험적 CSS 렌더러가 CSS 기능의 접두사 없는 구현을 공개하기 전에 구현 보고서(필요한 경우 해당 구현 보고서에 사용된 테스트 케이스도 포함)를 W3C에 제출할 것을 요청합니다. W3C에 제출된 테스트 케이스는 CSS Working Group의 검토 및 수정 대상이 됩니다.

테스트 케이스 및 구현 보고서 제출에 관한 자세한 정보는 CSS Working Group 웹사이트의 https://www.w3.org/Style/CSS/Test/에서 확인할 수 있습니다. 질문은 public-css-testsuite@w3.org 메일링 리스트로 보내십시오.

색인

이 명세에서 정의된 용어

참조로 정의된 용어

참고 문헌

규범적 참고 문헌

[COMPOSITING-1]
Rik Cabanier; Nikos Andronikos. 합성 및 블렌딩 레벨 1. 2015년 1월 13일. CR. URL: https://www.w3.org/TR/compositing-1/
[CSS-CASCADE-4]
Elika Etemad; Tab Atkins Jr.. CSS 캐스케이딩 및 상속 레벨 4. 2018년 8월 28일. CR. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley. CSS 색상 모듈 레벨 4. 2016년 7월 5일. WD. URL: https://www.w3.org/TR/css-color-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS 디스플레이 모듈 레벨 3. 2018년 8월 28일. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-FONTS-3]
John Daggett; Myles Maxfield; Chris Lilley. CSS 글꼴 모듈 레벨 3. 2018년 9월 20일. REC. URL: https://www.w3.org/TR/css-fonts-3/
[CSS-FONTS-4]
John Daggett; Myles Maxfield; Chris Lilley. CSS 글꼴 모듈 레벨 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 마스킹 모듈 레벨 1. 2014년 8월 26일. CR. URL: https://www.w3.org/TR/css-masking-1/
[CSS-OVERFLOW-3]
David Baron; Elika Etemad; Florian Rivoal. CSS 오버플로 모듈 레벨 3. 2018년 7월 31일. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-POSITION-3]
Rossen Atanassov; Arron Eicholz. CSS 위치 지정 레이아웃 모듈 레벨 3. 2016년 5월 17일. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS 텍스트 모듈 레벨 3. 2018년 12월 12일. WD. URL: https://www.w3.org/TR/css-text-3/
[CSS-TEXT-DECOR-3]
Elika Etemad; Koji Ishii. CSS 텍스트 장식 모듈 레벨 3. 2018년 7월 3일. CR. URL: https://www.w3.org/TR/css-text-decor-3/
[CSS-TRANSFORMS-1]
Simon Fraser; et al. CSS 변환 모듈 레벨 1. 2018년 11월 30일. WD. URL: https://www.w3.org/TR/css-transforms-1/
[CSS-UI-3]
Tantek Çelik; Florian Rivoal. CSS 기본 사용자 인터페이스 모듈 레벨 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 값 및 단위 모듈 레벨 4. 2018년 10월 10일. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS 쓰기 모드 레벨 3. 2018년 5월 24일. CR. URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS 쓰기 모드 레벨 4. 2018년 5월 24일. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS21]
Bert Bos; et al. 캐스케이딩 스타일시트 레벨 2 개정 1 (CSS 2.1) 명세. 2011년 6월 7일. REC. URL: https://www.w3.org/TR/CSS2/
[CSS3-IMAGES]
Elika Etemad; Tab Atkins Jr.. CSS 이미지 값 및 대체 콘텐츠 모듈 레벨 3. 2012년 4월 17일. CR. URL: https://www.w3.org/TR/css3-images/
[CSS3BG]
Bert Bos; Elika Etemad; Brad Kemper. CSS 배경 및 테두리 모듈 레벨 3. 2017년 10월 17일. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS3COLOR]
Tantek Çelik; Chris Lilley; David Baron. CSS 색상 모듈 레벨 3. 2018년 6월 19일. REC. URL: https://www.w3.org/TR/css-color-3/
[CSS3VAL]
Tab Atkins Jr.; Elika Etemad. CSS 값 및 단위 모듈 레벨 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]
미디어 쿼리 레벨 5 URL: https://drafts.csswg.org/mediaqueries-5/
[RFC2119]
S. Bradner. 요구 수준을 나타내기 위해 RFC에서 사용하는 핵심 단어. 1997년 3월. 현행 모범 사례. URL: https://tools.ietf.org/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. 선택자 레벨 4. 2018년 11월 21일. WD. URL: https://www.w3.org/TR/selectors-4/
[SVG11]
Erik Dahlström; et al. 확장 가능한 벡터 그래픽(SVG) 1.1 (제2 판). 2011년 8월 16일. REC. URL: https://www.w3.org/TR/SVG11/
[SVG2]
Amelia Bellamy-Royds; et al. 확장 가능한 벡터 그래픽(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. 산술 연산의 타이밍 차이. URL: https://wiki.mozilla.org/User:Bjacob/ArithmeticTimingDifferences
[Cmam]
IEC. IEC 61966-2-1:1999 색 측정 및 관리 - 제2-1부: 색 관리 - 기본 RGB 색 공간 - sRGB. URL: https://webstore.iec.ch/publication/6169
[CSS3-ANIMATIONS]
Dean Jackson; et al. CSS 애니메이션 레벨 1. 2018년 10월 11일. WD. URL: https://www.w3.org/TR/css-animations-1/
[PORTERDUFF]
Thomas Porter; Tom Duff. 디지털 이미지 합성.
[TaM]
Ebert et al, AP Professional. 텍스처링 및 모델링. 1994.

속성 색인

이름 값 초기값 적용 대상 상속 백분율 애니메이션 가능 표준 순서 계산값 미디어
color-interpolation-filters auto | sRGB | linearRGB linearRGB 모든 필터 프리미티브 예 해당 없음 아니요 문법에 따름 지정된 대로 시각
filter none | <filter-value-list> none 모든 요소. SVG에서는 defs 요소를 제외한 컨테이너 요소, 모든 그래픽 요소 및 use 요소에 적용됩니다. 아니요 해당 없음 필터 애니메이션의 설명을 참조하십시오. 문법에 따름 지정된 대로 시각
flood-color <color> black feFlood 및 feDropShadow 요소 아니요 해당 없음 색상과 같음 문법에 따름 지정된 대로 시각
flood-opacity <alpha-value> 1 feFlood 및 feDropShadow 요소 아니요 해당 없음 숫자 또는 백분율과 같음 문법에 따름 지정된 값을 숫자로 변환하고 [0,1] 범위로 제한한 값 시각
lighting-color <color> white feDiffuseLighting 및 feSpecularLighting 요소 아니요 해당 없음 색상과 같음 문법에 따름 지정된 대로 시각

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 {

  // 블렌드 모드 유형
  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 {

  // 색상 행렬 유형
  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 {

  // 컴포넌트 전달 유형
  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 {

  // 합성 연산자
  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 {

  // 가장자리 모드 값
  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 {

  // 채널 선택자
  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 {

  // 가장자리 모드 값
  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 {

  // 모폴로지 연산자
  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 {

  // 터뷸런스 유형
  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;

이슈 색인

고정 배경 이미지에서 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> ↵