2013-01-18 9 views
6

यह एक कठिन सवाल हो सकता है।सीएसएस या PHP? रंग जो 80% मूल है लेकिन "पारदर्शिता" के बिना?

मैं एक php समारोह है कि एक तर्क $alpha साथ rgba() में एक रंग मान देता है।

function colorWheel($alpha) { 

    "rgba(170, 135, 178, ".$alpha.")" 
    … 
} 

तो जब बुला ...

.title { color: <?php echo colorWheel(.8); ?>; } 

... मैं rgba(170, 135, 178, .8);


मिल समस्या मैं इस के साथ है कि रंग "पारदर्शी" है और शो "ओवरले" है।

enter image description here

हालांकि क्या मैं सच में करना चाहते रंग मूल्य का सिर्फ 80% है! किसी भी पारदर्शी ओवरले के बिना।

प्रश्न अब यह हल करने का तरीका है?

कोई रचनात्मक विचार यह कैसे करें? मुझे rgba() का उपयोग करने की आवश्यकता नहीं है, यह मेरे दिमाग में आने वाली सबसे आसान चीज है। क्या सीएसएस तरीका अल्फा मूल्य वाले ओवरलेइंग आकार को मिश्रित नहीं करने का तरीका है?

या कोई 80%rgb(170, 135, 178) के संस्करण की गणना करने के लिए php समाधान है? यह महत्वपूर्ण है कि यह गणना फ़ंक्शन के साथ गतिशील रूप से काम करे क्योंकि फ़ंक्शन में अधिक रंग हैं - यह "How to return a color-value based a date and random?" पर एक अनुवर्ती प्रश्न है!

अग्रिम धन्यवाद।

+2

लेकिन वह कैसे पारदर्शी रंग काम है। मुझे लगता है कि आप प्रत्येक ऑब्जेक्ट पर व्यक्तिगत आरजीबीए रंगों के बजाय इन ऑब्जेक्ट्स के लिए संपूर्ण कंटेनर पर एक समग्र 'अस्पष्टता: .8;' चाहते हैं। – BoltClock

+0

बल्कि अल्फा मूल्य का उपयोग कर एक प्रतिनिधित्व, "है कि रंग का 80%" पाने के लिए तुम क्यों एचएसएल में बदलने और चमक या इसके संतृप्ति को कम नहीं करते की तुलना में, तो आरजीबी के लिए वापस बदलने और उन मूल्यों को अल्फा मूल्य में संशोधन के बजाय का उपयोग करें । आरजीबीए अल्फा के साथ काम करता है .. –

+0

मुझे पता है कि पारदर्शिता कैसे काम करती है :) यही कारण है कि मैं पूछ रहा हूं। और दुर्भाग्य से उन रंगों के साथ आइटम एक ही "कंटेनर" नहीं हैं, लेकिन अलग-अलग वस्तुएं जो एक-दूसरे को ओवरले कर रही हैं। यही कारण है कि मैंने एक PHP जवाब के लिए भी कहा। मैंने सोचा कि शायद मैं कुछ सीएसएस सेटिंग चूक गया। – matt

उत्तर

0

यह करना चाहिए कि:

function colorWheel($alpha) { 
    $r = round(170 * $alpha); 
    $g = round(135 * $alpha); 
    $b = round(178 * $alpha); 
    "rgba($r, $g, $b, 1)"; 
    … 
} 
अच्छी तरह से

, कि रंग गहरा बना देता है, तो आप इसे हल्का आप एक मूल्य के> 1 के लिए अल्फा डाल दिया, और यह भी जांच करने के लिए है, तो आर, जी या करना चाहते हैं बी 255 से अधिक हो जाता है और इसे 255 पर सेट करता है यदि यह

+1

वास्तव में आपको अल्फा चैनल का उपयोग नहीं करने पर आरजीबीए (जिसे कम समर्थन मिलता है) की आवश्यकता नहीं है। – Christoph

+0

सही, मैं अभी भी है कि बदलने के लिए आलसी था: डी – x4rf41

0

अस्पष्टता के साथ रंग अनुकरण करने के लिए आपको पृष्ठभूमि रंग की भी आवश्यकता है। आइए कहें, R,G,B पृष्ठभूमि रंग घटक हैं, और r,g,b क्या आप रंग घटक हैं। आप विशिष्ट पृष्ठभूमि पर अस्पष्टता रंग अनुकरण करने के लिए चाहते हैं, आप इसी एक ही नहर के मूल्यों लेते हैं और उन्हें विशिष्ट वजन के साथ जोड़ना चाहिए:

r = r*alpha + R*(1-alpha) 
g = g*alpha + G*(1-alpha) 
b = b*alpha + B*(1-alpha) 

सरल उदाहरण लेते हैं। आप पृष्ठभूमि rgb(R,G,B) = rgb(255,255,255) (सफेद) पर rgb(r,g,b) = rgb(255,0,0) (लाल) पर alpha = 0.8 प्राप्त करना चाहते हैं।

r = 255*0.8 + 255*0.2 = 255 
g = 0*0.8 + 255*0.2 = 51 
b = 0*0.8 + 255*0.2 = 51 
+1

आप यकीन है कि यह सही है कर रहे हैं? मेरे लिए मैं हमेशा एक गहरा संस्करण मिलता है। और एक हल्का नहीं। – matt

+0

हाँ, आप सही हैं। मेरी गलती के लिए खेद है, अब मैं इसे बदल रहा हूँ। – Kasyx

1

प्रश्न क्या "रंग के 80%" की अपनी परिभाषा वास्तव में है: इसका मतलब है कि आप योग 80% अपने रंग + 20% बीजी की जरूरत है।

सीएसएस में इस समय 2 रंग रिक्त स्थान उपलब्ध हैं: आरजीबी और एचएसएल (जो वास्तव में सुंदर well समर्थित है)।

आप निम्न आरजीबी गणना कर सकता है:

function colorWheel($alpha) { 

    'rgba('.$r*$alpha.','.$g*$alpha.','.$b*$alpha.', 1)'; 
    … 
} 

या आप एचएसएल ले सकता है और सिर्फ 20% से चमक (और या संतृप्ति) चैनल को कम। रंगों को गहरा/उज्ज्वल बनाने जैसी चीजें करते समय एचएसएल रंगस्थान अधिक सहज होता है।

function colorWheel($alpha) { 

    "hsla($h,$s,".$l*$alpha.",1)"; 
    // or 
    // ("hsla($h, "+$s*$alpha+", $l, 1)";) 
    … 
} 

ये सभी उपज (थोड़ा) अलग-अलग परिणाम।

colorspaces कुछ भी जटिल नहीं सूत्रों के माध्यम से एक दूसरे में परिवर्तित किया जा सकता है। शायद आप एक यादृच्छिक colorpicker (उदा। this one या that one) और फिर निर्णय पर एक नज़र, गणना सूट आप सर्वश्रेष्ठ में से जो रास्ता लेना चाहिए।

+0

क्या पीएचपी वास्तव में एक स्ट्रिंग के भीतर '$ आर * $ अल्फा' इंटरपोलेट करता है? मैंने हमेशा के लिए PHP नहीं लिखा है। – BoltClock

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