QR कोड 1.2:1 पर डिकोड हो जाता है। डिज़ाइन उसके आसपास कहीं मत कीजिए

KoloQR टीम द्वारारिसर्च

नीली पृष्ठभूमि पर काले-सफ़ेद गोल QR कोड का स्टिकर, और उसके नीचे "Minimum Contrast" लिखी सियान पट्टी तथा #000000 हेक्स मान के बग़ल में काला बिंदु लिए सफ़ेद पट्टी।

न Apple और न Google उन कैमरा ऐप्स के लिए कोई कंट्रास्ट सीमा प्रकाशित करता है जो ज़्यादातर QR कोड पढ़ते हैं, इसलिए iPhone या Android की सीमा बताकर उद्धृत हर संख्या ऐसे माप से आई है जिसे किसी ने प्रकाशित ही नहीं किया। जो पढ़ा जा सकता है वह ZXing का सोर्स है, यानी वह ओपन-सोर्स डिकोडर जो बाक़ी बहुत कुछ के पीछे है: वह 8 x 8 पिक्सेल के खंडों में काम करता है और ऐसे खंड को, जिसके सबसे हल्के और सबसे गहरे पिक्सेल 255 में से 24 स्तरों के भीतर हों, बिना किसी किनारे वाला मान लेता है। वह क़रीब 1.24:1 का कंट्रास्ट अनुपात है - सफ़ेद पर मुश्किल से दिखने वाला स्लेटी। बंधन डिकोडर नहीं है। बंधन वह काग़ज़ है जो 100% के बजाय 85% परावर्तित करता है, वह स्याही जो फैलती है, वह चमक जो कालों को उठा देती है, और आधे मिलीमीटर का हिलना - और यही वजह है कि काम के आँकड़े स्क्रीन पर 4:1 और छपाई में 7:1 हैं।

मुख्य बातें

  • न Apple और न Google iOS व Android में बने QR स्कैनिंग के लिए कोई कंट्रास्ट सीमा प्रकाशित करता है, इसलिए “वह” iPhone या Android सीमा बताकर उद्धृत कोई भी संख्या ऐसी माप नहीं जिसे कोई जाँच सके। जो जाँचा जा सकता है वह ओपन-सोर्स डिकोडर ZXing का प्रकाशित सोर्स है, और छपाई गुणवत्ता का मानक ISO/IEC 15415।
  • ZXing का हाइब्रिड बाइनराइज़र 8 x 8 पिक्सेल के खंडों पर काम करता है और ऐसे खंड को, जिसके सबसे हल्के और सबसे गहरे पिक्सेल 255 में से 24 स्तरों के भीतर हों, बिना किनारे वाला मानता है। सफ़ेद के मुक़ाबले 24 स्तर का मतलब है स्लेटी #E7E7E7 - यानी क़रीब 1.24:1 का कंट्रास्ट अनुपात।
  • स्क्रीन के लिए 4:1 और छपाई के लिए 7:1 पर डिज़ाइन करें, और 3:1 को वह लकीर मानें जिसके नीचे कोई कोड बाहर नहीं जाना चाहिए। 1.24:1 और 7:1 का फ़ासला अंधविश्वास नहीं है: वह काग़ज़, आसपास की रोशनी, चमक और धुँधलापन है, जो डिकोडर के कुछ देखने से पहले ही डिज़ाइन के आँकड़े में से घटा लेते हैं।
  • कैमरा जो नापता है वह कंट्रास्ट अनुपात नहीं है। अनुपात हरे को अनुभव की जाने वाली चमक का 71% भार देता है और एक फ़्लेयर पद जोड़ता है; कैमरे का चमक चैनल हरे को 59% भार देता है और कुछ नहीं जोड़ता। दोनों सबसे ज़्यादा गाढ़े लाल, हरे और नीले पर असहमत होते हैं, और अनुपात इन दोनों में सख़्त वाला है।
  • धुँधलापन और कम कंट्रास्ट जुड़ते नहीं, गुणा होते हैं, क्योंकि धुँधलापन पड़ोसी पिक्सेलों का औसत निकालता है और इसलिए हर खंड के भीतर हल्के-से-गहरे का फ़ासला घटा देता है - ठीक वही मात्रा जिस पर बाइनराइज़र सीमा तय करता है। जो कोड स्थिर तस्वीर में 3:1 पर टिक जाता है, वह हिलते हाथ में 3:1 पर हार जाता है।

संख्या कोई प्रकाशित नहीं करता, और शुरुआत यहीं से है

iPhone और Android कैमरों में बने QR कोड स्कैनिंग के लिए कोई प्रकाशित कंट्रास्ट सीमा है ही नहीं। Apple की बारकोड पहचान Vision फ़्रेमवर्क के भीतर बैठती है और Android की Google Play Services के भीतर, दोनों बंद, दोनों इस बिंदु पर बिना दस्तावेज़ के, और किसी ने कभी कोई न्यूनतम नहीं बताया। जो लेख कोई संख्या बताता है - 3:1, 4:1, 40% - वह या तो किसी और चीज़ के लिए लिखी डिज़ाइन सलाह उद्धृत कर रहा है या कुछ भी नहीं।

इसे घुमा-फिराकर कहने के बजाय सीधे कह देना चाहिए, क्योंकि ईमानदार जवाब का आकार इसी से निकलता है। तीन चीज़ें बिना किसी प्रयोगशाला के तय की जा सकती हैं: कोई ओपन-सोर्स डिकोडर क्या करता है, क्योंकि उसका सोर्स प्रकाशित है; छपाई गुणवत्ता का मानक क्या नापता है, क्योंकि वह प्रकाशित मानक है; और कोई ख़ास कोड किसी ख़ास फ़ोन पर क्या करता है, क्योंकि उसमें बीस मिनट और एक प्रिंटर लगता है। इस विषय पर बाक़ी सब किसी का अनुमान है।

यह सवाल बार-बार इसलिए पूछा जाता है कि कंट्रास्ट QR कोड का इकलौता ऐसा चर है जिसे डिज़ाइनर बिना इरादे के तय कर देता है। मॉड्यूल आकार सोचा-समझा फ़ैसला है। एरर करेक्शन सोचा-समझा फ़ैसला है। रंग किसी ब्रांड पट्टी के लिए तीन साल पहले चुना जाता है, जब कोई QR कोड के बारे में सोच भी नहीं रहा होता, और कोड उसे विरासत में पाता है। इसलिए व्यावहारिक सवाल “न्यूनतम क्या है” नहीं, बल्कि “यह पट्टी मुझे कितनी गुंजाइश छोड़ती है” है, और उसका जवाब है।

