<feColorMatrix>
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
<feColorMatrix> 㯠SVG ã®ãã£ã«ã¿ã¼è¦ç´ ã§ã夿è¡åã«åºã¥ãã¦è²ãå¤åããã¾ãããã¹ã¦ã®ãã¯ã»ã«ã®ã«ã©ã¼å¤ [R,G,B,A] 㯠5 x 5 ã®è¡åã§è¡åä¹ç®ãããæ°ããè² [R',G',B',A'] ãçæãã¾ãã
ã¡ã¢:
åºæ¬çãªè¨å· ' ã¯ãæ°å¦ã§å¤æãããçµæã表ãããã«ä½¿ç¨ããã¾ãã
| R' | | r1 r2 r3 r4 r5 | | R | | G' | | g1 g2 g3 g4 g5 | | G | | B' | = | b1 b2 b3 b4 b5 | * | B | | A' | | a1 a2 a3 a4 a5 | | A | | 1 | | 0 0 0 0 1 | | 1 |
ç°¡ç¥åããã¨ãæ°ãããã¯ã»ã«ã®åè²ã®ãã£ã³ãã«ãã©ã®ããã«è¨ç®ããããã以ä¸ã«ç¤ºãã¾ããæå¾ã®è¡ã¯å¤ãä¸å®ãªã®ã§ç¡è¦ããã¾ãã
R' = r1*R + r2*G + r3*B + r4*A + r5 G' = g1*R + g2*G + g3*B + g4*A + g5 B' = b1*R + b2*G + b3*B + b4*A + b5 A' = a1*R + a2*G + a3*B + a4*A + a5
æ°ãããã¯ã»ã«ã®èµ¤ã®éãããªãã¡ R' ã«æ³¨ç®ããã¨ä¸è¨ã®ããã«ãªãã¾ãã
ããã¯ä»¥ä¸ã®å¤ã®åè¨ã§ãã
- æ§ãã¯ã»ã«ã®èµ¤æå
Rã®r1å - æ§ãã¯ã»ã«ã®ç·æå
Gã®r2å - æ§ãã¯ã»ã«ã®éæå
Bã®r3å - æ§ãã¯ã»ã«ã®ã¢ã«ãã¡æå
Aã®r4å - å ãã¦å ç®å¤ã®
r5
ãããã®æå®ãããæ°éã¯ä»»æã®å®æ°ãåããã¨ãã§ãã¾ãããæçµç㪠R' 㯠0 ï½ 1 ã®éã«ä¸¸ãããã¾ãã G', B', A' ã«ã¤ãã¦ãåæ§ã§ãã
R' = r1 * R + r2 * G + r3 * B + r4 * A + r5 New red = [ r1 * old red ] + [ r2 * old green ] + [ r3 * old Blue ] + [ r4 * old Alpha ] + [ shift of r5 ]
ä¾ãã°ãçã£é»ãªç»åããã赤ããããå ´åã¯ã r5 ãæ£ã®å®æ° x ã¨ããã°ãæ°ããç»åã®åç»ç´ ã®èµ¤ãã x ã ãå¢å ããã¾ãã
æçè¡å ã¯æ¬¡ã®ããã«ãªãã¾ãã
R G B A W R' | 1 0 0 0 0 | G' | 0 1 0 0 0 | B' | 0 0 1 0 0 | A' | 0 0 0 1 0 |
ãã®ä¸ã§ã¯ãæ°ããå¤ã¯ãã¹ã¦å¤ãå¤ã®ã¡ããã© 1 åã®å¤ã§ããããã以å¤ã¯ä½ãå ãããã¦ãã¾ãããããããè¡åã®æä½ãå§ãããã¨ããå§ããã¾ãã
ä»ã®ãã£ã«ã¿ã¼ããªããã£ãã¨åæ§ã«ãæ¢å®ã§ã¯è²æåã linearRGB è²ç©ºéã§å¦çãã¾ãã color-interpolation-filters ã使ç¨ããã¨ã代ããã« sRGB ã使ç¨ãããã¨ãã§ãã¾ãã
使ç¨ã³ã³ããã¹ã
屿§
DOM ã¤ã³ã¿ã¼ãã§ã¤ã¹
ãã®è¦ç´ 㯠SVGFEColorMatrixElement ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ãã¦ãã¾ãã
ä¾
>SVG
<svg
width="100%"
height="100%"
viewBox="0 0 150 500"
preserveAspectRatio="xMidYMid meet"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- ref -->
<defs>
<g id="circles">
<circle cx="30" cy="30" r="20" fill="blue" fill-opacity="0.5" />
<circle cx="20" cy="50" r="20" fill="green" fill-opacity="0.5" />
<circle cx="40" cy="50" r="20" fill="red" fill-opacity="0.5" />
</g>
</defs>
<use href="#circles" />
<text x="70" y="50">åç
§</text>
<!-- æçè¡å -->
<filter id="colorMeTheSame">
<feColorMatrix
in="SourceGraphic"
type="matrix"
values="1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0" />
</filter>
<use
href="#circles"
transform="translate(0 70)"
filter="url(#colorMeTheSame)" />
<text x="70" y="120">æçè¡å</text>
<!-- RGB ãçµã¿åããã¦ç·æå㸠-->
<filter id="colorMeGreen">
<feColorMatrix
in="SourceGraphic"
type="matrix"
values="0 0 0 0 0
1 1 1 1 0
0 0 0 0 0
0 0 0 1 0" />
</filter>
<use
href="#circles"
transform="translate(0 140)"
filter="url(#colorMeGreen)" />
<text x="70" y="190">RGB ãç·æåã¸</text>
<!-- 彩度 -->
<filter id="colorMeSaturate">
<feColorMatrix in="SourceGraphic" type="saturate" values="0.2" />
</filter>
<use
href="#circles"
transform="translate(0 210)"
filter="url(#colorMeSaturate)" />
<text x="70" y="260">彩度</text>
<!-- è²ç¸å転 -->
<filter id="colorMeHueRotate">
<feColorMatrix in="SourceGraphic" type="hueRotate" values="180" />
</filter>
<use
href="#circles"
transform="translate(0 280)"
filter="url(#colorMeHueRotate)" />
<text x="70" y="330">è²ç¸å転</text>
<!-- æåº¦ãã¢ã«ãã¡å¤ã¸ -->
<filter id="colorMeLTA">
<feColorMatrix in="SourceGraphic" type="luminanceToAlpha" />
</filter>
<use href="#circles" transform="translate(0 350)" filter="url(#colorMeLTA)" />
<text x="70" y="400">æåº¦ãã¢ã«ãã¡å¤ã¸</text>
</svg>
çµæ
仿§æ¸
| 仿§æ¸ |
|---|
| Filter Effects Module Level 1 > # feColorMatrixElement > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
- SVG ãã£ã«ã¿ã¼ããªããã£ã屿§
<filter><animate><set><feBlend><feComponentTransfer><feComposite><feConvolveMatrix><feDiffuseLighting><feDisplacementMap><feFlood><feGaussianBlur><feImage><feMerge><feMorphology><feOffset><feSpecularLighting><feTile><feTurbulence>- SVG ãã¥ã¼ããªã¢ã«: ãã£ã«ã¿ã¼å¹æ