2014-09-14 6 views
11

मैं एक फ़ोटोशॉप फ़ाइल में उसी तरह से एक छवि का इलाज करने की कोशिश कर रहा हूं - छवि को ग्रेस्केल में विलुप्त करना, और उसके बाद एक बहु रंग मिश्रण मोड के साथ रंग ओवरले लागू करना। इस उद्देश्य से, मैं के साथ ...सीएसएस ग्रेस्केल फ़िल्टर और पृष्ठभूमि-मिश्रण-मोड एक ही समय में?

.someclass 
{ 
    /* grayscale */ 
    -webkit-filter: grayscale(1); 
    filter: gray; 
    filter: grayscale(1); 
    filter: url(desaturate.svg#greyscale); 

    /* multiply */ 
    background-color: rgba(190, 50, 50, 0.65); 
    background-blend-mode: multiply; 
} 

इस के साथ समस्या यह एक सीएसएस पृष्ठभूमि छवि स्टाइल रहा हूँ कि ग्रेस्केल फिल्टर मिश्रण मोड के लिए लाल रंग desaturating समाप्त होता है। दूसरे शब्दों में, गुणा पहले और फिर ग्रेस्केल होता है। मैं इसे कैसे स्विच करूं ताकि ग्रेस्केल पहले लागू हो और फिर मिश्रण मोड दूसरे पर लागू हो?

मैंने कोड और स्क्रीनशॉट (फ़ोटोशॉप में बने) के लिए एक बेवकूफ (http://jsfiddle.net/g54LcoL1/1/) बनाया है, जो कि मुझे परिणामस्वरूप दिखने की अपेक्षा की जाएगी। नीचे सबसे अधिक छवि, div.grayscale.multiply, रंग लाल होना चाहिए।

enter image description here

+0

यह AFAIK सीएसएस के साथ क्या करना असंभव है। ऐसा इसलिए है क्योंकि सीएसएस मैट्रिस में अपने सभी कार्यों को करता है, इसलिए सभी गुणों के लिए सेट ऑर्डर सेट किया गया है। विकल्प छवियों को हाथ से पहले ग्रेस्केल के रूप में सहेजने के लिए हैं या संभवतया कैनवास जैसे कुछ का उपयोग करते हैं और फिर –

+0

सीएसएस के 'उपयोगकर्ता' के रूप में, ऐसा लगता है कि ऐसा होना चाहिए जिस तरह से यह होना चाहिए यह कोड में घोषित किया गया है। मुझे यकीन है कि यह एक कारण है कि यह तरीका क्यों है, लेकिन 'पृष्ठभूमि-मिश्रण-मोड' अधिक व्यापक रूप से समर्थित हो जाता है, इसलिए लोग मिश्रण/फ़िल्टर के क्रम में अधिक नियंत्रण मांगेंगे। मुझे लगता है कि 'कैनवास' जाने का रास्ता है। मैं इसे एक शॉट दूंगा। – Jeff

+0

सीएसएस बॉट-टू-अप भाषा है शायद यह आपकी समस्या थी जिसे मैं नहीं जानता था। वैसे भी Pleeeease Playground कोशिश करें यह फिल्टर परिवर्तित करता है। – MindlessRanger

उत्तर

9

आप फिल्टर के साथ यह नहीं कर सकते, लेकिन आप इसे सब कुछ

के लिए मिश्रण मोड के साथ रह कर सकते हैं मिश्रण में ग्रेस्केल बराबर, चमक है स्रोत के रूप में छवि और एक ठोस सफेद पृष्ठभूमि के रूप में साथ

तो नीचे से पृष्ठभूमि छवियों, शीर्ष पर, कर रहे हैं:

  1. सफेद (पृष्ठभूमि रंग के रूप में)
  2. अपनी छवि
  3. सोली चमक घ लाल

और मिश्रण मोड (है कि अब के लिए एक ढाल के रूप में निर्दिष्ट किया जाना चाहिए) कर रहे हैं और

.test { 
 
    width: 400px; 
 
    height: 400px; 
 
    background-image: linear-gradient(0deg, red, red), url("http://cuteoverload.files.wordpress.com/kitteh_puddle-1312.jpg"); 
 
    background-color: white; 
 
    background-blend-mode: multiply, luminosity; 
 
    background-size: cover; 
 
}
<div class="test"></div>

+0

इस तरह का एक अद्भुत समाधान। अगर सफारी ने चमकदार पृष्ठभूमि मिश्रण मोड का समर्थन किया तो मैं अभी स्वर्ग में रहूंगा। –

+3

मुझे वास्तव में 'मिश्रण-मिश्रण-मोड' संपत्ति का उपयोग करके सफारी में यह काम मिल गया और 'फ़िल्टर: ग्रेस्केल (100%) 'फोटो पर। लुभाने! https://css-tricks.com/almanac/properties/m/mix-blend-mode/ –

2

मिश्रण मोड पृष्ठभूमि परतों को लागू किया जाता है, और फिर फिल्टर पूरे तत्व को लागू किया जाता है, ताकि वे एक तरह से दो अलग बातें साथ काम कर रहे: समय है कि पृष्ठभूमि गणना की जाती है (द्वारा लाल-आश उपस्थिति सहित), संपूर्ण तत्व फ़िल्टर के साथ ग्रेस्केल में परिवर्तित हो जाता है।

छवि संदर्भों के लिए एक प्रस्तावित फ़िल्टर() फ़ंक्शन है, इसलिए सिद्धांत में, आप किसी भी छवि को लोड होने पर फ़िल्टर लागू करने में सक्षम होना चाहिए। मुझे लगता है कि इस विचार है:

.someclass { 
    background-image: filter(cat.jpg, grayscale(100%)); 
    background-color: red; 
    background-blend-mode: multiply; 
} 

दुःख की बात है मुझे नहीं लगता कि यह कहीं भी अभी तक कार्यान्वित किया जाता है, यह सिर्फ फिल्टर कल्पना की मसौदा संस्करण में है।

सामान्यतः, इन प्रकार के "पोस्ट-प्रोसेसिंग" सीएसएस प्रभावों के संदर्भ में संचालन के क्रम को उसी क्रम में परिभाषित किया जाता है जैसे एसवीजी: फ़िल्टरिंग पहले किया जाता है, फिर क्लिपिंग, फिर मास्किंग, फिर मिश्रण।

(Blending & Compositing Spec. देखें) तो, ऐसा करने के मामले में आप कुछ भी नहीं कर सकते हैं, मुझे डर है।

0

गुणा योएल स्वीकार किए जाते हैं जवाब के तहत अपने टिप्पणी में उल्लेख किया , mix-blend-mode का उपयोग करके ऐसा करना संभव है।

मेरे उदाहरण में मैं पृष्ठभूमि छवि की बजाय वास्तविक छवि का उपयोग करने जा रहा हूं। अगर इसे पृष्ठभूमि छवि होना है तो आप अभी भी उसी तकनीक का उपयोग कर सकते हैं। बस छवि को एक खाली div के साथ प्रतिस्थापित करें जिसमें पृष्ठभूमि छवि स्टाइल है।

इसके अलावा मैं "गुणा" के बजाय "स्क्रीन" मिश्रण मोड का उपयोग करने जा रहा हूं क्योंकि यह रंग हटाने को और अधिक स्पष्ट रूप से प्रदर्शित करता है।

.image-wrapper { 
 
    background: red; 
 
    display: inline-block; 
 
} 
 

 
.image-wrapper img { 
 
    mix-blend-mode: screen; 
 
    filter: grayscale(100%); 
 
}
<div class="image-wrapper"> 
 
    <img src="https://static.decalgirl.com/assets/designs/large/clrkit.jpg" alt="Colorful cats"/> 
 
</div>

रंग हटाने के बिना::

.image-wrapper { 
 
    background: red; 
 
    display: inline-block; 
 
} 
 

 
.image-wrapper img { 
 
    mix-blend-mode: screen; 
 
}
<div class="image-wrapper"> 
 
    <img src="https://static.decalgirl.com/assets/designs/large/clrkit.jpg" alt="Colorful cats"/> 
 
</div>

रंग हटाने के साथ

अधिक जानकारी यहां पाया जा सकता है:

https://css-tricks.com/almanac/properties/m/mix-blend-mode/

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