This filter primitive offsets the input image relative to its current position in the image space by the specified vector.
This is important for effects like drop shadows.
When applying this filter, the destination location may be offset by a fraction of a pixel in device space. In this case a high quality viewer should make use of appropriate interpolation techniques, for example bilinear or bicubic. This is especially recommended for dynamic viewers where this interpolation provides visually smoother movement of images. For static viewers this is less of a concern. Close attention should be made to the 'image-rendering' property setting to determine the authors intent.
<!ENTITY % SVG.feOffset.extra.content "" > <!ENTITY % SVG.feOffset.element "INCLUDE" > <![%SVG.feOffset.element;[ <!ENTITY % SVG.feOffset.content "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feOffset.extra.content; )*" > <!ELEMENT %SVG.feOffset.qname; %SVG.feOffset.content; > <!-- end of SVG.feOffset.element -->]]> <!ENTITY % SVG.feOffset.attlist "INCLUDE" > <![%SVG.feOffset.attlist;[ <!ATTLIST %SVG.feOffset.qname; %SVG.Core.attrib; %SVG.FilterColor.attrib; %SVG.FilterPrimitiveWithIn.attrib; dx %Number.datatype; #IMPLIED dy %Number.datatype; #IMPLIED > |
Attribute definitions:
The example at the start of this chapter makes use of the 'feOffset' filter primitive to offset the drop shadow from the original source graphic.
This filter primitive lights a source graphic using the alpha channel as a bump map. The resulting image is an RGBA image based on the light color. The lighting calculation follows the standard specular component of the Phong lighting model. The resulting image depends on the light color, light position and surface geometry of the input bump map. The result of the lighting calculation is added. The filter primitive assumes that the viewer is at infinity in the z direction (i.e., the unit vector in the eye direction is (0,0,1) everywhere).
This filter primitive produces an image which contains the specular reflection part of the lighting calculation. Such a map is intended to be combined with a texture using the add term of the arithmetic 'feComposite' method. Multiple light sources can be simulated by adding several of these light maps before applying it to the texture image.
The resulting RGBA image is computed as follows:
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)
where
See 'feDiffuseLighting' for definition of N and (Lr, Lg, Lb).
The definition of H reflects our assumption of the constant eye vector E = (0,0,1):
H = (L + E) / Norm(L+E)
where L is the light unit vector.
Unlike the 'feDiffuseLighting', the 'feSpecularLighting' filter produces a non-opaque image. This is due to the fact that the specular result (Sr,Sg,Sb,Sa) is meant to be added to the textured image. The alpha channel of the result is the max of the color components, so that where the specular light is zero, no additional coverage is added to the image and a fully white highlight will add opacity.
The 'feDiffuseLighting' and 'feSpecularLighting' filters will often be applied together. An implementation may detect this and calculate both maps in one pass, instead of two.
<!ENTITY % SVG.feSpecularLighting.extra.content "" > <!ENTITY % SVG.feSpecularLighting.element "INCLUDE" > <![%SVG.feSpecularLighting.element;[ <!ENTITY % SVG.feSpecularLighting.content "(( %SVG.feDistantLight.qname; | %SVG.fePointLight.qname; | %SVG.feSpotLight.qname; ), ( %SVG.animate.qname; | %SVG.set.qname; | %SVG.animateColor.qname; %SVG.feSpecularLi\ ghting.extra.content; )*)" > <!ELEMENT %SVG.feSpecularLighting.qname; %SVG.\ feSpecularLighting.content; > <!-- end of SVG.feSpecularLighting.element -->]]> <!ENTITY % SVG.feSpecularLighting.attlist "INCLUDE" > <![%SVG.feSpecularLighting.attlist;[ <!ATTLIST %SVG.feSpecularLighting.qname; %SVG.Core.attrib; %SVG.Style.attrib; %SVG.Color.attrib; %SVG.FilterColor.attrib; %SVG.Color.attrib; %SVG.FilterColor.attrib; %SVG.FilterPrimitiveWithIn.attrib; lighting-color %SVGColor.datatype; #IMPLIED surfaceScale %Number.datatype; #IMPLIED specularConstant %Number.datatype; #IMPLIED specularExponent %Number.datatype; #IMPLIED kernelUnitLength %NumberOptionalNumber.datatype; #IMPLIED > |
Attribute definitions:
dx and dy, respectively, in the surface normal calculation formulas. By specifying value(s) for 'kernelUnitLength', the kernel becomes defined in a scalable, abstract coordinate system. If 'kernelUnitLength' is not specified, the dx and dy values should represent very small deltas relative to a given (x,y) position, which might be implemented in some cases as one pixel in the intermediate image offscreen bitmap, which is a pixel-based coordinate system, and thus potentially not scalable. For some level of consistency across display media and user agents, it is necessary that a value be provided for at least one of 'filterRes' and 'kernelUnitLength'. Discussion of intermediate images are in the Introduction and in the description of attribute 'filterRes'.
The light source is defined by one of the child elements 'feDistantLight', 'fePointLight' or 'feDistantLight'. The light color is specified by property 'lighting-color'.
The example at the start of this chapter makes use of the 'feSpecularLighting' filter primitive to achieve a highly reflective, 3D glowing effect.
This filter primitive fills a target rectangle with a repeated, tiled pattern of an input image. The target rectangle is as large as the filter primitive subregion established by the 'x', 'y', 'width' and 'height' attributes on the 'feTile' element.
Typically, the input image has been defined with its own filter primitive subregion in order to define a reference tile. 'feTile' replicates the reference tile in both X and Y to completely fill the target rectangle. The top/left corner of each given tile is at location (x+i*width,y+j*height), where (x,y) represents the top/left of the input image's filter primitive subregion, width and height represent the width and height of the input image's filter primitive subregion, and i and j can be any integer value. In most cases, the input image will have a smaller filter primitive subregion than the 'feTile' in order to achieve a repeated pattern effect.
Implementers must take appropriate measures in constructing the tiled image to avoid artifacts between tiles, particularly in situations where the user to device transform includes shear and/or rotation. Unless care is taken, interpolation can lead to edge pixels in the tile having opacity values lower or higher than expected due to the interaction of painting adjacent tiles which each have partial overlap with particular pixels.
<!ENTITY % SVG.feTile.extra.content "" > <!ENTITY % SVG.feTile.element "INCLUDE" > <![%SVG.feTile.element;[ <!ENTITY % SVG.feTile.content "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feTile.extra.content; )*" > <!ELEMENT %SVG.feTile.qname; %SVG.feTile.content; > <!-- end of SVG.feTile.element -->]]> <!ENTITY % SVG.feTile.attlist "INCLUDE" > <![%SVG.feTile.attlist;[ <!ATTLIST %SVG.feTile.qname; %SVG.Core.attrib; %SVG.FilterColor.attrib; %SVG.FilterPrimitiveWithIn.attrib; > |
This filter primitive creates an image using the Perlin turbulence function. It allows the synthesis of artificial textures like clouds or marble. For a detailed description the of the Perlin turbulence function, see "Texturing and Modeling", Ebert et al, AP Professional, 1994. The resulting image will fill the entire filter primitive subregion for this filter primitive.
It is possible to create bandwidth-limited noise by synthesizing only one octave.
The C code below shows the exact algorithm used for this filter effect.
For fractalSum, you get a turbFunctionResult that is aimed at a range of -1 to 1 (the actual result might exceed this range in some cases). To convert to a color value, use the formula colorValue = ((turbFunctionResult * 255) + 255) / 2, then clamp to the range 0 to 255.
For turbulence, you get a turbFunctionResult that is aimed at a range of 0 to 1 (the actual result might exceed this range in some cases). To convert to a color value, use the formula colorValue = (turbFunctionResult * 255), then clamp to the range 0 to 255.
The following order is used for applying the pseudo random numbers. An initial seed value is computed based on attribute 'seed'. Then the implementation computes the lattice points for R, then continues getting additional pseudo random numbers relative to the last generated pseudo random number and computes the lattice points for G, and so on for B and A.
The generated color and alpha values are in the color space determined by the value of property 'color-interpolation-filters':
/* Produces results in the range [1, 2**31 - 2].
Algorithm is: r = (a * r) mod m
where a = 16807 and m = 2**31 - 1 = 2147483647
See [Park & Miller], CACM vol. 31 no. 10 p. 1195, Oct. 1988
To test: the algorithm should produce the result 1043618065
as the 10,000th generated number if the original seed is 1.
*/
#define RAND_m 2147483647 /* 2**31 - 1 */
#define RAND_a 16807 /* 7**5; primitive root of 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; // How much to subtract to wrap for stitching.
int nHeight;
int nWrapX; // Minimum value to wrap.
int nWrapY;
};
static void init(long lSeed)
{
double s;
int i, j, k;
lSeed = setup_seed(lSeed);
for(k = 0; k < 4; k++)
{
for(i = 0; i < BSize; i++)
{
uLatticeSelector[i] = i;
for (j = 0; j < 2; j++)
fGradient[k][i][j] = (double)(((lSeed = random(lSeed)) % (BSize + BSize)) - BSize) / BSize;
s = double(sqrt(fGradient[k][i][0] * fGradient[k][i][0] + fGradient[k][i][1] * fGradient[k][i][1]));
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 stitching, adjust lattice points accordingly.
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; // Not stitching when NULL.
// Adjust the base frequencies if necessary for stitching.
if(bDoStitching)
{
// When stitching tiled turbulence, the frequencies must be adjusted
// so that the tile borders will be continuous.
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;
}
// Set up initial stitch values.
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)
{
// Update stitch values. Subtracting PerlinN before the multiplication and
// adding it afterward simplifies to subtracting it once.
stitch.nWidth *= 2;
stitch.nWrapX = 2 * stitch.nWrapX - PerlinN;
stitch.nHeight *= 2;
stitch.nWrapY = 2 * stitch.nWrapY - PerlinN;
}
}
return fSum;
}
<!ENTITY % SVG.feTurbulence.extra.content "" > <!ENTITY % SVG.feTurbulence.element "INCLUDE" > <![%SVG.feTurbulence.element;[ <!ENTITY % SVG.feTurbulence.content "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feTurbulence.extra.content; )*" > <!ELEMENT %SVG.feTurbulence.qname; %SVG.feTurbulence\ .content; > <!-- end of SVG.feTurbulence.element -->]]> <!ENTITY % SVG.feTurbulence.attlist "INCLUDE" > <![%SVG.feTurbulence.attlist;[ <!ATTLIST %SVG.feTurbulence.qname; %SVG.Core.attrib; %SVG.FilterColor.attrib; %SVG.FilterPrimitive.attrib; baseFrequency %NumberOptionalNumber.datatype; #IMPLIED numOctaves %Integer.datatype; #IMPLIED seed %Number.datatype; #IMPLIED stitchTiles ( stitch | noStitch ) 'noStitch' type ( fractalNoise | turbulence ) 'turbulence' > |
Attribute definitions:
lowFreq=floor(width*frequency)/width and hiFreq=ceil(width*frequency)/width. If frequency/lowFreq < hiFreq/frequency then use lowFreq, else use hiFreq. While generating turbulence values, generate lattice vectors as normal for Perlin Noise, except for those lattice points that lie on the right or bottom edges of the active area (the size of the resulting tile). In those cases, copy the lattice vector from the opposite edge of the active area.Example feTurbulence shows the effects of various parameter settings for feTurbulence.
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="450px" height="325px" viewBox="0 0 450 325"
version="1.1"
xmlns="http://www.w3.org/2000/svg" version="1.1"> <title>Example feTurbulence - Examples of feTurbulence operations</title> <desc>Six rectangular areas showing the effects of various parameter settings for 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>
![]() |
View this example as SVG (SVG-enabled browsers only)
15.25 Filter Module| Elements | Attributes | Content Model |
|---|---|---|
| filter | Core.attrib, XLink.attrib, External.attrib, Style.attrib, Presentation.attrib, filterUnits, primitiveUnits, x, y, width, height, filterRes | (Description.class | FilterPrimitive.class | Animation.class)* |
| feBlend | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, in2, mode | (Animation.class)* |
| feColorMatrix | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, type, values | (Animation.class)* |
| feComponentTransfer | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib | (feFuncR?, feFuncG?, feFuncB?, feFuncA?) |
| feComposite | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, in2, operator, k1, k2, k3, k4 | (Animation.class)* |
| feConvolveMatrix | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, order, kernelMatrix, divisor, bias, targetX, targetY, edgeMode, kernelUnitLength, preserveAlpha | (Animation.class)* |
| feDiffuseLighting | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, Style.attrib, Paint.attrib, lighting-color, surfaceScale, diffuseConstant, kernelUnitLength | ((feDistantLight | fePointLight | feSpotLight), (Animation.class)*) |
| feDisplacementMap | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, in2, scale, xChannelSelector, yChannelSelector | (Animation.class)* |
| feFlood | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, Style.attrib, Paint.attrib, flood-color, flood-opacity | (Animation.class)* |
| feGaussianBlur | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, stdDeviation | (Animation.class)* |
| feImage | Core.attrib, XLink.attrib, FilterColor.attrib, FilterPrimitive.attrib, External.attrib, Style.attrib, Presentation.attrib | (Animation.class)* |
| feMerge | Core.attrib, in | (Animation.class)* |
| feMergeNode | Core.attrib, FilterColor.attrib, FilterPrimitive.attrib | (feMergeNode)* |
| feMorphology | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, operator, radius | (Animation.class)* |
| feOffset | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, dx, dy | (Animation.class)* |
| feSpecularLighting | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, Style.attrib, Paint.attrib, lighting-color, surfaceScale, specularConstant, specularExponent, kernelUnitLength | ((feDistantLight | fePointLight | feSpotLight), (Animation.class)*) |
| feTile | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib | (Animation.class)* |
| feTurbulence | Core.attrib, FilterColor.attrib, FilterPrimitive.attrib, baseFrequency, numOctaves, seed, stitchTiles, type | (Animation.class)* |
| feDistantLight | Core.attrib, azimuth, elevation | (Animation.class)* |
| fePointLight | Core.attrib, x, y, z | (Animation.class)* |
| feSpotLight | Core.attrib, x, y, z, pointsAtX, pointsAtY, pointsAtZ, specularExponent, limitingConeAngle | (Animation.class)* |
| feFuncR | Core.attrib, type, tableValues, slope, intercept, amplitude, exponent, offset | (Animation.class)* |
| feFuncG | Core.attrib, type, tableValues, slope, intercept, amplitude, exponent, offset | (Animation.class)* |
| feFuncB | Core.attrib, type, tableValues, slope, intercept, amplitude, exponent, offset | (Animation.class)* |
| feFuncA | Core.attrib, type, tableValues, slope, intercept, amplitude, exponent, offset | (Animation.class)* |
The Filter Module defines the Filter.class and FilterPrimitive.class content sets.
| Content Set Name | Elements in Content Set |
|---|---|
| Filter.class | filter |
| FilterPrimitive.class | feBlend, feFlood, feColorMatrix, feComponentTransfer, feComposite, feConvolveMatrix, feDiffuseLighting, feDisplacementMap, feGaussianBlur, feImage, feMerge, feMorphology, feOffset, feSpecularLighting, feTile, feTurbulence |
The Filter Module defines the Filter.attrib, FilterColor.attrib, FilterPrimitive.attrib and FilterPrimitiveWithIn.attrib attribute sets.
| Collection Name | Attributes in Collection |
|---|---|
| Filter.attrib | filter |
| FilterColor.attrib | color-interpolation-filters |
| FilterPrimitive.attrib | x, y, width, height, result |
| FilterPrimitiveWithIn.attrib | FilterPrimitive.attrib, in |
| Elements | Attributes | Content Model |
|---|---|---|
| filter | Core.attrib, XLink.attrib, External.attrib, Style.attrib, Presentation.attrib, filterUnits, primitiveUnits, x, y, width, height, filterRes | (Description.class | FilterPrimitive.class | Animation.class)* |
| feBlend | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, in2, mode | (Animation.class)* |
| feColorMatrix | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, type, values | (Animation.class)* |
| feComponentTransfer | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib | (feFuncR?, feFuncG?, feFuncB?, feFuncA?) |
| feComposite | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, in2, operator, k1, k2, k3, k4 | (Animation.class)* |
| feFlood | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, Style.attrib, Paint.attrib, flood-color, flood-opacity | (Animation.class)* |
| feGaussianBlur | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, stdDeviation | (Animation.class)* |
| feImage | Core.attrib, XLinkEmbed.attrib, FilterColor.attrib, FilterPrimitive.attrib, External.attrib, Style.attrib, Presentation.attrib | (Animation.class)* |
| feMerge | Core.attrib, in | (Animation.class)* |
| feMergeNode | Core.attrib, FilterColor.attrib, FilterPrimitive.attrib | (feMergeNode)* |
| feOffset | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib, dx, dy | (Animation.class)* |
| feTile | Core.attrib, FilterColor.attrib, FilterPrimitiveWithIn.attrib | (Animation.class)* |
| feFuncR | Core.attrib, type, tableValues, slope, intercept, amplitude, exponent, offset | (Animation.class)* |
| feFuncG | Core.attrib, type, tableValues, slope, intercept, amplitude, exponent, offset | (Animation.class)* |
| feFuncB | Core.attrib, type, tableValues, slope, intercept, amplitude, exponent, offset | (Animation.class)* |
| feFuncA | Core.attrib, type, tableValues, slope, intercept, amplitude, exponent, offset | (Animation.class)* |
The Basic Filter Module defines the Filter.class and FilterPrimitive.class content sets.
| Content Set Name | Elements in Content Set |
|---|---|
| Filter.class | filter |
| FilterPrimitive.class | feBlend, feFlood, feColorMatrix, feComponentTransfer, feComposite, feGaussianBlur, feImage, feMerge, feOffset, feTile |
The Basic Filter Module defines the Filter.attrib, FilterColor.attrib, FilterPrimitive.attrib and FilterPrimitiveWithIn.attrib attribute sets.
| Collection Name | Attributes in Collection |
|---|---|
| Filter.attrib | filter |
| FilterColor.attrib | color-interpolation-filters |
| FilterPrimitive.attrib | x, y, width, height, result |
| FilterPrimitiveWithIn.attrib | FilterPrimitive.attrib, in |