डिकोडर असल में स्थानीय अंतर नापता है

डिकोडर आपके अग्रभाग रंग की तुलना आपके बैकग्राउंड रंग से कभी नहीं करता। वह कैमरा फ़्रेम को एक स्लेटी चैनल में बदलता है, पिक्सेलों के हर छोटे पड़ोस के लिए तय करता है कि उस पड़ोस में गहरे और हल्के की सीमा कहाँ पड़ती है, और नतीजे से मॉड्यूल पढ़ता है। बाइनराइज़ेशन वह क़दम है जिसमें डिकोडर कोई भी मॉड्यूल पढ़ने की कोशिश से पहले स्लेटी तस्वीर को शुद्ध काले और सफ़ेद पिक्सेल में बदल देता है। कंट्रास्ट की सहनशीलता से जुड़ा सब कुछ वहीं तय होता है।

पढ़ने लायक़ डिकोडर ZXing है, क्योंकि व्यापक रूप से तैनात डिकोडरों में इकलौता वही है जिसका सोर्स सार्वजनिक है। उसका डिफ़ॉल्ट हाइब्रिड बाइनराइज़र तस्वीर को 8 x 8 पिक्सेल के खंडों में बाँटता है, हर खंड का सबसे हल्का और सबसे गहरा पिक्सेल निकालता है, और उस खंड की सीमा दोनों के ठीक बीच रखता है। तस्वीर का कोई आयाम 40 पिक्सेल से नीचे हो तो वह स्थानीय तरीक़ा छोड़कर पूरी तस्वीर पर एक ही बार सीमा लगा देता है।

दिलचस्प स्थिरांक उस खंड-चक्र का पहरा है। अगर किसी खंड के सबसे हल्के और सबसे गहरे पिक्सेल का अंतर 255 में से 24 या कम हो, तो ZXing उससे कोई सीमा निकालता ही नहीं - वह मान लेता है कि खंड में सिर्फ़ हल्के या सिर्फ़ गहरे पिक्सेल हैं और पड़ोसियों से अंदाज़ा उधार ले लेता है। सफ़ेद से चौबीस स्तर नीचे स्लेटी #E7E7E7 है, यानी क़रीब 1.24:1 का कंट्रास्ट अनुपात। उदार मॉड्यूल आकार वाली साफ़ डिजिटल तस्वीर में यही न्यूनतम है।

इससे दो नतीजे निकलते हैं, और दोनों ख़ुद उस संख्या से ज़्यादा काम के हैं। पहला यह कि कंट्रास्ट स्थानीय रूप से नापा जाता है, मोटे तौर पर कुछ मॉड्यूलों के क्षेत्रफल पर, पूरे पन्ने पर नहीं - और इसीलिए कोड के पीछे धीरे बदलता ग्रेडिएंट दिखने से कहीं कम ख़तरनाक है, और कोड के पीछे कोई तस्वीर जानलेवा है। ग्रेडिएंट हर जगह स्थानीय अंतर बचाए रखता है; तस्वीर चिह्न के बीचोंबीच यह बदल देती है कि कोई मॉड्यूल सीमा के किस तरफ़ पड़ता है।

दूसरा यह कि कंट्रास्ट और आकार एक ही समस्या के दो लिबास हैं। खंड आठ-बाई-आठ मॉड्यूल नहीं, आठ-बाई-आठ कैमरा पिक्सेल के होते हैं, इसलिए एक खंड में कितने मॉड्यूल आते हैं यह पूरी तरह इस पर है कि चिह्न सेंसर पर कितना बड़ा उतरता है। जो कोड फ़्रेम भर देता है, उसे हर मॉड्यूल के लिए कई खंड मिलते हैं और सीमा उसी मॉड्यूल के अपने किनारों से निकलती है। जो कोड बहुत दूर से खींचा गया, उसमें एक खंड कई मॉड्यूलों पर फैल जाता है और सीमा उन सबका औसत बनती है, यानी ठीक उसी कलाकृति से छोटा असरदार अंतर। इसलिए कोड को उसकी स्कैन दूरी के हिसाब से नापना अलग विषय नहीं, उसी कंट्रास्ट बजट का हिस्सा है।

डिज़ाइन की संख्या और कैमरे तक पहुँचने वाली संख्या अलग हैं

