2011-11-21 34 views
3

我遇到了一些編碼SVG XML的真正的大問題,並讓它在Illustrator中被複制,正如我期待的那樣。現在的主要問題是feColorMatrix效應。我明白效果以及矩陣如何改變像素,但是我遇到的問題是,當我將0.5指定爲任何顏色通道行的最終輸出結果時,Illustrator不會將0.5解釋爲RGB 127,換句話說,50%顏色值。它更像是0.215等於127十進制的RGB。下面是一些代碼:Illustrator SVG效果編碼問題

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<svg 
    xmlns="http://www.w3.org/2000/svg" 
    version="1.2" 
    viewBox="0 0 576 432" 
    width="576" 
    height="432" 
    baseProfile="tiny" 
    id="NicoleLovesSVG"> 
    <g id="Canvas"> 
     <rect 
      width="576" 
      height="432" 
      x="0" 
      y="0" 
      transform="scale(1,1)" 
      id="Canvas-Rect1" 
      style="fill:#9d8654;fill-rule:evenodd;" /> 
    </g> 
    <defs> 
     <filter id="ShadowFilter-Text1" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse" width="200%" height="200%" x="-50%" y="-50%"> 
      <feColorMatrix type="matrix" in="SourceAlpha" 
       values="0 0 0 0 .5 
        0 0 0 0 0 
        0 0 0 0 0 
        0 0 0 1 0"/> 
      <feOffset dx="24.395183950936" dy="24.395183950936" result="shadow"/> 
      <feBlend in="SourceGraphic" in2="shadow" mode="normal"/> 
     </filter> 
    </defs> 
    <g 
     id="Text1" 
     transform="translate(1.1272727272727,297.27272727273) rotate(0) scale(3.5238813920454546,2.642911044034091)" 
     style="fill:#003300;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:15px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;" 
     filter="url(#ShadowFilter-Text1)"> 
      <g 
       id="Text1-Line1" 
       transform="translate(0,0)"> 
       <path 
        transform="translate(0,0)" 
        vector-effect="non-scaling-stroke" 
        id="Text1-Line1-Glyph1" 
        d="M 0,0 M 46.4,-98.24 L 46.4,-15.68 C 46.4,-8.96 47.466666666667,-3.7333333333333 49.6,-0 L 30.4,-0 C 32.533333333333,-3.7333333333333 33.6,-8.96 33.6,-15.68 L 33.6,-98.24 L 31.36,-98.24 C 21.653333333333,-98.24 12.106666666667,-96.373333333333 2.72,-92.64 L 8.32,-106.72 L 79.68,-106.72 L 74.56,-92.64 C 68.693333333333,-96.48 59.306666666667,-98.346666666667 46.4,-98.24 z" /> 
      </g> 
    </g> 
</svg> 

正如你所看到的,第一過濾檢索SourceAlpha這是全黑的。然後,顏色矩陣採用的是和執行此矩陣的第一行:

(斧紅色)+(BX綠色)+(CX藍色)+(DX阿爾法)+ E =最終紅色輸出

堵塞在數字:

(0 X 0)+(0 X 0)+(0 X 0)+(0 X 0)+ 0.5 = 0.5

應爲50%的紅色!或127 RGB!我做了數學,在Illy它更像是0.215 = 127 = 50%??????

+0

隨機猜測:可能與預乘alpha有關? – Phrogz

+0

我不這麼認爲。您可以使用「SourceGraphic」更改「SourceAlpha」並獲得相同的結果。 – shrimpwagon

回答

5

這是由於濾鏡使用的顏色空間造成的,默認情況下,它是linearRGB

您可以通過直接在<過濾器>元素或< feColorMatrix>元素上指定color-interpolation-filters="sRGB"來獲得所需的行爲。見color-interpolation-filters

+0

Erik,如果我是一個小雞,我會希望你有我的寶寶!非常感謝。就是這樣。我真的在這個問題上工作了4天,沒有開玩笑。 – shrimpwagon