2012-12-19 6 views
9

Aus einem Grafik-Design-Hintergrund Ich weiß, wie man schummelt, um einen Effekt von additive color zu erstellen. Die gleiche grundlegende Lösung wird in another post on here vorgeschlagen.Verwenden von SVG für additive Farbmischung (additive Blending)

Der Beitrag oben bezieht sich auf transparente .png Dateien, aber das Konzept ist das gleiche. Der grundlegende Effekt, den ich erstellen möchte, ist wie der pictured here.

Ich würde es gerne in SVG tun, so dass es skalieren kann und so, wenn ich über ein bestimmtes Thema spreche (sagen wir einfach, das Thema ist 'grün') kann ich diesen Teil der Grafik und der vergrößern überlappende Bereiche würden immer noch korrekt angezeigt.

Diese Stellen scheinen ziemlich nahe zu kommen:

Aber keine der oben genannten Deal mit SVG so lassen Sie mich es einen Wirbel geben.

+0

ich gerade angemeldet und sah die unten Antwort, Skimming es es aus wie genau sieht, was ich dachte, aber ... ich eine Grafik in Adobe Illustrator erstellt, aber realisiert regelmäßige Transparenz mir additive Farb geben würde, so simuliert I mit vollständig undurchsichtigen Farben; Ich glaube nicht, dass das helfen wird ... würde eine 3-lagige (3 überlappende Ringe) Grafik mit regelmäßiger Transparenz an einer Geige arbeiten? –

Antwort

2

Diese Version ersetzt eine frühere Version, die nicht wirklich Browser-übergreifend war. Ich erkannte, dass ich für die verschiedenen Kreise keine separaten Formen brauchte, ich konnte die ursprüngliche Form innerhalb des Filters klonen, neu positionieren und neu einfärben.

<svg x="0px" y="0px" width="600px" height="600px" viewbox="0 0 600 600"> 

<defs> 
<filter id="B4" x="-150%" width="400%" y="-150%" height="400%"> 
    <feOffset in="SourceGraphic" result="pre-red" dx="-70" dy="-120"/> 
    <feColorMatrix in="pre-red" type="matrix" result="red" values="0 0 0 0 1 
                0 0 0 0 0 
                0 0 0 0 0 
                0 0 0 1 0"/> 

    <feOffset in="SourceGraphic" result="pre-blue" dx="70" dy="-120"/> 
    <feColorMatrix in="pre-blue" type="matrix" result="blue" values="0 0 0 0 0 
                0 0 0 0 0 
                0 0 0 0 1 
                0 0 0 1 0"/> 
    <feBlend mode="screen" in="red" in2="blue" result="main"/> 
    <feBlend mode="screen" in="main" in2="SourceGraphic"/> 
</filter> 
</defs> 

    <circle filter="url(#B4)" cx="200" cy="250" r="100" fill="#00FF00" /> 

</svg> 
+0

Nicht funktioniert auf Mozilla und Webkit ist definitiv ein Deal Breaker. Könntest du mich in die Richtung von mehr Info führen (oder etwas mehr erklären), die sich auf "in Filter" -Effekte bezieht (das erste Beispiel)? Wenn ich es anschaue, habe ich das Gefühl, dass ich es grundsätzlich verstehe, aber ich sehe nichts, was Gelb oder Cyan (ich nehme an, das Finale ist weiß) oder einen schwarzen Strich (weil es keine Breite gibt) dem Strich zugeordnet?). Vielen Dank. –

+0

Ich sah die 'enable-background'-Referenzen und die Notizen, ich gehe zurück und lese sie besser, danke. –

8

Jetzt können Sie dies mit SVG filters tun. Da Ihr Interesse im Mischen von Farben liegt, könnten Sie die folgenden Filterprimitive interessieren: feBlend, feComposite, feColorMatrix und feComponentTransfer.

Wenn Sie den einfachen Weg (Inkscape) lernen wollen, siehe this blogpost. Ich kann auch empfehlen, die Inkscape book zu lesen und insbesondere, wie man custom filters macht. Here's one page zeigt feBlend mit ähnlichen Ergebnissen wie in Ihrem Basiseffektbeispiel.

Update:here's the relevant svg file vom inkscape Buch, es ist wie das Bild unten in Browsern aussehen sollte, die SVG-Filter unterstützen (und den BackgroundImage Filtereingang, beachten Sie, dass Gecko nicht BackgroundImage und enable-background nicht unterstützt). feBlend variations

+0

Ich hatte noch nie von diesen Filtern als Teil des Standards gehört! Auf den ersten Blick dachte ich, "fe" könnte eine Art Verkäuferpräfix sein, Junge, ich habe mich geirrt. Vielen Dank. –

+1

Das Problem mit diesen Beispielen ist, dass sie sich auf "enable-background" verlassen - was momentan weder mit Webkit noch mit Mozilla funktioniert (weiß nichts über Oper). Wenn Sie dies mit Filtern tun, denke ich, dass Sie Bilder einfügen müssen (oder Farbkreise mit Beleuchtungseffekten erstellen). –

+0

Die Beispiele verwenden vielleicht 'enable-background, aber es ist möglich, dies zu vermeiden. Ja, Opera hat schon lange Unterstützung für 'enable-background'. IIRC IE10 unterstützt auch 'enable-background '. –