डिज़ाइन फ़ाइल और इमेज सेंसर के बीच की हर चीज़ कंट्रास्ट घटाती है, और ये नुक़सान एक-दूसरे को काटते नहीं, जुड़ते जाते हैं। यही पूरी वजह है कि सुझाए गए आँकड़े डिकोडर की न्यूनतम सीमा से छह गुना ऊपर बैठते हैं, और इन्हें सार में समेटने के बजाय गिनाना चाहिए, क्योंकि इनमें से ज़्यादातर सुधारे जा सकते हैं और सुधार सस्ते हैं।

  • काग़ज़ सफ़ेद नहीं होता। अनकोटेड दफ़्तरी और ऑफ़सेट काग़ज़ अपने ऊपर पड़ती रोशनी का मोटे तौर पर 80 से 90% परावर्तित करता है। 21:1 का डिज़ाइन अनुपात 21:1 बनकर नहीं पहुँचता; वह उतना ही पहुँचता है जितना स्याही की एक बूँद पड़ने से पहले काग़ज़ ने रहने दिया।
  • स्याही फैलती है। सोखने वाले काग़ज़ पर गहरे मॉड्यूल बग़ल की हल्की कोठरियों में बढ़ जाते हैं, जिससे डिकोडर के नापे हर खंड में सबसे गहरा मान ऊपर उठता है और सबसे हल्का नीचे गिरता है। क्राफ़्ट, अख़बारी काग़ज़ और थर्मल रसीद काग़ज़ सबसे बुरे हैं।
  • ग्लॉस और लेमिनेशन दोनों में रोशनी जोड़ देते हैं। दर्पण जैसी परावर्तन गहरे और हल्के, दोनों मॉड्यूलों में उतनी ही सफ़ेद रोशनी डालती है, जिससे काला स्तर उठ जाता है और अनुपात दब जाता है - वही गणित जो कंट्रास्ट सूत्र के फ़्लेयर पद में है। मैट लेमिनेट थोड़ी तीखापन लेता है और उससे ज़्यादा कंट्रास्ट लौटा देता है।
  • आसपास की रोशनी भी यही करती है। दिन की रोशनी में दुकान की खिड़की के नीचे लगे कोड पर परदेनुमा चमक पड़ी होती है। मंद रोशनी वाले रेस्टोरेंट में कैमरा अपने सेंसर का गेन बढ़ा देता है, जिससे ठीक उसी मात्रा में शोर जुड़ जाता है जिसे बाइनराइज़र नापता है।
  • अपने आप होने वाला एक्सपोज़र कोड के लिए नहीं, पूरे फ़्रेम के लिए तय होता है। ज़्यादातर अँधेरी तस्वीर के भीतर किसी छोटे हल्के लेबल पर गहरा कोड अँधेरे हिस्से के हिसाब से एक्सपोज़ होता है, और लेबल सफ़ेद की ओर छिटक जाता है, मॉड्यूलों को भी अपने साथ खींचता हुआ।
  • धुँधलापन गुणक है। फ़ोकस की चूक और हाथ का हिलना हर पिक्सेल का उसके पड़ोसियों के साथ औसत निकाल देते हैं, और औसत निकालना ठीक वही है जो 8 x 8 खंड के भीतर हल्के-से-गहरे का फ़ासला घटाता है। कम कंट्रास्ट और हल्का धुँधलापन जुड़ते नहीं, गुणा होते हैं, और इसीलिए सीमा-रेखा वाला कोड तब पास होता है जब कोई फ़ोन टिकाकर पकड़ता है और तब हार जाता है जब नहीं।

स्क्रीन का अपना वही संस्करण है, जो उन लोगों को चौंकाता है जो मानते हैं कि डिस्प्ले नियंत्रित माहौल है। धूप में 20% चमक पर, मैट स्क्रीन प्रोटेक्टर के पीछे, ऐसे ब्राउज़र में कोड दिखाता फ़ोन जिसने उस पर डार्क-मोड फ़िल्टर लगा दिया हो, वह अनुपात नहीं दे रहा जो डिज़ाइन फ़ाइल कहती है। डिज़ाइन का अनुपात जो हासिल हो सकता है उसकी छत है, वह मान कभी नहीं जो पहुँचता है।

इसलिए “फ़ोनों को कितना कंट्रास्ट चाहिए” का जवाब यह है कि फ़ोनों को बहुत कम चाहिए और कार्यप्रवाहों को बहुत ज़्यादा। आप जो गुंजाइश रख रहे हैं वह डिकोडर के ख़िलाफ़ गुंजाइश नहीं है। वह ऊपर की आठ चीज़ों के ख़िलाफ़ गुंजाइश है, और उनमें से कोई भी उस मॉनिटर पर नहीं दिखती जहाँ फ़ैसला लिया जाता है।

कंट्रास्ट की सीढ़ी: वह जाँच जो आपकी अपनी संख्या देती है

किसी ख़ास काम के लिए कंट्रास्ट की न्यूनतम सीमा निकालने का तरीक़ा यह है कि वही कोड असली सामग्री पर आठ उतरते कंट्रास्ट स्तरों पर छापें और देखें कि वह कहाँ चलना बंद करता है। इसमें क़रीब बीस मिनट लगते हैं, एक शीट ख़र्च होती है, और नतीजा आपके प्रिंटर, आपके काग़ज़ और आपके ग्राहकों के फ़ोनों के लिए एक संख्या है, किसी और के लिए नहीं।

नीचे के आठ पायदान सफ़ेद पर स्लेटी हैं, इस तरह चुने गए कि हर एक किसी गोल कंट्रास्ट अनुपात पर उतरे। वही पेलोड आठ बार बनाइए, हर अग्रभाग रंग के लिए एक बार, बैकग्राउंड शुद्ध सफ़ेद रखिए, मॉड्यूल का आकार और नाप आठों में एक जैसे रखिए, और उन्हें एक ही शीट पर उसी क्रम में सजाइए।

सफ़ेद पर अग्रभागकंट्रास्ट अनुपातचमक का अंतर (255 में से)परावर्तकता का अंतर
#00000021:1255100%
#5959597.0:116690%
#7F7F7F4.0:112879%
#9494943.0:110770%
#A3A3A32.5:19263%
#B7B7B72.0:17253%
#D2D2D21.5:14536%
#E7E7E71.24:12420%
तीन कॉलम, तीन माप, हर पंक्ति में एक ही रंग-जोड़ा - और यही पूरी वजह है कि “कौन-सा कंट्रास्ट हारता है” का कोई एक जवाब नहीं। अनुपात वह अनुभवजन्य आँकड़ा है जो डिज़ाइन औज़ार बताता है, चमक का अंतर मोटे तौर पर वह है जो कैमरे के स्लेटी चैनल तक पहुँचता है, और परावर्तकता का अंतर वह है जिसे बारकोड वेरिफ़ायर श्रेणी देता है। तीनों हेक्स मानों से गणना किए गए हैं, इसलिए किसी भी कैलकुलेटर से दोहराए जा सकते हैं।
  1. आठों पायदान आख़िरी आकार में, आख़िरी सामग्री पर छापें. एक शीट, आठों कोड उसी आकार में जितना असली कोड होगा, उसी सामग्री पर जो असली काम में लगेगी। अगर काम क्राफ़्ट, बोतल के लेबल या मेन्यू कार्ड पर जाना है तो कॉपियर काग़ज़ पर दफ़्तरी लेज़र प्रिंट जाँच नहीं है - स्याही का फैलाव सामग्री के हिसाब से बदलता है और उसी बजट से घटता है जिससे रंग।
  2. हर पायदान दो फ़ोन से, सिर्फ़ देशी कैमरे से स्कैन करें. एक iOS और एक Android, और स्कैनिंग ऐप के बजाय भीतर बना कैमरा ऐप। ख़ास स्कैनिंग ऐप देशी ऐप से ज़्यादा सहनशील होते हैं और वे पायदान भी पास कर देंगे जिन्हें आपके ग्राहक नहीं कर पाएँगे। दर्ज कीजिए कि किसी भी फ़ोन पर पहला पायदान कौन-सा हारता है।
  3. उसी रोशनी में दोहराएँ जिसमें कोड रहेगा. वही शीट असली जगह ले जाइए - रेस्टोरेंट की मेज़, दुकान की शेल्फ़, शाम को बाहर लगा साइन। रोशनी हार का बिंदु किसी भी दूसरे चर से ज़्यादा पायदान हिला देती है, और यही क़दम सबसे ज़्यादा छूटता है।
  4. असली दूरी और असली कोण पर दोहराएँ. वहीं से स्कैन कीजिए जहाँ इंसान सचमुच खड़ा होता है, और एक बार सीधे से क़रीब 30 डिग्री तिरछा। दूरी प्रति मॉड्यूल पिक्सेल घटा देती है, जिससे हर खंड को दिखने वाला अंतर छोटा हो जाता है; कोण उसी चीज़ में से थोड़ा और लेता है।
  5. फ़ोन को बिना टिकाए दोहराएँ. उसे लापरवाही से पकड़िए, एक हाथ से, चलते हुए। धुँधलापन हर खंड के भीतर हल्के-से-गहरे का फ़ासला घटाता है, इसलिए यह दौर आम तौर पर सावधान दौर से एक पायदान पहले हारेगा। लापरवाह संख्या ही असली संख्या है।
  6. पहली हार से दो पायदान ऊपर डिज़ाइन करें. हर हालत का सबसे बुरा नतीजा लीजिए और उससे सीढ़ी पर दो पायदान ऊपर चढ़ जाइए। दो पायदान उन चरों के लिए काम की गुंजाइश हैं जिन्हें जाँच में शामिल नहीं किया जा सका - कोई दूसरा फ़ोन, कोई ठंडा दिन, कोई घिसा प्रिंट हेड, कोई ऐसा लेमिनेट जो नमूने पर नहीं था।

