1. 소개
이 절은 규범적이지 않습니다
필터 효과는 요소가 문서에 그려질 때 해당 요소에 적용되는 그래픽 연산입니다. 이는 이미지 기반 효과로, 0개 이상의 이미지를 입력으로 받고 효과에 고유한 여러 매개변수를 사용한 다음 이미지를 출력으로 생성합니다. 출력 이미지는 원래 요소 대신 문서에 렌더링되거나, 다른 필터 효과의 입력 이미지로 사용되거나, CSS 이미지 값으로 제공됩니다.
필터 효과의 간단한 예는 “flood”입니다. 이미지 입력은 받지 않지만 색상을 정의하는 매개변수를 갖습니다. 이 효과는 지정된 색상으로 완전히 채워진 출력 이미지를 생성합니다. 조금 더 복잡한 예로는 단일 이미지 입력(일반적으로 요소가 정상적으로 부모에 렌더링될 때의 이미지)을 받고 각 픽셀을 반대 색상 값을 갖도록 조정하는 “inversion”이 있습니다.
필터 효과는 두 가지 복잡도 수준으로 제공됩니다:
-
이름으로 지정되는 소수의 미리 정의된 필터 함수입니다. 특별히 강력하지는 않지만, 편리하고 이해하기 쉬우며 흐리게 하기와 같은 일반적인 효과를 구현하는 간단한 방법을 제공합니다. 미리 정의된 필터는 [CSS3-ANIMATIONS]를 통해 애니메이션할 수도 있습니다.
-
전체 효과를 정의하도록 마크업으로 기술된 개별 필터 효과의 그래프입니다. 이 그래프는 어떤 콘텐츠에도 효과를 적용할 수 있으므로 입력에 구애받지 않습니다. 이러한 그래프는 각각만 보면 단순할 수 있는 효과들의 조합이지만, 그래프 전체로는 복잡한 효과를 생성할 수 있습니다. 아래에 예가 나와 있습니다.
#image {
filter : grayscale ( 100 % );
}
필터가 없는 이미지(왼쪽)와 동일한 이미지에 100% grayscale 필터를 적용한 모습 (오른쪽).
필터링된 객체의 초기 예입니다.
위 예에서 사용한 필터 효과를 여기에서 다시 보여 주며, 여섯 개의 각 필터 프리미티브 앞 왼쪽 열에 참조 번호를 표시합니다:
| 1 2 3 4 5 6 |
|
다음 그림은 여섯 개의 각 필터 요소에서 나온 중간 이미지 결과를 보여 줍니다:
소스 그래픽
필터 프리미티브 1 적용 후
필터 프리미티브 2 적용 후
필터 프리미티브 3 적용 후
필터 프리미티브 4 적용 후
필터 프리미티브 5 적용 후
필터 프리미티브 6 적용 후
-
필터 프리미티브 feGaussianBlur는 소스 그래픽의 알파 채널인 SourceAlpha를 입력으로 받습니다. 결과는 "blur"라는 임시 버퍼에 저장됩니다. "blur"는 필터 프리미티브 2와 3 모두의 입력으로 사용된다는 점에 유의하십시오.
-
필터 프리미티브 feOffset은 "blur" 버퍼를 받아 결과를 x와 y 모두의 양의 방향으로 이동시키고 "offsetBlur"라는 새 버퍼를 생성합니다. 그 효과는 드롭 섀도입니다.
-
필터 프리미티브 feSpecularLighting은 "blur" 버퍼를 표면 높이의 모델로 사용하고 단일 점 광원에서 조명 효과를 생성합니다. 결과는 "specOut" 버퍼에 저장됩니다.
-
필터 프리미티브 feComposite는 원본 소스 그래픽의 알파 채널로 필터 프리미티브 3의 결과를 마스킹하여 중간 결과가 원본 소스 그래픽보다 커지지 않도록 합니다.
-
필터 프리미티브 feComposite는 반사광 조명 결과를 원본 소스 그래픽과 합성합니다.
-
필터 프리미티브 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>의 값은 다음 예외를 제외하고 지정된 대로 계산됩니다:
-
생략된 값은 포함되며 해당 기본값으로 계산됩니다.
-
<drop-shadow()>는 <color>의 계산값으로 시작하고 그 뒤에 <length> 값들의 계산값이 이어집니다.
6.3. 필터 함수의 직렬화
<filter-function>을 직렬화하려면, 각 문법이 작성된 순서대로 개별 문법에 따라 직렬화하고 가능한 경우 <calc()> 표현식을 피하며, 지정된 대로 필터 인수를 직렬화하고 <calc()> 변환을 피하며, 공백으로 구분되는 토큰은 하나의 공백으로 연결하고 직렬화된 각 쉼표 뒤에는 하나의 공백을 둡니다.
6.4. 필터 함수의 보간
<filter-function>의 값을 보간할 때는 다음 목록에서 처음으로 일치하는 조건에 해당하는 단계를 실행해야 합니다:
- <blur()>
-
값을 길이로서 계산값에 따라 보간합니다.
- <brightness()>
- <contrast()>
- <grayscale()>
- <invert()>
- <opacity()>
- <saturate()>
- <sepia()>
- <contrast()>
-
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 필터 프리미티브를 사용할 때 종종 발생합니다) 효과의 일부가 클리핑됩니다.
필터를 참조한 요소의 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 좌표입니다. 필터 프리미티브 하위 영역을 참조하십시오.
애니메이션 가능: 예.
y= "<length-percentage>"-
지정된 필터 프리미티브의 계산과 렌더링을 제한하는 하위 영역의 최소 y 좌표입니다. 필터 프리미티브 하위 영역을 참조하십시오.
애니메이션 가능: 예.
width= "<length-percentage>"-
지정된 필터 프리미티브의 계산과 렌더링을 제한하는 하위 영역의 너비입니다. 필터 프리미티브 하위 영역을 참조하십시오.
음수 또는 0 값은 지정된 필터 프리미티브의 효과를 비활성화합니다(즉, 결과는 투명한 검정 이미지입니다).
애니메이션 가능: 예.
height= "<length-percentage>"-
지정된 필터 프리미티브의 계산과 렌더링을 제한하는 하위 영역의 높이입니다. 필터 프리미티브 하위 영역을 참조하십시오.
음수 또는 0 값은 지정된 필터 프리미티브의 효과를 비활성화해야 합니다(즉, 결과는 투명한 검정 이미지입니다).
애니메이션 가능: 예.
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 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개의 필터 프리미티브 트리가 있습니다:
-
feColorMatrix, feOffset 및 feGaussianBlur (feGaussianBlur가 트리의 루트 필터 프리미티브임), 그리고
-
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이면 필터 프리미티브의 효과가 비활성화됩니다.
필터 영역은 필터 프리미티브의 입력 이미지에 대한 강제 클리핑 직사각형으로 작동합니다.
필터 프리미티브 하위 영역은 필터 프리미티브 결과에 대한 강제 클리핑 직사각형으로 작동합니다.
모든 중간 오프스크린은 필터 프리미티브 하위 영역과 필터 영역의 교집합을 초과하지 않도록 정의됩니다. 필터 영역과 각 필터 프리미티브 하위 영역은 필터 영역 또는 필터 프리미티브 하위 영역과 일부라도 교차하는 모든 픽셀을 수용할 수 있을 만큼 모든 오프스크린이 충분히 크게 설정되도록 구성해야 합니다.
< 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 >
하위 영역의 예
위 예에는 각각 십자와 원이 들어 있는 세 개의 직사각형이 있습니다. 각 원 요소에는 서로 다른 필터가 적용되지만 동일한 필터 프리미티브 하위 영역을 사용합니다. 필터 출력은 필터 프리미티브 하위 영역으로 제한되어야 하므로 원 자체는 보이지 않고 필터 프리미티브 하위 영역을 구성하는 직사각형만 보여야 합니다.
-
왼쪽 위 직사각형은 feFlood에 flood-opacity: 75%를 적용한 모습을 보여 주므로 가운데의 녹색 직사각형을 통해 십자가 보여야 합니다.
-
왼쪽 아래 직사각형은 feMerge가 SourceGraphic과 FillPaint를 병합하는 모습을 보여 줍니다. 원에는
fill-opacity="0.5"가 지정되어 있으므로 원도 투명해져 가운데의 녹색 직사각형을 통해 십자가 보여야 합니다. -
오른쪽 위 직사각형은
mode="multiply"가 지정된 feBlend를 보여 줍니다. 이 경우 원은 투명하지 않으므로 결과는 완전히 불투명합니다. 직사각형은 진한 녹색이어야 하며 이를 통해 십자가 보여서는 안 됩니다.
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를 혼합한 결과입니다.애니메이션 가능: 예.
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의 예
9.6. 필터 프리미티브 feColorMatrix
| 이름: | feColorMatrix
|
|---|---|
| 범주: | 필터 프리미티브 |
| 콘텐츠 모델: | 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다. |
| 속성: | |
| DOM 인터페이스: | SVGFEColorMatrixElement |
이 필터는 행렬 변환을 적용합니다:
입력 그래픽의 모든 픽셀에 있는 RGBA 색상 및 알파 값에 적용하여 새로운 RGBA 색상 및 알파 값 집합을 가진 결과를 생성합니다.
계산은 미리 곱해지지 않은 색상 값에 대해 수행됩니다.
속성 정의:
type= "matrix|saturate|hueRotate|luminanceToAlpha"-
행렬 연산의 유형을 나타냅니다. matrix 키워드는 완전한 5x4 값 행렬이 제공됨을 나타냅니다. 다른 키워드는 완전한 행렬을 지정하지 않고도 일반적으로 사용되는 색상 연산을 수행할 수 있게 하는 편의용 단축 표현입니다.
애니메이션 가능: 예.
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 연산은 다음 행렬 연산과 동등합니다:참고: 0 값은 완전히 채도가 제거된(회색조) 필터 결과를 생성하는 반면, 1 값은 필터 입력 이미지를 변경하지 않고 그대로 통과시킵니다. 0..1 범위를 벗어난 값은 필터 입력 이미지의 채도를 각각 부족하게 또는 과도하게 조정합니다.
참고: 휘도 계수의 정밀도는 이전 명세 텍스트 [Cmam]에 비해 높아졌습니다.
-
type="hueRotate"인 경우 values는 하나의 실수 값(도)입니다. hueRotate 연산은 다음 행렬 연산과 동등합니다:여기서 a00, a01 등의 항은 다음과 같이 계산됩니다:
따라서 색조 행렬의 왼쪽 위 항은 다음과 같습니다:
-
type="luminanceToAlpha"인 경우 values는 적용되지 않습니다. luminanceToAlpha 연산은 다음 행렬 연산과 동등합니다:
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의 예
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 - 입력 그래픽의 알파 컴포넌트에 대한 전달 함수
feFuncR, feFuncG, feFuncB, feFuncA 요소 집합은 전달 함수 요소라고도 합니다.
feComponentTransfer 요소의 처리에는 다음 규칙이 적용됩니다:
-
동일한 종류의 전달 함수 요소가 둘 이상 지정된 경우 마지막으로 나타난 요소를 사용해야 합니다.
-
전달 함수 요소 중 하나라도 지정되지 않은 경우 feComponentTransfer는 해당 전달 함수 요소가 type 속성이 identity로 설정되어 지정된 것처럼 처리해야 합니다.
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' = vkC = 1이면:C' = vn-1. -
linear인 경우, 함수는 다음 선형 방정식으로 정의됩니다: -
gamma인 경우, 함수는 다음 지수 함수로 정의됩니다:
애니메이션 가능: 예.
-
tableValues= "(<number> 목록)"-
type="table"인 경우, 조회 테이블을 정의하는 <number> 목록 v0,v1,...vn이며, 공백 및/또는 쉼표로 구분됩니다. 빈 목록은 항등 전달 함수를 생성합니다.속성이 지정되지 않은 경우 빈 목록이 제공된 것처럼 동작합니다.
애니메이션 가능: 예.
slope= "<number>"-
type="linear"인 경우 선형 함수의 기울기입니다.애니메이션 가능: 예.
intercept= "<number>"-
type="linear"인 경우 선형 함수의 절편입니다.애니메이션 가능: 예.
amplitude= "<number>"-
type="gamma"인 경우 감마 함수의 진폭입니다.애니메이션 가능: 예.
exponent= "<number>"-
type="gamma"인 경우 감마 함수의 지수입니다.애니메이션 가능: 예.
offset= "<number>"-
type="gamma"인 경우 감마 함수의 오프셋입니다.애니메이션 가능: 예.
< 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의 예
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 연산자는 위에서 설명했습니다.
애니메이션 가능: 예.
k1= "<number>"-
operator="arithmetic"인 경우에만 적용됩니다.애니메이션 가능: 예.
k2= "<number>"-
operator="arithmetic"인 경우에만 적용됩니다.애니메이션 가능: 예.
k3= "<number>"-
operator="arithmetic"인 경우에만 적용됩니다.애니메이션 가능: 예.
k4= "<number>"-
operator="arithmetic"인 경우에만 적용됩니다.애니메이션 가능: 예.
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의 예
9.9. 필터 프리미티브 feConvolveMatrix
| 이름: | feConvolveMatrix
|
|---|---|
| 범주: | 필터 프리미티브 |
| 콘텐츠 모델: | 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다. |
| 속성: | |
| DOM 인터페이스: | SVGFEConvolveMatrixElement |
feConvolveMatrix는 행렬 컨볼루션 필터 효과를 적용합니다. 컨볼루션은 입력 이미지의 픽셀을 인접 픽셀과 결합하여 결과 이미지를 생성합니다. 컨볼루션을 통해 흐리게 하기, 가장자리 감지, 선명하게 하기, 엠보싱 및 베벨링을 포함한 다양한 이미지 연산을 구현할 수 있습니다.
행렬 컨볼루션은 입력 이미지의 특정 픽셀 값을 인접 픽셀 값과 어떻게 결합하여 결과 픽셀 값을 생성할지를 설명하는 n×m 행렬(컨볼루션 커널)을 기반으로 합니다. 각 결과 픽셀은 해당 소스 픽셀과 그 인접 픽셀에 커널 행렬을 적용하여 결정됩니다. 지정된 픽셀의 각 색상 값에 적용되는 기본 컨볼루션 공식은 다음과 같습니다:
여기서 "orderX"와 "orderY"는 order 속성의 X 및 Y 값을 나타내고, "targetX"는 targetX 속성의 값을 나타내며, "targetY"는 targetY 속성의 값을 나타내고, "kernelMatrix"는 kernelMatrix 속성의 값을 나타내며, "divisor"는 divisor 속성의 값을 나타내고, "bias"는 bias 속성의 값을 나타냅니다.
위 공식에서 커널 행렬의 값은 많은 컴퓨터 그래픽 교재에서 설명하는 컨볼루션 이론과 일치하도록 소스 및 대상 이미지에 대해 커널 행렬을 180도 회전한 상태로 적용됩니다.
예를 들어, 5×5 픽셀 크기의 입력 이미지가 있고 그중 한 색상 채널의 색상 값이 다음과 같다고 가정합니다:
그리고 다음과 같이 3×3 컨볼루션 커널을 정의한다고 가정합니다:
이미지의 두 번째 행과 두 번째 열에 있는 색상 값(소스 픽셀 값은 120)에 주목해 보겠습니다. 가장 단순한 경우(입력 이미지의 픽셀 그리드가 커널의 픽셀 그리드와 완벽하게 정렬된 경우)를 가정하고 divisor, targetX 및 targetY 속성에 기본값을 사용하면, 결과 색상 값은 다음과 같습니다:
행렬 컨볼루션은 픽셀에서 동작하므로 본질적으로 해상도에 의존합니다. feConvolveMatrix가 해상도에 독립적인 결과를 생성하도록 하려면 kernelUnitLength 속성에 명시적인 값을 제공해야 합니다.
kernelUnitLength는 다른 속성과 함께 필터 효과 좌표계(즉, primitiveUnits 속성이 설정한 좌표계)에 암시적인 픽셀 그리드를 정의합니다. 입력 이미지는 픽셀이 kernelUnitLength와 일치하도록 일시적으로 크기가 조정됩니다. 컨볼루션은 리샘플링된 이미지에서 수행됩니다. 컨볼루션을 적용한 후 이미지는 원래 해상도로 다시 리샘플링됩니다.
컨볼루션 전에 kernelUnitLength가 정의하는 좌표계에 맞추기 위해 이미지를 리샘플링해야 하거나, 컨볼루션 후 기기 좌표계에 맞추기 위해 다시 리샘플링해야 하는 경우에는 고품질 뷰어가 쌍선형 또는 쌍삼차 보간과 같은 적절한 보간 기법을 사용하는 것이 권장됩니다. 사용할 수 있는 보간 기법의 속도에 따라 이 선택은 image-rendering 속성 설정의 영향을 받을 수 있습니다. 문서가 축소되어 kernelUnitLength가 기기 픽셀보다 상당히 작은 경우처럼 올바른 결과를 생성하는 데 리샘플링이 필요하지 않은 경우, 구현은 리샘플링을 최소화하거나 제거하는 방법을 선택할 수 있다는 점에 유의하십시오.
속성 정의:
order= "<number-optional-number>"-
kernelMatrix의 각 차원에 있는 셀 수를 나타냅니다. 제공되는 값은 0보다 큰 <integer>여야 합니다. 정수가 아닌 값은 잘립니다. 즉, 0에 가까운 방향의 가장 가까운 정수 값으로 반올림됩니다. 첫 번째 숫자 <orderX>는 행렬의 열 수를 나타냅니다. 두 번째 숫자 <orderY>는 행렬의 행 수를 나타냅니다. <orderY>가 제공되지 않으면 <orderX>를 기본값으로 사용합니다.
작은 값(예: 3)만 사용하는 것이 권장됩니다. 값이 크면 CPU 오버헤드가 매우 커질 수 있으며 일반적으로 성능에 미치는 영향을 정당화할 만큼의 결과를 생성하지 못합니다.
애니메이션 가능: 예.
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로 제한될 값을 표현할 수 있습니다.
애니메이션 가능: 예.
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입니다:
duplicate를 사용하여 두 픽셀만큼 확장한 경우:
wrap은 이미지의 반대쪽 가장자리에서 색상 값을 가져와 입력 이미지를 확장함을 나타냅니다.
wrap을 사용하여 두 픽셀만큼 확장한 경우:
none 값은 R, G, B 및 A에 대해 0의 픽셀 값으로 입력 이미지를 확장함을 나타냅니다.
애니메이션 가능: 예.
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,YpreserveAlpha의 초기 값은 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) 함수는
다음과 같이 정의됩니다:
참고: 사용자 에이전트는 방정식을 최적화하고 극단적인 색상 값에서 시간 차이가 발생하는 것을 방지하기 위해 "빠른 역제곱근"을 사용할 수 있습니다. 타이밍 공격에 대한 자세한 내용은 개인정보 보호 및 보안 고려사항 절을 참조하십시오.
결과 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) |
FACTORx=1/(3*dx) |
FACTORx=2/(3*dx) |
| 왼쪽 열: | 내부 픽셀: | 오른쪽 열: |
|
FACTORx=1/(2*dx) |
FACTORx=1/(4*dx) |
FACTORx=1/(2*dx) |
| 아래/왼쪽 모서리: | 아래쪽 행: | 아래/오른쪽 모서리: |
|
FACTORx=2/(3*dx) |
FACTORx=1/(3*dx) |
FACTORx=2/(3*dx) |
이미지 샘플에서 조명을 향하는 단위 벡터 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이면 이 연산은 소스 이미지에 영향을 주지 않습니다.
애니메이션 가능: 예.
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 >
위 내용을 단계별로 나누면 다음과 같습니다:
-
feDropShadow 필터 프리미티브 입력의 알파 채널과 feDropShadow의 stdDeviation을 가져와 다음 feGaussianBlur가 적용된 것처럼 처리합니다:
< feGaussianBlur in = " alpha-channel-of-feDropShadow-in " stdDeviation = " stdDeviation-of-feDropShadow " /> -
1단계의 결과를 feDropShadow 요소에 지정된 dx 및 dy만큼 오프셋합니다. 이는 해당 매개변수로 feOffset을 적용하는 것과 동등합니다:
< feOffset dx = " dx-of-feDropShadow " dy = " dy-of-feDropShadow " result = "offsetblur" /> -
feDropShadow에 지정된 flood-color 및 flood-opacity을 가진 feFlood 요소가 적용된 것처럼 처리합니다:
< feFlood flood-color = " flood-color-of-feDropShadow " flood-opacity = " flood-opacity-of-feDropShadow " /> -
3단계의 feFlood 결과와 2단계의 feOffset 결과를
operator="in"인 feComposite 필터 프리미티브가 적용된 것처럼 합성합니다:< feComposite in2 = "offsetblur" operator = "in" /> -
마지막으로 이전 단계의 결과를 병합하며, 다음 feMerge 가 수행된 것처럼 처리합니다:
< feMerge > < feMergeNode /> < feMergeNode in = " in-of-feDropShadow " /> </ feMerge >
참고: feDropShadow 필터 프리미티브의 정의에서는 동등한 트리로 확장할 수 있다고 명시하지만, 실제 구현이 반드시 그런 방식이어야 하는 것은 아닙니다. 사용자 에이전트는 모든 단계를 개별적으로 수행하지 않아도 되도록 처리를 최적화할 수 있을 것으로 예상됩니다.
DOM 인터페이스 SVGFEDropShadowElement 외에는 feDropShadow 필터 프리미티브의 내부에 접근할 방법이 없습니다. 즉, 필터 프리미티브가 동등한 트리로 구현된 경우 해당 트리를 DOM에 노출해서는 안 됩니다.
속성 정의:
dx= "<number>"-
드롭 섀도의 x 오프셋입니다.
그런 다음 이 속성은 내부 feOffset 요소의 dx 속성으로 전달됩니다.
애니메이션 가능: 예.
dy= "<number>"-
드롭 섀도의 y 오프셋입니다.
그런 다음 이 속성은 내부 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의 픽셀 값으로 입력 이미지를 확장함을 나타냅니다.
애니메이션 가능: 예.
이 장의 시작 부분에 있는 예에서는 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 속성과 이 명세의 개인정보 보호 및 보안 고려사항 절을 참조하십시오.
애니메이션 가능: 아니요.
-
이미지의 기본 배치입니다. 이미지가 필터 영역의 중앙에 배치되고 종횡비를 유지하면서 영역에 들어갈 수 있는 최대 크기를 갖는다는 점에 유의하십시오.
-
객체의 경계 상자에 맞게 이미지가 늘어납니다.
-
사용자 좌표를 사용하여 이미지가 배치됩니다. 먼저 이미지가 필터 영역 크기의 상자 중앙에 배치되고 종횡비를 유지하면서 해당 상자에 들어갈 수 있는 최대 크기를 갖는다는 점에 유의하십시오. 그런 다음 이 상자는 객체가 있는 뷰포트를 기준으로 지정된 x 및 y 값만큼 이동됩니다.
< 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의 예
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"-
소스 그래픽을 침식(즉, 가늘게)할지 팽창(굵게)할지를 나타내는 키워드입니다.
애니메이션 가능: 예.
radius= "<number-optional-number>"-
연산의 반지름(또는 반지름들)입니다. 두 개의 <number>가 제공되면 첫 번째 숫자는 x-radius를 나타내고 두 번째 값은 y-radius를 나타냅니다. 하나의 숫자만 제공되면 해당 값이 X와 Y 모두에 사용됩니다. 값은 filter 요소의 primitiveUnits 속성이 설정한 좌표계로 표현됩니다.
음수 또는 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의 예
9.18. 필터 프리미티브 feOffset
| 이름: | feOffset
|
|---|---|
| 범주: | 필터 프리미티브 |
| 콘텐츠 모델: | 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다. |
| 속성: | |
| DOM 인터페이스: | SVGFEOffsetElement |
이 필터 프리미티브는 지정된 벡터만큼 이미지 공간에서 입력 이미지를 현재 위치를 기준으로 오프셋합니다.
이는 드롭 섀도와 같은 효과에 중요합니다.
이 필터를 적용할 때 대상 위치가 기기 공간에서 픽셀의 일부만큼 오프셋될 수 있습니다. 이 경우 고품질 뷰어는 쌍선형 또는 쌍삼차와 같은 적절한 보간 기법을 사용해야 합니다. 이러한 보간으로 이미지가 시각적으로 더 부드럽게 움직이는 동적 뷰어에서는 특히 권장됩니다. 정적 뷰어에서는 이 문제가 덜 중요합니다. 작성자의 의도를 파악하려면 image-rendering 속성 설정에 세심한 주의를 기울여야 합니다.
속성 정의:
dx= "<number>"-
x축을 따라 입력 그래픽을 오프셋할 양입니다. 오프셋 양은 primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계로 표현됩니다.
애니메이션 가능: 예.
dy= "<number>"-
y축을 따라 입력 그래픽을 오프셋할 양입니다. 오프셋 양은 primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계로 표현됩니다.
애니메이션 가능: 예.
이 장의 시작 부분에 있는 예에서는 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>"-
의사 난수 생성기의 시작 숫자입니다.
시드 숫자를 위 알고리즘에 전달할 때는 먼저 잘라내야 합니다. 즉, 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"-
필터 프리미티브가 노이즈 함수 또는 터뷸런스 함수를 수행해야 하는지를 나타냅니다.
애니메이션 가능: 예.
< 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의 예
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축을 기준으로 한 도 단위입니다.
애니메이션 가능: 예.
elevation= "<number>"-
XY 평면에서 Z축 방향으로 향하는 광원의 방향 각도이며 도 단위입니다. 양의 Z축은 관찰자를 향한다는 점에 유의하십시오.
애니메이션 가능: 예.
다음 다이어그램은 azimuth 및 elevation이 XYZ 좌표계에서 나타내는 각도를 보여 줍니다.
azimuth 및 elevation이 나타내는 각도
11.3. 광원 fePointLight
| 이름: | fePointLight
|
|---|---|
| 범주: | 광원 |
| 콘텐츠 모델: | 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다. |
| 속성: | |
| DOM 인터페이스: | SVGFEPointLightElement |
속성 정의:
x= "<number>"-
primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 X 위치입니다.
애니메이션 가능: 예.
y= "<number>"-
primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 Y 위치입니다.
애니메이션 가능: 예.
z= "<number>"-
primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 Z 위치입니다. 초기 로컬 좌표계에서 양의 Z축이 콘텐츠를 보는 사람을 향해 나온다고 가정하며, Z축을 따른 한 단위는 X 및 Y의 한 단위와 같다고 가정합니다.
애니메이션 가능: 예.
11.4. 광원 feSpotLight
| 이름: | feSpotLight
|
|---|---|
| 범주: | 광원 |
| 콘텐츠 모델: | 임의 개수의 설명 요소, animate, script, set 요소를 임의의 순서로 사용할 수 있습니다. |
| 속성: | |
| DOM 인터페이스: | SVGFESpotLightElement |
속성 정의:
x= "<number>"-
primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 X 위치입니다.
애니메이션 가능: 예.
y= "<number>"-
primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 Y 위치입니다.
애니메이션 가능: 예.
z= "<number>"-
primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계에서 광원의 Z 위치입니다. 초기 로컬 좌표계에서 양의 Z축이 콘텐츠를 보는 사람을 향해 나온다고 가정하며, Z축을 따른 한 단위는 X 및 Y의 한 단위와 같다고 가정합니다.
애니메이션 가능: 예.
pointsAtX= "<number>"-
광원이 가리키는 지점의 X 위치이며, primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계로 표현됩니다.
애니메이션 가능: 예.
pointsAtY= "<number>"-
광원이 가리키는 지점의 Y 위치이며, primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계로 표현됩니다.
애니메이션 가능: 예.
pointsAtZ= "<number>"-
광원이 가리키는 지점의 Z 위치이며, primitiveUnits 속성이 filter 요소에 설정하여 확립한 좌표계로 표현됩니다. 초기 로컬 좌표계에서 양의 Z축이 콘텐츠를 보는 사람을 향해 나온다고 가정하며, Z축을 따른 한 단위는 X 및 Y의 한 단위와 같다고 가정합니다.
애니메이션 가능: 예.
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>에 대해 각 목록에 대응하는 항목이 있는 경우
-
- 긴 목록에서 빠진 동등한 <filter-function>을 짧은 목록의 끝에 추가합니다. 새로 추가된 <filter-function>은 보간을 위한 초기 값으로 초기화해야 합니다.
- 필터 함수의 보간 절의 규칙에 따라 각 <filter-function> 쌍을 보간합니다.
- 한 필터가 none이고 다른 필터가 <filter-value-list>이며 <url>이 없는 경우
-
- none을 다른 필터의 대응하는 <filter-value-list>으로 대체합니다. 새 <filter-function>은 보간을 위한 초기 값으로 초기화해야 합니다.
- 필터 함수의 보간 절의 규칙에 따라 각 <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’을 반환합니다.
< 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 >
14.3. 누적
두 필터 값 Va와 Vb가 주어지면 필터 값 Vb를 반환합니다.
15. 개인정보 보호 및 보안 고려사항
15.1. 오염된 필터 프리미티브
모든 필터 연산의 실행 시간은 필터링된 콘텐츠 또는 개인정보에 민감한 정보를 잠재적으로 포함할 수 있는 다른 소스에서 파생된 픽셀 값과 독립적이어야 합니다.
다음 필터 프리미티브는 필터링된 객체 자체 또는 CSS 스타일 지정과 같은 다른 소스에서 개인정보에 민감한 정보를 잠재적으로 포함하는 픽셀 값에 접근할 수 있습니다. 이러한 프리미티브는 "오염됨"으로 표시해야 합니다.
-
feFlood는 flood-color 속성의 지정값이 currentColor로 계산되는 경우,
-
feDropShadow는 flood-color 속성의 지정값이 currentColor로 계산되는 경우,
-
feDiffuseLighting은 lighting-color 속성의 지정값이 currentColor로 계산되는 경우
-
feSpecularLighting은 lighting-color 속성의 지정값이 currentColor로 계산되는 경우,
-
feImage는 <url> 참조가 요소를 가리키거나 가져오기 모드 No-CORS로 리소스를 가져오는 경우 및
-
필터 프리미티브: 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, 읽기 전용y, 유형: SVGAnimatedLength, 읽기 전용width, 유형: SVGAnimatedLength, 읽기 전용height, 유형: SVGAnimatedLength, 읽기 전용
인터페이스 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, 읽기 전용in2, 유형: SVGAnimatedString, 읽기 전용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 ;
- 속성:
-
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, 읽기 전용dx, 유형: SVGAnimatedNumber, 읽기 전용dy, 유형: SVGAnimatedNumber, 읽기 전용
인터페이스 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, 읽기 전용
인터페이스 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일 작업 초안 이후 다음과 같은 중요한 변경 사항이 적용되었습니다.
-
편집상 변경 사항.
-
모든 요소의 콘텐츠 모델에 설명 요소를 추가했습니다.
-
crossorigin은 애니메이션할 수 없음을 명확히 했습니다.
-
<hue-rotate()>는 단위 없는 0을 허용합니다.
-
작성자가 <color> 및 <length> 값의 순서를 <drop-shadow()>에서 변경할 수 있도록 했습니다. 문법을 변경하여 <color> 가 먼저 오도록 했습니다. 보간을 위한 초기 값과 생략된 값의 기본값을 구분했습니다.
-
CSS 속성의 애니메이션 유형을 정의했습니다.
-
feColorMatrix 및 feConvolveMatrix가 충족되지 않은 전제 조건에서 통과 필터로 동작하도록 했습니다.
-
feTurbulence 알고리즘이 균일성을 준수하도록 했습니다.
-
모든 그래픽 요소에 적용되는 속성을 use 요소에도 적용했습니다.
-
<saturate()>의 필터 프리미티브 표현을 수정했습니다.
-
SVG DOM SVGFEBlendElement 열거형을 새로운 블렌드 모드로 확장했습니다.
2013년 11월 26일 작업 초안 이후 다음과 같은 중요한 변경 사항이 적용되었습니다.
-
사용자 정의 필터를 제거했습니다.
-
모든 곳의 콘텐츠 모델에서 script 요소를 허용했습니다.
-
feBlend에 대해 CSS Blending 명세의 모든 블렌드 모드를 지원합니다.
-
feComposite에 대해 CSS Blending 명세의 중복되지 않는 모든 합성 모드를 지원합니다.
-
이중 합성을 방지하기 위해 feBlend에 no-composite 속성을 추가했습니다.
-
단축형 구문을 수정했습니다.
-
단축형 필터 영역의 정의를 추가했습니다.
2012년 10월 25일 작업 초안 이후 다음과 같은 중요한 변경 사항이 적용되었습니다.
-
brightness 단축 필터를 수정했습니다.
-
사용자 정의 필터 함수에 새로운 구문을 도입했습니다.
-
사용자 정의 필터를 위한 at-function 규칙을 추가했습니다.
-
사용자 정의 필터 함수를 향후 필터 기능을 위한 확장으로 사용할 수 있도록 했습니다.
-
셰이더에서 불필요한 속성과 uniform을 제거했습니다.
-
셰이더 좌표 공간의 원점을 왼쪽 아래로 다시 정의했습니다.
-
이제 불필요해진 filter-margin 속성을 제거했습니다.
더 자세하고 장기적인 변경 사항은 변경 로그를 참조하십시오.
감사의 말
편집자들은 세심한 검토, 의견 및 수정에 도움을 주신 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께 감사드립니다.