2012-12-26 11 views
5

एसवीजी feComponentTransfer रैखिक फ़ंक्शन काम नहीं कर रहा है जैसा कि मैं उम्मीद करता हूं। -1 की एक ढलान और ग्रेस्केल छवि पर लागू 1 की रोकथाम छवि को उलटा करनी चाहिए: काला -> सफेद, सफेद-> काला, 25% ग्रे -> 75% ग्रे, 50% ग्रे अपरिवर्तित, और इसी तरह।svg feComponent ट्रांस्फर रैखिक फ़ंक्शन

मेरी उम्मीद http://www.w3.org/TR/filter-effects/#feComponentTransferElement पर आधारित है, जो "सी" = ढलान * सी + अवरोध "कहती है, जहां सी प्रारंभिक घटक है (उदाहरण के लिए, 'feFuncR'), सी 'रीमेप्ड घटक है; दोनों बंद अंतराल में [0,1]। "।

निम्न फ़िल्टर

<filter id="linear"> 
    <feComponentTransfer> 
    <feFuncR type="linear" slope="-1" intercept="1" /> 
    <feFuncG type="linear" slope="-1" intercept="1" /> 
    <feFuncB type="linear" slope="-1" intercept="1" /> 
    </feComponentTransfer> 
</filter> 

सफेद करने के लिए काले और काला करने के लिए सफेद नक्शे, लेकिन मध्यवर्ती मूल्यों बंद करें, उदा हैं 50% ग्रे मैप्स 90% ग्रे और 75% ग्रे मैप्स 98% ग्रे तक। एक साधारण उदाहरण के लिए http://jsfiddle.net/Rpjs2/ देखें। मुझे फ़ायरफ़ॉक्स और सफारी में एक ही परिणाम मिलते हैं।

यह एसवीजी फिल्टर में मेरा पहला प्रयास है, इसलिए मुझे संदेह है कि मैं चश्मे को गलत समझ रहा हूं। क्या कोई मुझे सही कर सकता है?

+0

वेबकिट स्रोत कोड से [इस उदाहरण] (http://src.chromium.org/chrome/branches/WebKit/195/LayoutTests/svg/custom/feComponentTransfer-Linear.svg) देखें। एक समान फ़िल्टर का उपयोग ढाल को "उलटा" करता है (फ़िल्टर परिभाषाओं को देखें, क्योंकि उनका वर्णन करने वाला पाठ गलत है) लेकिन पूरी तरह से नहीं। ऐसा लगता है कि बाईं ओर थोड़ा सा स्थानांतरित हो रहा है। – seliopou

+0

यह वास्तव में बाईं ओर स्थानांतरित हो गया है, वास्तव में -1 * सी + 1 लागू करके क्या होगा। मेरा पहला विचार यह है कि यह एक बग है, जिसमें यह डब्ल्यू 3 स्पेक से मेल नहीं खाता है, लेकिन यह अजीब बात है कि सफारी और फ़ायरफ़ॉक्स ने इसे उसी (स्पष्ट रूप से गलत) तरीके से लागू किया है। मैंने मोज़िला और वेबकिट को बग रिपोर्ट दायर की है और यदि वे इसे एक बग मानते हैं तो वापस रिपोर्ट करेंगे। – BobW

+0

आपने मुझे webplatform दस्तावेज़ों में feComponentTransfer करने के लिए प्रेरित किया। मुझे बताएं कि आप क्या सोचते हैं: http://docs.webplatform.org/wiki/svg/elements/feComponentTransfer –

उत्तर

5

फ़िल्टर आमतौर पर रैखिक आरजीबी रंग स्थान में काम करते हैं। यह उपयोग के मामले sRGB चाहता है, ताकि आप केवल फिल्टर तत्व

+0

धन्यवाद, मैंने अभी कोशिश की है। यह फ़ायरफ़ॉक्स और क्रोम में काम करता है, लेकिन सफारी इसे सेटिंग को अनदेखा करता है। (परेशान है कि सफारी के रिलीज बिल्ड क्रोम की तुलना में वेबकिट के पुराने संस्करणों का उपयोग करता है। सफारी में बहुत सी एसवीजी कीड़े हैं जो वेबकिट में महीने पहले तय की गई थीं और क्रोम में दिखाई नहीं दे रही थीं।) – BobW

0

पर color-interpolation-filters = "sRGB" निर्धारित करने की आवश्यकता आप कर सकते हैं ज्यादातर यह आपकी मूल के बाद एक और घटक हस्तांतरण का उपयोग कर के लिए सही।

<feComponentTransfer> 
    <feFuncR type="gamma" offset="0" amplitude="1" exponent="4.84"/> 
    <feFuncG type="gamma" offset="0" amplitude="1" exponent="4.84"/> 
    <feFuncB type="gamma" offset="0" amplitude="1" exponent="4.84"/> 
    </feComponentTransfer> 

यह बाहर रंग श्रेणी अधिक उचित रूप से 2.2^2 = 4.84 की एक "डबल" गामा सुधार का उपयोग कर फैल जाएगा।

संबंधित मुद्दे