एक पायदान पर टिप्पणी ज़रूरी है। #000000 वाली पंक्ति जाँच नहीं, नियंत्रण है: अगर उस शीट पर सफ़ेद पर काला भी हार जाए, तो दिक़्क़त आकार, फ़ोकस, चमक या क्वाइट ज़ोन की है, और जब तक वह ठीक न हो, सीढ़ी में उससे नीचे कुछ भी आपको कुछ नहीं बताएगा।

रंग कंट्रास्ट नहीं है, और दोनों माप आपस में असहमत हैं

किसी रंग का कंट्रास्ट अनुपात यह बताने में कमज़ोर है कि वह रंग कैमरे पर कैसा बरतेगा, क्योंकि दोनों संख्याएँ अलग तरह से बनी हैं। कंट्रास्ट अनुपात दो रंगों की सापेक्ष चमक की तुलना करती एक संख्या है, जो दो एक जैसे रंगों के लिए 1:1 से लेकर सफ़ेद पर काले के लिए 21:1 तक जाती है। वह हरे को अनुभव की जाने वाली चमक का 71% भार देता है, एक गामा वक्र लगाता है, और एक छोटा फ़्लेयर पद जोड़ता है, जो जान-बूझकर गहरे जोड़ों को दंड देता है। कैमरे का स्लेटी चैनल हरे को 59%, लाल को 30% और नीले को 11% भार देता है, और कुछ नहीं जोड़ता।

सफ़ेद पर रंगकंट्रास्ट अनुपातचमक का अंतर (255 में से)
काला #00000021:1255
गहरा नेवी #0F172A17.9:1232
गहरा लाल #7F1D1D10:1197
शुद्ध नीला #0000FF8.6:1226
ब्रांड नीला #1D4ED86.7:1176
वेब हरा #0080005.1:1180
लाल #DC26264.8:1163
शुद्ध लाल #FF00004.0:1179
हरा #16A34A3.3:1144
मैजेंटा #FF00FF3.1:1150
नारंगी #FF7F002.5:1104
अंबर #F59E0B2.2:188
शुद्ध हरा #00FF001.4:1105
सियान #00FFFF1.25:176
पीला #FFFF001.07:129
कंट्रास्ट अनुपात WCAG सापेक्ष-चमक सूत्र से हैं; चमक के अंतर उस BT.601 भार से, जिस पर कैमरे का स्लेटी चैनल टिका है। दोनों कॉलम पहले कॉलम के हेक्स मानों से गणना किए गए हैं।

शुद्ध नीला सबसे अलग दिखता है और यही तालिका का काम का नतीजा है। 8.6:1 और 226 के चमक अंतर पर वह दोनों मापों में लगभग-काले के बाद दूसरे स्थान पर है, और इससे गहरा नीला QR कोड के लिए काफ़ी अंतर से सबसे सुरक्षित गाढ़ा रंग बन जाता है। उसके बाद गहरे लाल और गहरे बैंगनी-लाल आते हैं। जिस भी रंग का अनुपात गाढ़ेपन से नहीं, गहरेपन से आता है, वह अच्छा बरतता है। इससे कौन-सी पट्टियाँ इस्तेमाल लायक़ बचती हैं और वे कहाँ बैठती हैं, यह रंगीन QR कोड का विषय है।

शुद्ध हरा वहाँ है जहाँ दोनों माप सबसे ज़्यादा अलग होते हैं और जहाँ फिर भी अनुपात पर भरोसा करना चाहिए। उसका 1.4:1 अनुपात तबाही जैसा दिखता है, जबकि 105 का चमक अंतर नारंगी के 104 से मेल खाता है, यानी कैमरा हरे कोड में उससे ज़्यादा देखता है जितना अनुपात बताता है। फिर भी यह काफ़ी नहीं: 255 में से 105 आधे पैमाने से कम है, और उसके बाद काग़ज़, रोशनी व लेंस अपना हिस्सा लेते हैं - हरे कोड ही भरोसे से मॉक-अप में चलते हैं और शेल्फ़ पर हार जाते हैं।

