|
1
|
|
|
<?php |
|
2
|
|
|
namespace nstdio\svg\filter; |
|
3
|
|
|
|
|
4
|
|
|
/** |
|
5
|
|
|
* Class ConvolveMatrix |
|
6
|
|
|
* feConvolveMatrix applies a matrix convolution filter effect. A convolution combines pixels in the input image with |
|
7
|
|
|
* neighboring pixels to produce a resulting image. A wide variety of imaging operations can be achieved through |
|
8
|
|
|
* convolutions, including blurring, edge detection, sharpening, embossing and beveling. |
|
9
|
|
|
* |
|
10
|
|
|
* @link https://www.w3.org/TR/SVG11/filters.html#feConvolveMatrixElement |
|
11
|
|
|
* @property string order = "<number-optional-number>" Indicates the number of cells in each dimension for |
|
12
|
|
|
* ‘kernelMatrix’. The values provided must be <integer>s greater than zero. The first number, <orderX>, |
|
13
|
|
|
* indicates the number of columns in the matrix. The second number, <orderY>, indicates the number of rows |
|
14
|
|
|
* in the matrix. If |
|
15
|
|
|
* <orderY> is not provided, it defaults to <orderX>. A typical value is order="3". It is recommended that |
|
16
|
|
|
* only small values (e.g., 3) be used; higher values may result in very high CPU overhead and usually do not |
|
17
|
|
|
* produce results that justify the impact on performance. If the attribute is not specified, the effect is |
|
18
|
|
|
* as if a value of 3 were specified. |
|
19
|
|
|
* @property string kernelMatrix = "<list of numbers>" The list of <number>s that make up the kernel matrix for |
|
20
|
|
|
* the |
|
21
|
|
|
* convolution. Values are separated by space characters and/or a comma. The number of entries in the list |
|
22
|
|
|
* must equal <orderX> times <orderY>. |
|
23
|
|
|
* @property float divisor = "<number>" After applying the ‘kernelMatrix’ to the input image to yield a |
|
24
|
|
|
* number, that number is divided by ‘divisor’ to yield the final destination color value. A divisor that is |
|
25
|
|
|
* the sum of all the matrix values tends to have an evening effect on the overall color intensity of the |
|
26
|
|
|
* result. It is an error to specify a divisor of zero. The default value is the sum of all values in |
|
27
|
|
|
* kernelMatrix, with the exception that if the sum is zero, then the divisor is set to 1. |
|
28
|
|
|
* @property float bias = "<number>" After applying the ‘kernelMatrix’ to the input image to yield a |
|
29
|
|
|
* number |
|
30
|
|
|
* and applying the ‘divisor’, the ‘bias’ attribute is added to each component. One application of ‘bias’ is |
|
31
|
|
|
* when it is desirable to have .5 gray value be the zero response of the filter. The bias property shifts |
|
32
|
|
|
* the range of the filter. This allows representation of values that would otherwise be clamped to 0 or 1. |
|
33
|
|
|
* If ‘bias’ is not specified, then the effect is as if a value of 0 were specified. |
|
34
|
|
|
* @property int targetX = "<integer>" Determines the positioning in X of the convolution matrix relative |
|
35
|
|
|
* to a given target pixel in the input image. The leftmost column of the matrix is column number zero. The |
|
36
|
|
|
* value must be such that: 0 <= targetX < orderX. By default, the convolution matrix is centered in X over |
|
37
|
|
|
* each pixel of the input image (i.e., targetX = floor ( orderX / 2 )). |
|
38
|
|
|
* @property int targetY = "<integer>" Determines the positioning in Y of the convolution matrix relative |
|
39
|
|
|
* to a given target pixel in the input image. The topmost row of the matrix is row number zero. The value |
|
40
|
|
|
* must be such that: 0 <= targetY < orderY. By default, the convolution matrix is centered in Y over each |
|
41
|
|
|
* pixel of the input image (i.e., targetY = floor ( orderY / 2 )). |
|
42
|
|
|
* @property string edgeMode = "duplicate | wrap | none" Determines how to extend the input image as necessary |
|
43
|
|
|
* with color values so that the matrix operations can be applied when the kernel is positioned at or near |
|
44
|
|
|
* the edge of the input image. |
|
45
|
|
|
* @property float kernelUnitLength = "<number-optional-number>" The first number is the <dx> value. The second |
|
46
|
|
|
* number |
|
47
|
|
|
* is the <dy> value. If the <dy> value is not specified, it defaults to the same value as <dx>. Indicates |
|
48
|
|
|
* the intended distance in current filter units (i.e., units as determined by the value of attribute |
|
49
|
|
|
* ‘primitiveUnits’) between successive columns and rows, respectively, in the ‘kernelMatrix’. By specifying |
|
50
|
|
|
* value(s) for ‘kernelUnitLength’, the kernel becomes defined in a scalable, abstract coordinate system. If |
|
51
|
|
|
* ‘kernelUnitLength’ is not specified, the default value is one pixel in the offscreen bitmap, which is a |
|
52
|
|
|
* pixel-based coordinate system, and thus potentially not scalable. For some level of consistency across |
|
53
|
|
|
* display media and user agents, it is necessary that a value be provided for at least one of ‘filterRes’ |
|
54
|
|
|
* and ‘kernelUnitLength’. In some implementations, the most consistent results and the fastest performance |
|
55
|
|
|
* will be achieved if the pixel grid of the temporary offscreen images aligns with the pixel grid of the |
|
56
|
|
|
* kernel. |
|
57
|
|
|
* @property boolean preserveAlpha = "false | true" A value of false indicates that the convolution will apply to |
|
58
|
|
|
* all channels, including the alpha channel. In this case the ALPHAX,Y of the convolution formula for a |
|
59
|
|
|
* given pixel is: A value of true indicates that the convolution will only apply to the color channels. In |
|
60
|
|
|
* this case, the filter will temporarily unpremultiply the color component values, apply the kernel, and |
|
61
|
|
|
* then re-premultiply at the end. In this case the ALPHAX,Y of the convolution formula for a given pixel is: |
|
62
|
|
|
* ALPHAX,Y = SOURCEX,Y If ‘preserveAlpha’ is not specified, then the effect is as if a value of false were |
|
63
|
|
|
* specified. |
|
64
|
|
|
* @package nstdio\svg\filter |
|
65
|
|
|
* @author Edgar Asatryan <[email protected]> |
|
66
|
|
|
*/ |
|
67
|
|
|
class ConvolveMatrix extends BaseFilter |
|
68
|
|
|
{ |
|
69
|
|
|
/** |
|
70
|
|
|
* @inheritdoc |
|
71
|
|
|
*/ |
|
72
|
1 |
|
public function getName() |
|
73
|
|
|
{ |
|
74
|
1 |
|
return "feConvolveMatrix"; |
|
75
|
|
|
} |
|
76
|
|
|
|
|
77
|
|
|
} |