2010-08-12 14 views
7

Google मानचित्र एपीआई v3 विभिन्न सुविधाओं के रंग को सेट करने सहित मानचित्र पर "शैलियों" को लागू करने की अनुमति देता है। हालांकि, रंग प्रारूप इसे इस्तेमाल करता है एचएसएल है (या क्या यह की तरह लगता है):एचजीएल कनवर्टर के लिए आरजीबी मूल्य

  • रंग (एक आरजीबी हेक्स स्ट्रिंग)
  • हल्कापन
  • संतृप्ति (-100 और 100 के बीच चल बिन्दु मूल्य) (-100 और 100) के बीच एक चल बिन्दु मूल्य

(docs)

से मैं ऑनलाइन एचएसएल कन्वर्टर्स करने के लिए आरजीबी खोज करने में कामयाब है, लेकिन मैं अनिश्चित परिवर्तित मान निर्दिष्ट करने के लिए कैसे कर रहा हूँ एक तरह से कि Google नक्शे स्वीकार करेंगे। उदाहरण के लिए, एक कनवर्टर द्वारा दिया गया एक सामान्य एचएसएल मान होगा: 209° 72% 49%

वह एचएसएल मूल्य कैसे Google मानचित्र api से निर्दिष्ट पैरामीटर को मैप करता है? यानी एक आरजीबी हेक्स स्ट्रिंग के लिए एक ह्यू डिग्री मान नक्शा कैसे करता है और -100 और 100 के बीच फ़्लोटिंग पॉइंट मान पर प्रतिशत मानचित्र कैसे करता है?

मुझे अभी भी अनिश्चितता है कि रूपांतरण कैसे करें। मैं एक आरजीबी मूल्य को देखते हुए जल्दी से यह क्या गूगल मैप्स की उम्मीद है ताकि रंग एक समान होगा से जुड़ा हुआ पृष्ठ से कन्वर्ट करने के लिए ...

उत्तर

7

चूंकि तर्क तर्क आरजीबी की अपेक्षा करता है, इसलिए आप मूल रंग को रंग के रूप में उपयोग कर सकते हैं।

rgb2hsl.py:

#!/usr/bin/env python 

def rgb2hsl(r, g, b): 
    #Hue: the RGB string 
    H = (r<<16) + (g<<8) + b 
    H = "0x%06X" % H 

    #convert to [0 - 1] range 
    r = float(r)/0xFF 
    g = float(g)/0xFF 
    b = float(b)/0xFF 

    #http://en.wikipedia.org/wiki/HSL_and_HSV#Lightness 
    M = max(r,g,b) 
    m = min(r,g,b) 
    C = M - m 

    #Lightness 
    L = (M + m)/2 

    #Saturation (HSL) 
    if L == 0: 
     S = 0 
    elif L <= .5: 
     S = C/(2*L) 
    else: 
     S = C/(2 - 2*L) 

    #gmaps wants values from -100 to 100 
    S = int(round(S * 200 - 100)) 
    L = int(round(L * 200 - 100)) 

    return (H, S, L) 


def main(r, g, b): 
    r = int(r, base=16) 
    g = int(g, base=16) 
    b = int(b, base=16) 
    print rgb2hsl(r,g,b) 

if __name__ == '__main__': 
    from sys import argv 
    main(*argv[1:]) 

उदाहरण:

$ ./rgb2hsl.py F0 FF FF 
('0xF0FFFF', 100, 94) 

परिणाम:

नीचे शरीर (इस मामले में # 2800E2) एक rgb पृष्ठभूमि रंग करने के लिए सेट दिखाने वाले स्क्रीनशॉट है , और स्टाइल रोड-ज्यामिति वाला एक Google मानचित्र, ऊपर वर्णित मानों का उपयोग करके ('0x2800E2', 100, -11)।

यह स्पष्ट है कि Google आपके स्टाइल का उपयोग रंग के चारों ओर रंगों के चार अलग-अलग रंग बनाने के लिए करता है, जिसमें आउटलाइन इनपुट के सबसे नज़दीक होते हैं। मेरा मानना ​​है कि यह उतना करीब है जितना इसे मिलता है।

alt text


के साथ प्रयोग से: http://gmaps-samples-v3.googlecode.com/svn/trunk/styledmaps/wizard/index.html

पानी के लिए, GMaps .5 के एक गामा घटा देती है। इच्छित रंग प्राप्त करने के लिए, ऊपर की गणना का उपयोग करें, और उसमें जोड़ें .5 गामा वापस।

की तरह:

{ 
    featureType: "water", 
    elementType: "geometry", 
    stylers: [ 
    { hue: "#2800e2" }, 
    { saturation: 100 }, 
    { lightness: -11 }, 
    { gamma: 0.5 }, 
    ] 
} 
+0

यह काफी काम नहीं किया। आपकी स्क्रिप्ट में टिप्पणी देखकर ऐसा लगता है कि आप मानते हैं कि gmaps 0-100 से एक मान चाहता है। असल में, gmaps -100 से 100 के मान चाहता है। शायद आप इसे तदनुसार संशोधित कर सकते हैं? आपकी सहायता के लिए धन्यवाद!! – aeq

+0

hmm..i ने आपके समाधान को -100 से 100 के बीच जोड़कर स्केलिंग करने का प्रयास किया (ठीक है एल और एस वापस करने से पहले): एस = 2 * एस -100 और एल = 2 * एल -100, लेकिन सही रंग अभी भी दिखाया नहीं गया ... शायद फॉर्मूला गलत हो गया .. – aeq

+0

@aeq: मैंने इसे संशोधित किया है और आपके विवरण के अनुसार उदाहरण अपडेट किया है। – bukzor

0

की जरूरत है:

नोट: रंग एक HTML हेक्स लेता है रंग मान, यह केवल मूल रंग (रंगीन पहिया के चारों ओर का अभिविन्यास) निर्धारित करने के लिए इस मान का उपयोग करता है, न कि इसकी संतृप्ति या हल्कापन, जो अलग-अलग प्रतिशत परिवर्तनों के रूप में इंगित किया जाता है। उदाहरण के लिए, शुद्ध हरे रंग के रंग को ह्यू प्रॉपर्टी के भीतर "# 00ff00" या "# 000100" के रूप में परिभाषित किया जा सकता है और दोनों रंग समान होंगे। (दोनों मान एचएसएल रंग मॉडल में शुद्ध हरे रंग की ओर इशारा करते हैं।) आरजीबी रंग मूल्य जो लाल, हरे और नीले रंग के बराबर भागों होते हैं - जैसे "# 000000" (काला) और "# एफएफएफएफएफएफ" (सफेद) और सभी शुद्ध रंग भूरे रंग के - किसी भी रंग का संकेत न दें, क्योंकि इनमें से कोई भी मूल्य एचएसएल समन्वय अंतरिक्ष में अभिविन्यास को इंगित नहीं करता है। काला, सफ़ेद या भूरे रंग को इंगित करने के लिए, आपको सभी संतृप्ति को हटा देना होगा (मान को -100 पर सेट करें) और इसके बजाय हल्का समायोजन करें।

कम से कम जैसा कि मैंने इसे पढ़ा है, इसका मतलब है कि आपको रंगीन चक्र के आधार पर अपना कोण बदलने की आवश्यकता है। उदाहरण के लिए, मान लें कि 0 डिग्री शुद्ध लाल है, 120 डिग्री शुद्ध नीला है और 240 डिग्री शुद्ध हरा है। फिर आप अपना कोण लेंगे, यह पता लगाने के लिए कि कौन से दो प्राइमरी आते हैं, और यह निर्धारित करने के लिए कि प्रत्येक प्राथमिक का उपयोग करने के लिए कितना अंतर होता है। सिद्धांत रूप में आपको शायद एक वर्गबद्ध इंटरपोलेशन का उपयोग करना चाहिए - लेकिन संभावना है कि आप रैखिक के साथ उचित रूप से अच्छी तरह से प्राप्त कर सकते हैं।

का उपयोग करना है कि, (उदाहरण के लिए) 90 डिग्री 90/120 = 3/4 नीले लाल से रास्ते से चौथाई है, इसलिए रंग के लिए अपने हेक्स संख्या 0x00010003 होगा - या किसी अन्य नंबर था कि हरा सेट 0, और लाल और नीले रंग के बीच 1: 3 अनुपात।

+0

यदि कोई कोण की गणना करने के लिए एचएसएल कनवर्टर के लिए आरजीबी का उपयोग कर रहा है, तो पहले से ही आरजीबी मान है ... आरजीबी मूल्य को केवल हेक्साइफाइड किया जा सकता है और एच मान के रूप में भेजा जा सकता है, और फिर कनवर्टर का उपयोग करें एस, एल या मैं गलतफहमी हूँ। –

+0

मेरे पास एक संबंधित डिजाइन सवाल है। यदि एचएसएल रंग चाहता है कि सिस्टम एच ​​के रूप में एक आरजीबी मूल्य स्वीकार करता है, तो पृथ्वी पर क्यों इसे एस और एल को जाने की आवश्यकता है ...ऐसा लगता है जैसे यह एच की गणना करने के लिए रंगस्थान रूपांतरण करने जा रहा है, यह शायद निर्दिष्ट रंग का उपयोग कर सकता है या इस तरह से एचएसएल का उपयोग आरजीबी स्पेस में कुछ खो रहा है? –

+0

@ एंड्रयू: सीधे आरजीबी मूल्य का उपयोग करने के लिए, शायद - लेकिन शायद नहीं। विशेष रूप से, मुझे पूरा यकीन है कि यह वास्तव में कम से कम एक घटक को 0 पर सेट करने की अपेक्षा करता है, जो आम तौर पर कच्चे आरजीबी रंग के मामले में नहीं होगा। –

4

हम एक ऐसे उपकरण जो वास्तव में आप चाहते हैं चाहते हैं करता है कोडित। यह हेक्साडेसिमल आरजीबी मान लेता है और आवश्यक एचएसएल कोड उत्पन्न करता है। यह एक पूर्वावलोकन और Google मानचित्र जावास्क्रिप्ट एपीआई वी 3 कोड आउटपुट के साथ आता है। का आनंद लें, डी

http://googlemapscolorizr.stadtwerk.org/

+0

आप GUYS, यह सबसे अच्छा जवाब है !! ICH LIEBE EUCH, STADT.WERK !!! मैंने बिताया काम करने के स्वीकार्य उत्तर में स्क्रिप्ट बनाने की कोशिश करने वाला एक पूरा घंटा, यह कभी नहीं हुआ, यह पहले प्रयास में काम करता था। – lfborjas

+0

यह मेरे लिए पूरी तरह से काम करता था। – traday

0

मैं बिल्कुल रंगों से मेल की जरूरत है। इसलिए मैंने टूल का उपयोग किया जो @ stadt.werk ऑफ़र करने के लिए (http://googlemapscolorizr.stadtwerk.org/) प्रदान करता है।

लेकिन फिर मैं @ बुक्ज़ोर द्वारा समझाई गई समस्या में भाग गया जहां Google मानचित्र एपीआई आपकी छाया पर भिन्नताएं बनाता है, जिनमें से कोई भी बिल्कुल निर्दिष्ट नहीं है।

इसलिए मैंने एक ब्राउज़र में नक्शा खींच लिया, केवल दो रंगों के साथ क्षेत्र का एक स्क्रीनशॉट लिया जो काफी मेल नहीं खा रहा था, इसे एक छवि संपादक (pixlr.com, मेरे मामले में) में खोला गया, इस्तेमाल किया गया छाया के लिए संतृप्ति और हल्कापन प्राप्त करने के लिए रंग-चूसने वाला उपकरण, Google एपीआई कॉल में मेरी संतृप्ति और/या हल्कापन समायोजित करता है, और तब तक दोहराया जाता है जब तक कि मुझे ऐसा कुछ मिलता है जो पूरी तरह मेल नहीं खाता है।

यह संभव है कि, Google मानचित्र एपीआई विभिन्न उपकरणों/ब्राउज़रों/आदि पर रंगों के साथ अलग-अलग चीजें करेगी, लेकिन अब तक, बहुत अच्छा है।

थकाऊ, हाँ, लेकिन यह काम करता है।

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