पीला, सियान और अंबर दोनों मापों पर हारते हैं और उन्हें बचाने की कोई तरकीब नहीं। सफ़ेद पर पीला कैमरे को 255 में से 29 स्तरों का अंतर देता है - यानी उस 24 से मुश्किल से ऊपर जिस पर ZXing किनारा ढूँढ़ना ही बंद कर देता है। पीला कोड जोखिम भरा कोड नहीं है, वह सजावटी चीज़ है जो कभी-कभी बेहतरीन हालात में स्कैन हो जाती है।

ब्रांड का रंग लक्ष्य तक न पहुँचे तो उपाय हमेशा वही है और हमेशा एक ही दिशा में: कोड गहरा कीजिए, बैकग्राउंड हल्का मत कीजिए। बैकग्राउंड को लगभग सफ़ेद रहना ही चाहिए, तभी परावर्तकता का अंतर छपाई में बचता है, और ब्रांड का रंग दो-तीन क़दम गहरा करने पर आम तौर पर अपनी पहचान बनाए रखता है और अपना अनुपात दोगुना कर देता है। जहाँ यह मंज़ूर न हो, वहाँ ब्रांड का रंग कोड के चारों ओर के फ़्रेम, लेबल और कॉल-टु-ऐक्शन में डालिए और ख़ुद कोड गहरा रहने दीजिए - ब्रांडेड QR कोड ज़्यादातर यही हैं, और इसमें कंट्रास्ट कुछ भी ख़र्च नहीं होता।

गहरे बैकग्राउंड पर हल्के मॉड्यूल अलग समस्या हैं

उलटा QR कोड - गहरे बैकग्राउंड पर हल्के मॉड्यूल - बेदाग़ कंट्रास्ट अनुपात रखकर भी हार सकता है, क्योंकि अनुपात सममित है और डिकोडर नहीं। काले पर सफ़ेद वही 21:1 बनता है जो सफ़ेद पर काला, और कहीं की कोई कंट्रास्ट जाँच उसे झंडी नहीं दिखाएगी। बदलता यह है कि दूसरे सिरे का सॉफ़्टवेयर तस्वीर को दोनों तरह से आज़माने को तैयार है या नहीं।

मौजूदा iPhone और Android कैमरा ऐप आम तौर पर उलटे कोड सँभाल लेते हैं, और यह लगातार बेहतर हुआ है। पुराने हार्डवेयर पर बात टूटती है: तय इमेजर, बिक्री-केंद्र के स्कैनर और गोदाम के उपकरण अक्सर हल्के बैकग्राउंड पर गहरे डेटा की उम्मीद करते हैं और उनमें उलटने का कोई चरण होता ही नहीं, और ख़ुद ZXing तभी उलटता है जब बुलाने वाला ऐप तस्वीर को उसके दिए उलटे ल्यूमिनेंस स्रोत में लपेटे - यानी यह फ़ैसला कोड का नहीं, ऐप बनाने वाले का है।

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

एक और विषमता नाम लेने लायक़ है, क्योंकि वह स्क्रीन पर दिखती ही नहीं। गहरे बैकग्राउंड पर हल्का कोड छापने का मतलब है एक बड़ा ठोस गहरा क्षेत्र बिछाना, और ठोस भराव छितरे भराव से ज़्यादा फैलता है। सिकुड़ने वाले मॉड्यूल हल्के होते हैं, और डिकोडर उन्हीं को जोड़े के हल्के आधे के रूप में पढ़ रहा होता है। इसलिए उलटा कोड सीधे कोड के मुक़ाबले छपाई में ज़्यादा कंट्रास्ट गँवाता है।

छपाई का मानक अनुपात के बजाय क्या नापता है

QR कोड की दुनिया के पास अपनी कंट्रास्ट माप है और वह कोई अनुपात नहीं। सिंबल कंट्रास्ट ISO/IEC 15415 में तय की गई छपाई गुणवत्ता की वह माप है, जो चिह्न के सबसे हल्के और सबसे गहरे बिंदु की परावर्तकता का अंतर है। वह प्रतिशत अंकों में लिखी जाती है और A से F तक श्रेणी पाती है। वेरिफ़ायर उसे मॉड्युलेशन, तय पैटर्न के नुक़सान, जाल की असमानता और बिना इस्तेमाल हुए एरर करेक्शन के साथ बताता है, और चिह्न की कुल श्रेणी इन सबमें सबसे बुरी होती है।

यह फ़र्क़ इसलिए मायने रखता है कि परावर्तकता का अंतर और कंट्रास्ट अनुपात एक ही चीज़ के बदले हुए रूप नहीं हैं। परावर्तकता रैखिक प्रकाश है; कंट्रास्ट अनुपात उस पर एक गामा वक्र और एक फ़्लेयर पद चढ़ा देता है। गणित चलाइए तो फ़र्क़ बड़ा निकलता है: 40% का परावर्तकता अंतर, यानी वह स्तर जो रिटेल विनिर्देशों में आम तौर पर माँगा जाता है, आदर्श सफ़ेद के मुक़ाबले क़रीब 1.6:1 का कंट्रास्ट अनुपात बनता है, और 70% का अंतर क़रीब 3:1। जिस रंग-जोड़े को कोई वेब सुगम्यता जाँचकर्ता सीधे ठुकरा देता है, वह पूरी तरह अनुरूप बारकोड हो सकता है।

यह 3:1 पर डिज़ाइन करने की छूट नहीं है। यह इसका स्पष्टीकरण है कि दोनों उद्योग असहमत क्यों हैं: वेरिफ़ायर छपे नमूने को नियंत्रित रोशनी में, तय दूरी पर, चिह्न को छिद्र भरते हुए नापता है, और डिज़ाइनर के अनुपात को जेब में पड़े फ़ोन तक ज़िंदा पहुँचना है। मानक वस्तु नाप रहा है, और अनुपात पूरी शृंखला के प्रतिनिधि के रूप में इस्तेमाल हो रहा है।

मानक के भीतर का जाल वह रोशनी है जो वह इस्तेमाल करता है। बारकोड सत्यापन 660 नैनोमीटर की लाल रोशनी में किया जाता है, यानी उसी तरंगदैर्घ्य पर जिसे पुराने लेज़र स्कैनर इस्तेमाल करते थे और जिसकी नक़ल आज के वेरिफ़ायर भी करते हैं; चिह्न की श्रेणी उसी के साथ लिखी जाती है, जैसे 4.0/20/660। लाल स्याही लाल रोशनी परावर्तित करती है, इसलिए सफ़ेद काग़ज़ पर लाल कोड 660 nm पर लगभग बिना कंट्रास्ट के होता है और अपठनीय की श्रेणी पाता है, जबकि किसी भी फ़ोन पर बेहतरीन स्कैन होता है। यही वह ख़ास वजह है कि लाल QR कोड डिज़ाइनर की हर जाँच पास कर सकता है और किसी काउंटर या गोदाम इमेजर पर हार सकता है।

इससे निकलने वाला नियम: जो चीज़ ग्राहकों से नहीं, तय उपकरणों से पढ़ी जाएगी, वह सफ़ेद पर काली होनी चाहिए, उसी आकार पर जो उपकरण के दस्तावेज़ माँगते हैं, और अंदाज़े से नहीं, सत्यापित करके। जो फ़ोनों से पढ़ी जाएगी, उसके लिए पूरा रंग-क्षेत्र उपलब्ध है, बस वे हिस्से घटाकर जिन्हें ऊपर की तालिका ख़ारिज करती है।

जिन आँकड़ों पर डिज़ाइन करना है

छपने वाली किसी भी चीज़ के लिए कम से कम 7:1, स्क्रीन पर दिखने वाली किसी भी चीज़ के लिए कम से कम 4:1 का कंट्रास्ट अनुपात रखिए, और 3:1 को वह बिंदु मानिए जिसके नीचे कोई कोड बाहर नहीं जाना चाहिए, चाहे वह मॉक-अप में कितना ही अच्छा लगे। ये डिज़ाइन के लक्ष्य हैं, जिनमें पिछले हिस्सों के नुक़सान पहले ही जोड़ लिए गए हैं, न कि ऐसी सीमाएँ जिन्हें किसी ने फ़ोन पर नापा हो। पचास QR कोड रंग-जोड़े इन्हीं दो आँकड़ों को नाम वाले रंगों की तालिका पर लगाता है, ताकि पहले गणित किए बिना कोई पट्टी उनसे तौली जा सके।

  • छपाई, बिना नियंत्रण वाले हालात - मेन्यू, पैकेजिंग, साइन, स्टिकर। 7:1 या बेहतर। सफ़ेद पर काला या लगभग काला 21:1 है और उसकी कोई क़ीमत नहीं; 21:1 और 7:1 के बीच की जगह ही वह है जहाँ ब्रांड का रंग बैठता है।
  • सोखने वाले या मुश्किल काग़ज़ पर छपाई - क्राफ़्ट, अख़बारी काग़ज़, रसीदें, कपड़ा, उकेरी सतहें। कंट्रास्ट बिल्कुल ख़र्च ही मत कीजिए। उपलब्ध सबसे हल्के बैकग्राउंड पर काला, और बजट मॉड्यूल आकार में लगाइए।
  • स्क्रीन - वेबसाइट, प्रस्तुतियाँ, ऐप स्क्रीन, वीडियो। 4:1 या बेहतर, यह समझते हुए कि देखने वाले की चमक और आसपास की रोशनी आपके नियंत्रण से बाहर हैं।
  • हर वह चीज़ जो तय स्कैनरों से पढ़ी जाएगी, या जिस पर कोई विनिर्देश लागू है। सफ़ेद पर काला, सत्यापित। यहाँ रंग बिना किसी फ़ायदे का जोखिम है, और लाल ऐसा जोखिम जिसकी नाकामी का तरीक़ा तय है।
  • 3:1 से नीचे। उसे बाहर मत भेजिए। वह सीमा-रेखा वाला कोड नहीं जिसे कुछ फ़ोन सँभाल लेंगे - वह ऐसा कोड है जिसकी पूरी गुंजाइश काग़ज़ चुनने से पहले ही ख़र्च हो चुकी है।

एक जाँच आसानी से भूल जाती है: तीनों कोने वाले निशान भी गिने जाते हैं। स्कैनर कुछ भी डिकोड करने से पहले QR कोड को उसके फ़ाइंडर पैटर्न से ढूँढ़ता है, इसलिए जिस कोड के मॉड्यूल गहरे हों और कोने किसी हल्के उभार रंग में हों, उसका सबसे कमज़ोर कंट्रास्ट ठीक वहीं है जहाँ नाकामी की भरपाई हो ही नहीं सकती। आप कोई भी औज़ार इस्तेमाल करें, कोने के रंग को बैकग्राउंड के मुक़ाबले अलग से तौलिए और दोनों आँकड़ों में से बुरे वाले को कोड का असली कंट्रास्ट मानिए।

KoloQR, गोल और कस्टम आकार वाले QR कोड बनाने का फ्री जनरेटर, वह जोड़ा अपने आप निकालता है: पूर्वावलोकन के बग़ल का बैज पैटर्न रंग और कोने के रंग, दोनों का बैकग्राउंड के मुक़ाबले कंट्रास्ट अनुपात बताता है, दोनों में से बुरा दिखाता है, और 4:1 पर पास करता है। वह पारदर्शी बैकग्राउंड को सफ़ेद मानता है, क्योंकि पारदर्शी कोड आम तौर पर वहीं उतरता है। आप ऊपर के आठों स्लेटी रंगों पर वही पेलोड एक्सपोर्ट करके और शीट छापकर जनरेटर में सीढ़ी बना सकते हैं।

यहाँ की हर बात की ईमानदार सीमा: इनमें से कोई भी संख्या ऐसे हार्डवेयर पर स्कैन की गारंटी नहीं देती जिसे हमने जाँचा नहीं, और हमने जान-बूझकर किसी नामी फ़ोन के लिए कोई आँकड़ा प्रकाशित नहीं किया, क्योंकि हमने कोई नापा नहीं। सीढ़ी इसीलिए है कि आप नाप सकें। बीस मिनट और एक शीट काग़ज़ ऐसी संख्या देते हैं जो आपके काम के लिए सच है, और वह इस पोस्ट के किसी भी आँकड़े से ज़्यादा क़ीमती है।

जब दिक़्क़त असल में कंट्रास्ट की होती ही नहीं

जिन QR कोड की नाकामी का इल्ज़ाम कंट्रास्ट पर जाता है, उनमें से ज़्यादातर चार दूसरी वजहों से हारते हैं, और उनमें से किसी पर कंट्रास्ट बढ़ाने से कुछ नहीं बदलता। इस सूची पर पहले चल लेना सीढ़ी चलाने से तेज़ है, क्योंकि चार में से तीन बिना फ़ोन के ही दिख जाती हैं।

  • कोड उस दूरी के लिए बहुत छोटा है। छपाई में मोटे तौर पर 0.4 मिमी प्रति मॉड्यूल से नीचे फ़ोन कैमरे जूझते हैं, रंग चाहे जो हों। और कुछ बदलने से पहले एक मॉड्यूल नापिए।
  • क्वाइट ज़ोन काट दिया गया है। ISO/IEC 18004 चिह्न के चारों ओर चार मॉड्यूल का साफ़ हाशिया तय करता है, और लेआउट के लिए उस जगह पर क़ब्ज़ा करता डिज़ाइनर ऐसे कोड की सबसे आम वजहों में से है जो तस्वीर में बेहतरीन लगता है और कभी डिकोड नहीं होता।
  • कार्यप्रवाह में कहीं इमेज JPEG के रूप में सहेजी गई। JPEG का दबाव हर मॉड्यूल के चारों ओर हल्के छल्ले डाल देता है, जिससे ठीक उन्हीं खंडों में स्थानीय अंतर घट जाता है जिन्हें बाइनराइज़र नापता है। यह कंट्रास्ट की दिक़्क़त जैसी दिखती है और फ़ाइल फ़ॉर्मैट की दिक़्क़त होती है।
  • चमक। ग्लॉस लेमिनेट या छत की बत्ती परावर्तित करती स्क्रीन डिज़ाइन का कंट्रास्ट घटाती ही नहीं - वे चिह्न के एक हिस्से पर चमकीला धब्बा जोड़ देती हैं, और उस धब्बे के नीचे के खंड अपना अंतर गँवा देते हैं जबकि बाक़ी कोड ठीक रहता है। फ़ोन तिरछा करने से यह ठीक हो जाता है, और यही पहचान है।

एरर करेक्शन भी इस सूची में है, उलटे अर्थ में। स्तर M से H करने से कम कंट्रास्ट वाले कोड को कोई मदद नहीं मिलती, क्योंकि एरर करेक्शन उन मॉड्यूलों की मरम्मत करता है जिन्हें डिकोडर ने ग़लत पढ़ा, और कम कंट्रास्ट डिकोडर को चिह्न पढ़ने ही नहीं देता। वापसी क्षमता और मॉड्यूल आकार के बीच का सौदा असली फ़ैसला है, और इस समस्या का लीवर वह नहीं है। इस समस्या का लीवर है गहरा अग्रभाग, हल्का बैकग्राउंड, या बड़ा कोड।

इससे जुड़ी एक और नाकामी जानने लायक़ है, क्योंकि सजावट और कंट्रास्ट एक ही बजट से ख़र्च होते हैं: सजावटी मॉड्यूल आकार हर कोठरी में चौकोर मॉड्यूल से कम स्याही भरते हैं, जिससे बाइनराइज़र को दिखने वाला स्थानीय अंतर उसी तरह घटता है जैसे कम कंट्रास्ट से। कस्टम QR कोड आकार असल में क्या ख़र्च कराता है वह गणित खोलकर बताता है, और दोनों असर एक-दूसरे पर चढ़ते हैं - किसी हल्के ब्रांड रंग में सजा कोड एक ही बजट से दो बार ख़र्च कर रहा है।

अपना QR कोड बनाएँ

फ्री, बिना अकाउंट और बिना वॉटरमार्क। आकार चुनें, लोगो जोड़ें, कंट्रास्ट जाँचें और SVG, PDF, EPS या PNG में एक्सपोर्ट करें - एक स्टैटिक कोड, जिसके पीछे कोई सब्सक्रिप्शन नहीं।

QR कोड बनाएँ

Questions? Answered

डिज़ाइन के लक्ष्य के तौर पर छपाई के लिए 7:1 और स्क्रीन के लिए 4:1, और 3:1 वह लकीर जिसके नीचे कोई कोड बाहर नहीं जाना चाहिए। ख़ुद डिकोडर की न्यूनतम सीमा कहीं नीचे है - ZXing तब किनारा पहचानना बंद कर देता है जब किसी खंड के सबसे हल्के और सबसे गहरे पिक्सेल 255 में से 24 से कम अलग हों, यानी क़रीब 1.24:1 - पर वह सीमा साफ़ डिजिटल तस्वीर पर लागू है, दुकान की रोशनी में काग़ज़ पर पड़ी स्याही पर नहीं।

न Apple और न Google कोई सीमा प्रकाशित करता है, इसलिए आप जो भी ख़ास आँकड़ा उद्धृत देखते हैं वह ऐसी माप नहीं जिसे कोई जाँच सके। दोनों डिकोडर बंद सोर्स हैं। पढ़ा जा सकने वाला इकलौता संदर्भ बिंदु ZXing है, जो साफ़ तस्वीर पर क़रीब 1.24:1 पर हार मानता है, और किसी असली काम का व्यावहारिक जवाब यही है कि उतरते कंट्रास्ट स्तरों की सीढ़ी छापें और देखें कि आपके काग़ज़, रोशनी और फ़ोनों का मेल कहाँ हारता है।

क्योंकि स्क्रीन डिज़ाइन का कंट्रास्ट देती है और काग़ज़ नहीं। सफ़ेद काग़ज़ 100% के बजाय 80 से 90% परावर्तित करता है, स्याही हर गहरे मॉड्यूल के बग़ल की हल्की कोठरियों में फैलती है, और ग्लॉस या आसपास की रोशनी दोनों पर चमकीला परदा डाल देती है। जो जोड़ा डिज़ाइन फ़ाइल में 3:1 बनता है, वह कैमरे तक 2:1 के क़रीब पहुँच सकता है। असली सामग्री पर आख़िरी आकार में जाँचें, मॉनिटर पर कभी नहीं।

आम तौर पर हाँ, अगर रंग सिर्फ़ गाढ़ा नहीं, गहरा हो। गहरे नीले, नेवी और गहरे लाल सब सफ़ेद के मुक़ाबले 7:1 पार करते हैं और कैमरे पर अच्छा बरतते हैं। नारंगी, अंबर, सियान और पीले नहीं करते, और उन्हें एरर करेक्शन का कोई स्तर नहीं बचाता। ब्रांड का रंग कम पड़े तो बैकग्राउंड हल्का करने के बजाय कोड गहरा करें - या कोड गहरा रखकर ब्रांड का रंग उसके चारों ओर के फ़्रेम में डालें।

मौजूदा फ़ोनों पर आम तौर पर हाँ। पुराने या तय स्कैनरों पर अक्सर नहीं। कंट्रास्ट अनुपात सममित है, इसलिए काले पर सफ़ेद वही 21:1 बनता है जो सफ़ेद पर काला और कोई कंट्रास्ट जाँच आपको चेतावनी नहीं देगी - बदलता यह है कि पढ़ने वाला तस्वीर को उलटकर आज़माता है या नहीं। उलटे कोड छपाई में ज़्यादा कंट्रास्ट भी गँवाते हैं, क्योंकि ठोस गहरा भराव हल्के मॉड्यूलों में फैलता है। उन्हें वहीं इस्तेमाल करें जहाँ पढ़ने वाले सिर्फ़ फ़ोन हों।

ग्रेडिएंट आम तौर पर टिक जाता है और तस्वीर आम तौर पर नहीं, और वजह यह है कि डिकोडर सीमा स्थानीय रूप से तय करते हैं। ZXing हर 8 x 8 पिक्सेल खंड के लिए अलग हल्के-गहरे की सीमा निकालता है, इसलिए धीरे बदलने वाला बैकग्राउंड हर जगह स्थानीय अंतर बचाए रखता है। तस्वीर कोड से तेज़ बदलती है, इसलिए चिह्न में कहीं न कहीं मॉड्यूल अपने ही खंड की सीमा के ग़लत तरफ़ पड़ जाते हैं।

क्योंकि बारकोड वेरिफ़ायर और कई तय स्कैनर 660 नैनोमीटर की लाल रोशनी में पढ़ते हैं, और लाल स्याही लाल रोशनी परावर्तित करती है। सफ़ेद काग़ज़ पर लाल कोड उस तरंगदैर्घ्य पर लगभग बिना कंट्रास्ट के होता है, जबकि रंगीन कैमरा उसे साफ़ देखता है। यह 1D बारकोड की दुनिया का जाना-पहचाना जाल है और QR कोड पर ज्यों का त्यों लागू होता है। जो चीज़ तय उपकरण स्कैन करेंगे, वह सफ़ेद पर काली होनी चाहिए।

सफ़ेद पर नहीं। सफ़ेद पर पीला कैमरे को 255 में से 29 स्तरों का चमक अंतर देता है, यानी उस 24 से मुश्किल से ऊपर जिस पर ZXing किनारा ढूँढ़ना ही बंद कर देता है, और 1.07:1 का कंट्रास्ट अनुपात। पेस्टल बस ज़रा-सा बेहतर बैठते हैं। अगर हल्की पट्टी ही ज़रूरत है, तो समस्या उलट दीजिए: हल्के पैनल के भीतर गहरा कोड पट्टी भी बचाता है और कंट्रास्ट भी।

नहीं, और यही सबसे आम ग़लत उपाय है। एरर करेक्शन उन मॉड्यूलों की मरम्मत करता है जो ग़लत पढ़े गए; कम कंट्रास्ट चिह्न को पढ़े ही नहीं जाने देता, क्योंकि बाइनराइज़ेशन किसी डेटा के मरम्मत लायक़ होने से पहले होता है। स्तर M से H करने पर चिह्न उसी छपाई चौड़ाई पर सघन भी हो जाता है, जिससे हर मॉड्यूल छोटा हो जाता है और सीमा-रेखा वाला कोड बेहतर नहीं, बदतर बनता है।

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

आगे पढ़ते रहें

ऐसे पेज जो यहीं से आगे बढ़ते हैं - वही संदर्भ, वैसा ही कोड, या अगला फ़ैसला जो लेना है।

रिटेल दुकानें

शेल्फ़ लेबल, दुकान की खिड़की और कैश काउंटर के साइन पर प्रोडक्ट ब्योरा, स्टॉक और समीक्षा के लिंक।

आयोजन एजेंसियाँ

किसी और के आयोजन के लिए बनाए गए कोड: क्लाइंट के रीडायरेक्ट, प्रदर्शकों के लिए विनिर्देश पत्र, बैज की छपाई और कमरे के हिसाब से नापे गए साइन।

रंगीन QR कोड

अपना पैलेट QR कोड पर बिना उसे तोड़े लगाएँ: कौन-सा रंग पैटर्न पर जाए, और कौन-सा फ़्रेम का हक़दार है।

बैनर

रोल-अप, प्रदर्शनी और बाहरी बैनर - दूरी जो आकार माँगती है, वह ऊँचाई जो चलती है, और mesh व हवा स्कैन क्यों तोड़ देते हैं।

गाड़ियाँ

वैन, कार और फ़्लीट ब्रांडिंग - फ़ुटपाथ से कोड को कितना आकार चाहिए, और बॉडी का वह हिस्सा कौन-सा है जहाँ वह रिवेट, जोड़ और सड़क की धूल झेल जाता है।

वीडियो विज्ञापन के QR कोड को तिहाई स्क्रीन चाहिए। उसे कोना मिलता है

वीडियो विज्ञापन के QR कोड को स्क्रीन की ऊँचाई का चौथाई से तिहाई हिस्सा चाहिए, तभी सोफ़े पर बैठा फ़ोन उसे पढ़ पाता है। आपने जो कोड देखे हैं उनमें से लगभग हर एक कोने में बैठा लोगो था, और हमने नापा कि उनका क्या होता है।

KoloQR ही क्यों?

  • वेबसाइट, मेन्यू, Wi-Fi, PDF और विज़िटिंग कार्ड के लिए QR कोड बनाएँ
  • रंग, लोगो और अनोखे आकार अपने हिसाब से चुनें
  • हाई-क्वालिटी PNG और SVG फ़ाइलें डाउनलोड करें
  • प्रिंट और डिजिटल, दोनों के लिए बना
QR कोड बनाएँ
एक सादा काला QR कोड और उसके बगल में वही कोड, ब्रांड रंगों के साथ गोल आकार में नए सिरे से डिज़ाइन किया हुआ