QR Code ถอดรหัสได้ที่ 1.2:1 แต่อย่าออกแบบให้เข้าใกล้ตัวเลขนั้น

โดยทีม KoloQRงานวิจัย

สติกเกอร์ QR Code ทรงกลมขาวดำบนพื้นหลังสีน้ำเงิน เหนือแถบมุมมนสีฟ้าที่เขียนว่า "Minimum Contrast" และแถบมุมมนสีขาวที่มีจุดสีดำอยู่ข้างค่าเลขฐานสิบหก #000000

ทั้ง Apple และ Google ไม่เคยเผยแพร่เกณฑ์คอนทราสต์ของแอปกล้องที่อ่าน QR Code ส่วนใหญ่ในโลกนี้ ตัวเลขทุกตัวที่ถูกอ้างว่าเป็นขีดจำกัดของ iPhone หรือ Android จึงถูกอ้างมาจากการวัดที่ไม่มีใครเคยเผยแพร่ สิ่งที่อ่านได้จริงคือซอร์สโค้ดของ ZXing ตัวถอดรหัสโอเพนซอร์สที่อยู่เบื้องหลังสิ่งอื่นอีกจำนวนมาก มันทำงานเป็นบล็อกขนาด 8 x 8 พิกเซล และถือว่าบล็อกที่พิกเซลสว่างที่สุดกับเข้มที่สุดต่างกันไม่เกิน 24 ระดับจาก 255 นั้นไม่มีขอบอยู่เลย นั่นคืออัตราส่วนคอนทราสต์ราว 1.24:1 หรือสีเทาจาง ๆ บนพื้นขาวที่แทบมองไม่เห็น ตัวถอดรหัสไม่ใช่ข้อจำกัด กระดาษที่สะท้อนแสง 85% แทนที่จะเป็น 100% หมึกที่แผ่ออก แสงจ้าที่ยกระดับสีดำขึ้น และความเบลอจากการขยับครึ่งมิลลิเมตรต่างหากคือข้อจำกัด และนั่นคือเหตุผลที่ตัวเลขใช้งานจริงคือ 4:1 บนหน้าจอ และ 7:1 บนงานพิมพ์

ประเด็นสำคัญ

  • ทั้ง Apple และ Google ไม่เคยเผยแพร่เกณฑ์คอนทราสต์ของระบบสแกน QR Code ที่ติดมากับ iOS และ Android ตัวเลขตัวเดียวที่ถูกอ้างว่าเป็นขีดจำกัดของ iPhone หรือ Android จึงไม่ใช่ผลการวัดที่ใครตรวจสอบได้ สิ่งที่ตรวจสอบได้คือซอร์สโค้ดที่เผยแพร่ของ ZXing ตัวถอดรหัสโอเพนซอร์ส และมาตรฐานคุณภาพงานพิมพ์ ISO/IEC 15415
  • ตัวแปลงภาพสองระดับแบบไฮบริดของ ZXing ทำงานบนบล็อกขนาด 8 x 8 พิกเซล และถือว่าบล็อกที่พิกเซลสว่างที่สุดกับเข้มที่สุดต่างกันไม่เกิน 24 ระดับจาก 255 นั้นไม่มีขอบอยู่ เมื่อเทียบกับสีขาว 24 ระดับคือสีเทา #E7E7E7 ซึ่งเป็นอัตราส่วนคอนทราสต์ราว 1.24:1
  • ให้ออกแบบที่ 4:1 สำหรับหน้าจอ และ 7:1 สำหรับงานพิมพ์ และถือว่า 3:1 คือเส้นที่ต่ำกว่านั้นแล้วโค้ดไม่ควรถูกส่งออกไป ช่องว่างระหว่าง 1.24:1 กับ 7:1 ไม่ใช่ความเชื่องมงาย มันคือกระดาษ แสงแวดล้อม แสงจ้า และความเบลอ ที่หักออกจากตัวเลขในไฟล์ออกแบบก่อนที่ตัวถอดรหัสจะได้เห็นอะไรเลย
  • อัตราส่วนคอนทราสต์ไม่ใช่สิ่งที่กล้องวัด อัตราส่วนให้น้ำหนักสีเขียวที่ 71% ของความสว่างที่รับรู้ได้ และบวกพจน์แสงฟุ้งเข้าไปด้วย ส่วนช่องความสว่างของกล้องให้น้ำหนักสีเขียวที่ 59% และไม่บวกอะไรเลย ทั้งสองค่าต่างกันมากที่สุดกับสีแดง เขียว และน้ำเงินที่อิ่มตัว โดยอัตราส่วนเป็นฝ่ายที่เข้มงวดกว่า
  • ความเบลอกับคอนทราสต์ต่ำคูณกันแทนที่จะบวกกัน เพราะความเบลอเฉลี่ยค่าพิกเซลข้างเคียงเข้าด้วยกัน จึงลดช่วงห่างระหว่างจุดสว่างที่สุดกับเข้มที่สุดในแต่ละบล็อก ซึ่งเป็นปริมาณเดียวกับที่ตัวแปลงภาพสองระดับใช้ตั้งเกณฑ์พอดี โค้ดที่รอดที่ 3:1 ในภาพนิ่งจะไม่รอดที่ 3:1 ในมือที่กำลังขยับ

ไม่มีใครเผยแพร่ตัวเลขนี้ และนั่นคือจุดตั้งต้น

ไม่มีเกณฑ์คอนทราสต์ที่เผยแพร่ไว้สำหรับระบบสแกน QR Code ที่ติดมากับกล้อง iPhone และ Android การตรวจจับบาร์โค้ดของ Apple อยู่ใน Vision framework ส่วนของ Android อยู่ใน Google Play Services ทั้งคู่ปิดซอร์ส ทั้งคู่ไม่มีเอกสารในประเด็นนี้ และไม่มีฝ่ายใดเคยระบุค่าต่ำสุดไว้ บทความใดที่ระบุตัวเลข ไม่ว่าจะเป็น 3:1, 4:1 หรือ 40% ล้วนอ้างมาจากแนวทางการออกแบบที่เขียนไว้เพื่อเรื่องอื่น หรือไม่ก็ไม่ได้อ้างจากอะไรเลย

เรื่องนี้ควรพูดออกมาตรง ๆ มากกว่าจะเลี่ยงไป เพราะรูปร่างของคำตอบที่ซื่อสัตย์ตามมาจากตรงนี้ มีสามสิ่งที่พิสูจน์ได้โดยไม่ต้องมีห้องทดลองเป็นของตัวเอง คือตัวถอดรหัสโอเพนซอร์สทำอะไร เพราะซอร์สของมันเปิดเผย มาตรฐานคุณภาพงานพิมพ์วัดอะไร เพราะมันคือมาตรฐานที่เผยแพร่แล้ว และโค้ดหนึ่งตัวทำงานอย่างไรบนมือถือเครื่องหนึ่ง เพราะเรื่องนั้นใช้เวลายี่สิบนาทีกับเครื่องพิมพ์หนึ่งเครื่อง เรื่องอื่นทั้งหมดในหัวข้อนี้คือความรู้สึกของใครบางคน

เหตุผลที่คำถามนี้ถูกถามซ้ำไม่จบคือคอนทราสต์เป็นตัวแปรเดียวของ QR Code ที่นักออกแบบควบคุมโดยไม่ได้ตั้งใจ ขนาดโมดูลเป็นการตัดสินใจโดยเจตนา ระดับการแก้ไขข้อผิดพลาดเป็นการตัดสินใจโดยเจตนา แต่สีถูกเลือกไว้เพื่อชุดสีของแบรนด์ตั้งแต่สามปีก่อนที่ใครจะคิดถึง QR Code และโค้ดก็รับสีนั้นมา คำถามที่ใช้ได้จริงจึงไม่ใช่ "ค่าต่ำสุดคือเท่าไร" แต่คือ "ชุดสีนี้เหลือระยะเผื่อให้ฉันเท่าไร" และคำถามนั้นมีคำตอบ

สิ่งที่ตัวถอดรหัสวัดจริง ๆ คือผลต่างเฉพาะที่

ตัวถอดรหัสไม่เคยเปรียบเทียบสีหน้ากับสีพื้นหลังของคุณ มันแปลงเฟรมจากกล้องให้เหลือช่องสีเทาช่องเดียว แล้วตัดสินสำหรับแต่ละกลุ่มพิกเซลเล็ก ๆ ว่าเส้นแบ่งระหว่างเข้มกับสว่างอยู่ตรงไหนในกลุ่มนั้น จากนั้นจึงอ่านโมดูลจากผลลัพธ์ การแปลงเป็นภาพสองระดับคือขั้นตอนที่ตัวถอดรหัสเปลี่ยนภาพถ่ายโทนเทาให้กลายเป็นพิกเซลขาวดำล้วน ก่อนที่มันจะพยายามอ่านโมดูลใด ๆ ทุกอย่างที่เกี่ยวกับความทนทานต่อคอนทราสต์ถูกตัดสินตรงนั้น

ZXing คือตัวถอดรหัสที่ควรค่าแก่การอ่าน เพราะเป็นตัวเดียวที่ใช้งานแพร่หลายและเปิดซอร์สให้เห็น ตัวแปลงภาพสองระดับแบบไฮบริดที่เป็นค่าตั้งต้นของมันแบ่งภาพเป็นบล็อกขนาด 8 x 8 พิกเซล คำนวณพิกเซลสว่างที่สุดและเข้มที่สุดในแต่ละบล็อก แล้วตั้งเกณฑ์ของบล็อกนั้นไว้กึ่งกลางระหว่างสองค่า เมื่อมิติของภาพต่ำกว่า 40 พิกเซล มันจะเลิกใช้วิธีเฉพาะที่แล้วตั้งเกณฑ์กับทั้งภาพในคราวเดียว

ค่าคงที่ที่น่าสนใจคือตัวป้องกันในลูปของบล็อกนั้น ถ้าผลต่างระหว่างพิกเซลสว่างที่สุดกับเข้มที่สุดในบล็อกหนึ่งเท่ากับ 24 หรือน้อยกว่า จาก 255 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 Code แบบทิ้งห่าง สีแดงเข้มและสีบ๊วยเข้มตามมาเป็นลำดับถัดไป สีใดก็ตามที่ได้อัตราส่วนมาจากการเป็นสีเข้มแทนที่จะเป็นสีอิ่มตัวจะทำงานได้ดี เหลือชุดสีแบบไหนให้ใช้ได้บ้าง และเหมาะกับงานตรงไหน อ่านได้ที่ QR Code สี

สีเขียวบริสุทธิ์คือจุดที่สองมาตรวัดต่างกันมากที่สุด และเป็นจุดที่ควรเชื่ออัตราส่วนอยู่ดี ค่า 1.4:1 ของมันดูเหมือนหายนะ ขณะที่ผลต่างความสว่าง 105 นั้นเทียบเท่ากับ 104 ของสีส้ม กล้องจึงเห็นในโค้ดสีเขียวมากกว่าที่อัตราส่วนบอกไว้ แต่ก็ยังไม่พออยู่ดี 105 จาก 255 คือไม่ถึงครึ่งสเกลตั้งแต่ก่อนที่กระดาษ แสง และเลนส์จะมาแบ่งส่วนของตัวเองไป และโค้ดสีเขียวคือกลุ่มที่ใช้ได้ในภาพจำลองอย่างสม่ำเสมอแล้วไปไม่รอดบนชั้นวาง

สีเหลือง ฟ้าน้ำทะเล และเหลืองอำพัน ไม่ผ่านทั้งสองมาตรวัด และไม่มีเทคนิคใดกู้มันได้ สีเหลืองบนพื้นขาวให้ผลต่าง 29 ระดับจาก 255 แก่กล้อง ซึ่งสูงกว่า 24 ที่ ZXing เลิกมองหาขอบเลยอยู่นิดเดียว โค้ดสีเหลืองไม่ใช่โค้ดที่เสี่ยง แต่เป็นวัตถุตกแต่งที่บังเอิญสแกนได้ในสภาพที่สมบูรณ์แบบ

วิธีแก้เมื่อสีแบรนด์ไปไม่ถึงเป้าหมายนั้นเหมือนกันเสมอ และไปในทิศทางเดียวเสมอ คือทำโค้ดให้เข้มขึ้น อย่าทำพื้นหลังให้สว่างขึ้น พื้นหลังต้องอยู่ใกล้สีขาวเพื่อให้ผลต่างการสะท้อนแสงรอดจากงานพิมพ์ และสีแบรนด์ที่ปรับเข้มขึ้นสองหรือสามขั้นมักคงเอกลักษณ์ไว้ได้ขณะที่อัตราส่วนเพิ่มเป็นสองเท่า ถ้ารับไม่ได้ ให้เอาสีแบรนด์ไปไว้ที่กรอบ ป้ายกำกับ และข้อความชวนสแกนรอบโค้ด แล้วปล่อยตัวโค้ดให้เข้มไว้ QR Code ที่ทำแบรนด์ ส่วนใหญ่คือแบบนี้ และมันไม่กินคอนทราสต์เลยแม้แต่น้อย

โมดูลสว่างบนพื้นหลังเข้มเป็นปัญหาคนละเรื่อง

QR Code แบบกลับสี คือโมดูลสว่างบนพื้นหลังเข้ม อาจมีอัตราส่วนคอนทราสต์สมบูรณ์แบบแต่ก็ยังไม่ผ่านได้ เพราะอัตราส่วนนั้นสมมาตรแต่ตัวถอดรหัสไม่สมมาตร สีขาวบนดำคำนวณได้ 21:1 เท่ากับสีดำบนขาว และไม่มีการตรวจคอนทราสต์ที่ไหนจะเตือนคุณ สิ่งที่ต่างกันคือซอฟต์แวร์ปลายทางยอมลองอ่านภาพทั้งสองทิศทางหรือไม่

แอปกล้องของ iPhone และ Android ในปัจจุบันโดยทั่วไปรับมือกับโค้ดกลับสีได้ และเรื่องนี้ดีขึ้นเรื่อย ๆ ฮาร์ดแวร์รุ่นเก่าคือจุดที่มันพัง เครื่องอ่านภาพแบบติดตั้งอยู่กับที่ เครื่องสแกนหน้าร้าน และอุปกรณ์ในคลังสินค้า มักคาดหวังข้อมูลสีเข้มบนพื้นหลังสว่างและไม่มีรอบการกลับสี ส่วนตัว ZXing เองจะกลับสีก็ต่อเมื่อแอปพลิเคชันที่เรียกใช้ห่อภาพไว้ด้วยแหล่งความสว่างแบบกลับค่าที่มันเตรียมไว้ให้ ซึ่งเป็นการตัดสินใจของคนที่สร้างแอป ไม่ใช่ของตัวโค้ด

กฎที่ใช้ได้จริงคือการกลับสีเป็นการเดิมพันกับเครื่องอ่าน ไม่ใช่คุณสมบัติของตัวโค้ด สำหรับโปสเตอร์ หน้าจอ หรือโพสต์โซเชียลที่คนอ่านด้วยมือถือ โค้ดกลับสีคือทางเลือกด้านดีไซน์ที่สมเหตุสมผล แต่สำหรับอะไรก็ตามที่ลูกค้าอาจสแกนด้วยอุปกรณ์ที่ไม่รู้จัก หรืออะไรก็ตามที่ถูกอ่านที่จุดชำระเงิน มันคือการโยนหัวก้อยเพื่อความสวยงาม และเวอร์ชันที่ปลอดภัย คือโค้ดสีเข้มในแผงสีสว่างวางบนพื้นหลังเข้ม ใช้สี่เหลี่ยมเพิ่มแค่รูปเดียว

ยังมีความไม่สมมาตรอีกข้อที่ควรเอ่ยชื่อไว้ เพราะมันมองไม่เห็นบนจอ การพิมพ์โค้ดสว่างบนพื้นหลังเข้มหมายถึงการลงพื้นที่ทึบสีเข้มขนาดใหญ่ และการลงหมึกทึบแผ่ออกมากกว่าการลงหมึกแบบกระจาย โมดูลสว่างคือฝ่ายที่หดลง และมันคือฝ่ายที่ตัวถอดรหัสกำลังอ่านเป็นครึ่งสว่างของคู่สี โค้ดกลับสีจึงเสียคอนทราสต์ในงานพิมพ์มากกว่าโค้ดตัวเดียวกันที่วางตามปกติ

สิ่งที่มาตรฐานงานพิมพ์วัดแทนที่จะวัดอัตราส่วน

โลกของ QR Code มีมาตรวัดคอนทราสต์ของตัวเอง และมันไม่ใช่อัตราส่วน คอนทราสต์ของสัญลักษณ์คือมาตรวัดคุณภาพงานพิมพ์ที่ ISO/IEC 15415 นิยามไว้ว่าเป็นผลต่างของการสะท้อนแสงระหว่างจุดที่สว่างที่สุดกับจุดที่เข้มที่สุดในสัญลักษณ์หนึ่ง มันแสดงเป็นจุดเปอร์เซ็นต์และให้เกรดตั้งแต่ A ลงไปถึง F เครื่องตรวจสอบจะรายงานค่านี้ควบคู่กับมอดูเลชัน ความเสียหายของรูปแบบตายตัว ความไม่สม่ำเสมอของตาราง และการแก้ไขข้อผิดพลาดที่ไม่ได้ใช้ โดยเกรดรวมของสัญลักษณ์คือค่าที่แย่ที่สุดในบรรดานั้น

ความแตกต่างนี้สำคัญ เพราะผลต่างการสะท้อนแสงกับอัตราส่วนคอนทราสต์ไม่ใช่ภาพสองแบบของสิ่งเดียวกันที่แปลงไปมาได้ การสะท้อนแสงคือแสงเชิงเส้น ส่วนอัตราส่วนคอนทราสต์ใส่เส้นโค้งแกมมาและพจน์แสงฟุ้งทับลงไป ลองคำนวณดูแล้วจะเห็นว่าค่าต่างกันมาก ผลต่างการสะท้อนแสง 40% ซึ่งเป็นระดับที่ข้อกำหนดในธุรกิจค้าปลีกมักเรียกร้อง เทียบกับสีขาวอุดมคติแล้วตรงกับอัตราส่วนคอนทราสต์ราว 1.6:1 และผลต่าง 70% ตรงกับราว 3:1 คู่สีที่เครื่องตรวจการเข้าถึงเว็บปฏิเสธทันทีจึงเป็นบาร์โค้ดที่ผ่านมาตรฐานอย่างสมบูรณ์ได้

นั่นไม่ใช่ใบอนุญาตให้ออกแบบที่ 3:1 แต่เป็นคำอธิบายว่าทำไมสองอุตสาหกรรมนี้ถึงเห็นไม่ตรงกัน เครื่องตรวจสอบวัดตัวอย่างที่พิมพ์แล้วภายใต้แสงที่ควบคุมได้ ที่ระยะคงที่ โดยสัญลักษณ์เต็มช่องรับแสง ส่วนอัตราส่วนของนักออกแบบต้องรอดจากมือถือที่อยู่ในกระเป๋า มาตรฐานกำลังวัดตัวชิ้นงาน ส่วนอัตราส่วนถูกใช้เป็นตัวแทนของทั้งห่วงโซ่

กับดักที่อยู่ในมาตรฐานคือแสงที่มันใช้ การตรวจสอบบาร์โค้ดทำภายใต้แสงสีแดงที่ 660 นาโนเมตร ซึ่งเป็นความยาวคลื่นที่เครื่องสแกนเลเซอร์ยุคแรกใช้และเครื่องตรวจสอบสมัยใหม่ยังจำลองอยู่ เกรดของสัญลักษณ์ถูกอ้างพร้อมค่านี้ อย่างเช่น 4.0/20/660 หมึกสีแดงสะท้อนแสงสีแดง โค้ดสีแดงบนกระดาษขาวจึงแทบไม่มีคอนทราสต์เลยที่ 660 nm และได้เกรดว่าอ่านไม่ได้ ทั้งที่สแกนผ่านฉลุยบนมือถือทุกเครื่อง นี่คือเหตุผลเฉพาะเจาะจงที่ QR Code สีแดงผ่านทุกการตรวจที่นักออกแบบทำ แล้วไปไม่รอดที่จุดชำระเงินหรือบนเครื่องอ่านภาพในคลังสินค้า

กฎที่ตกผลึกออกมาคือ อะไรก็ตามที่ถูกอ่านด้วยอุปกรณ์ติดตั้งอยู่กับที่แทนที่จะเป็นลูกค้า ควรเป็นสีดำบนพื้นขาว ในขนาดที่คู่มือของอุปกรณ์นั้นกำหนด และควรผ่านการตรวจสอบด้วยเครื่องแทนที่จะกะด้วยสายตา ส่วนอะไรก็ตามที่ถูกอ่านด้วยมือถือมีปริภูมิสีทั้งหมดให้ใช้ หักด้วยส่วนที่ตารางข้างบนตัดออกไป

ตัวเลขที่ควรยึดเป็นเป้าหมายในการออกแบบ

ตั้งเป้าอัตราส่วนคอนทราสต์อย่างน้อย 7:1 สำหรับงานพิมพ์ อย่างน้อย 4:1 สำหรับอะไรก็ตามที่แสดงบนหน้าจอ และถือว่า 3:1 คือจุดที่ต่ำกว่านั้นแล้วโค้ดไม่ควรถูกส่งออกไป ไม่ว่ามันจะดูดีแค่ไหนในภาพจำลอง ตัวเลขเหล่านั้นคือเป้าหมายการออกแบบที่รวมความสูญเสียจากหัวข้อก่อนหน้าเข้าไปแล้ว ไม่ใช่เกณฑ์ที่ใครวัดได้จากมือถือ

  • งานพิมพ์ในสภาพที่ควบคุมไม่ได้ ทั้งเมนู บรรจุภัณฑ์ ป้าย และสติกเกอร์ 7:1 ขึ้นไป สีดำหรือเกือบดำบนพื้นขาวคือ 21:1 และไม่มีต้นทุนอะไรเลย ช่องว่างระหว่าง 21:1 กับ 7:1 คือที่ที่สีแบรนด์ใส่ลงไปได้
  • งานพิมพ์บนวัสดุที่ดูดซับหรือจัดการยาก ทั้งกระดาษคราฟท์ กระดาษหนังสือพิมพ์ ใบเสร็จ ผ้า และพื้นผิวสลัก อย่าใช้จ่ายคอนทราสต์เลย ใช้สีดำบนพื้นหลังที่สว่างที่สุดที่มี แล้วเอางบไปลงที่ขนาดโมดูลแทน
  • หน้าจอ ทั้งเว็บไซต์ งานนำเสนอ หน้าจอแอป และวิดีโอ 4:1 ขึ้นไป บนความเข้าใจว่าความสว่างของเครื่องผู้ชมและแสงแวดล้อมอยู่นอกเหนือการควบคุมของคุณ
  • อะไรก็ตามที่ถูกอ่านด้วยเครื่องสแกนติดตั้งอยู่กับที่ หรืออยู่ใต้ข้อกำหนดเฉพาะ สีดำบนพื้นขาว และผ่านการตรวจสอบด้วยเครื่อง สีคือความเสี่ยงที่ไม่มีข้อดีตอบแทนในกรณีนี้ และสีแดงคือความเสี่ยงที่มีรูปแบบความล้มเหลวเฉพาะตัว
  • ต่ำกว่า 3:1 อย่าส่งออกไป มันไม่ใช่โค้ดคาบเส้นที่มือถือบางรุ่นพอไหว แต่เป็นโค้ดที่ระยะเผื่อทั้งหมดถูกใช้หมดไปตั้งแต่ก่อนเลือกกระดาษ

มีการตรวจอย่างหนึ่งที่ลืมง่าย คือเครื่องหมายมุมทั้งสามก็นับด้วย เครื่องสแกนหาตำแหน่ง QR Code จากรูปแบบระบุตำแหน่งก่อนที่จะถอดรหัสอะไร โค้ดที่โมดูลเป็นสีเข้มแต่มุมถูกใส่สีเน้นอ่อน ๆ จึงมีคอนทราสต์ที่อ่อนที่สุดอยู่ตรงจุดที่ความล้มเหลวกู้คืนไม่ได้พอดี ไม่ว่าคุณใช้เครื่องมือใด ให้ประเมินสีของมุมเทียบกับพื้นหลังแยกต่างหาก แล้วเอาค่าที่แย่กว่าในสองค่านั้นเป็นคอนทราสต์จริงของโค้ด

KoloQR ซึ่งเป็นเครื่องมือสร้าง QR Code ฟรีที่ทำ QR Code ทรงกลมและรูปทรงกำหนดเองได้ คำนวณคู่นั้นให้อัตโนมัติ แถบข้างภาพตัวอย่างรายงานอัตราส่วนคอนทราสต์ของสีลวดลายและสีมุมเทียบกับพื้นหลัง แสดงค่าที่แย่กว่า และผ่านที่ 4:1 มันตัดสินพื้นหลังโปร่งใสว่าเป็นสีขาว เพราะนั่นคือที่ที่โค้ดโปร่งใสมักไปตกอยู่ คุณตั้งบันไดคอนทราสต์ในเครื่องมือได้ด้วยการส่งออกเพย์โหลดเดียวกันที่สีเทาทั้งแปดค่าข้างบน แล้วพิมพ์ลงกระดาษแผ่นเดียว

ข้อจำกัดที่ซื่อสัตย์ของทุกอย่างในบทความนี้คือ ไม่มีตัวเลขใดรับประกันการสแกนบนฮาร์ดแวร์ที่เราไม่ได้ทดสอบ และเราตั้งใจไม่เผยแพร่ตัวเลขสำหรับมือถือรุ่นใดรุ่นหนึ่ง เพราะเราไม่ได้วัดมันมา บันไดคอนทราสต์มีอยู่เพื่อให้คุณทำเองได้ ยี่สิบนาทีกับกระดาษหนึ่งแผ่นให้ตัวเลขที่เป็นจริงสำหรับงานของคุณ ซึ่งมีค่ามากกว่าตัวเลขใด ๆ ในบทความนี้

เมื่อคอนทราสต์ไม่ใช่ต้นเหตุของปัญหาจริง ๆ

QR Code ส่วนใหญ่ที่ถูกโทษว่าเป็นเรื่องคอนทราสต์นั้นล้มเหลวด้วยเหตุผลอื่นสี่ข้อ และการเพิ่มคอนทราสต์ให้ข้อใดข้อหนึ่งก็ไม่เปลี่ยนอะไรเลย การไล่รายการนี้ก่อนเร็วกว่าการทำการทดสอบบันได เพราะสามในสี่ข้อมองเห็นได้โดยไม่ต้องใช้มือถือ

  • โค้ดเล็กเกินไปสำหรับระยะที่ใช้ ต่ำกว่าราว 0.4 มม. ต่อโมดูลในงานพิมพ์ กล้องมือถือจะเริ่มลำบากไม่ว่าสีจะเป็นอย่างไร ให้วัดหนึ่งโมดูลก่อนจะไปปรับอย่างอื่น
  • โซนเงียบถูกตัดออก ISO/IEC 18004 กำหนดขอบว่างสี่โมดูลรอบสัญลักษณ์ และการที่นักออกแบบยึดพื้นที่นั้นคืนไปใช้จัดหน้าคือหนึ่งในสาเหตุที่พบบ่อยที่สุดของโค้ดที่ถ่ายรูปออกมาสวยงามแต่ถอดรหัสไม่ได้เลย
  • ภาพถูกบันทึกเป็น JPEG ที่ขั้นตอนใดขั้นตอนหนึ่ง การบีบอัดแบบ JPEG ทิ้งวงแหวนจาง ๆ ไว้รอบทุกโมดูล ซึ่งลดผลต่างเฉพาะที่ในบล็อกเดียวกับที่ตัวแปลงภาพสองระดับวัดพอดี มันดูเหมือนปัญหาคอนทราสต์ แต่มันคือปัญหารูปแบบไฟล์
  • แสงจ้า การเคลือบเงาหรือหน้าจอที่สะท้อนไฟเพดานไม่ได้ลดคอนทราสต์ในไฟล์ออกแบบเลย มันเพิ่มหย่อมสว่างทับลงบนส่วนหนึ่งของสัญลักษณ์ แล้วบล็อกที่อยู่ใต้หย่อมนั้นก็สูญเสียผลต่างไป ขณะที่โค้ดส่วนที่เหลือยังปกติดี การเอียงมือถือแก้ได้ ซึ่งนั่นแหละคือสัญญาณบ่งชี้

การแก้ไขข้อผิดพลาดก็อยู่ในรายการนี้ด้วย ในความหมายเชิงลบ การเพิ่มระดับจาก M เป็น H ไม่ช่วยโค้ดที่คอนทราสต์ต่ำ เพราะการแก้ไขข้อผิดพลาดซ่อมโมดูลที่ตัวถอดรหัสอ่านผิด ส่วนคอนทราสต์ต่ำทำให้ตัวถอดรหัสอ่านสัญลักษณ์ไม่ได้ตั้งแต่แรก การชั่งน้ำหนักระหว่างความสามารถกู้คืนกับขนาดโมดูล เป็นการตัดสินใจที่มีอยู่จริง แต่มันไม่ใช่คันโยกสำหรับปัญหานี้ คันโยกสำหรับปัญหานี้คือสีหน้าที่เข้มขึ้น พื้นหลังที่สว่างขึ้น หรือโค้ดที่ใหญ่ขึ้น

ความล้มเหลวที่เกี่ยวข้องกันซึ่งควรรู้ไว้ เพราะการตกแต่งกับคอนทราสต์เบิกจากงบก้อนเดียวกัน คือรูปทรงโมดูลตกแต่งลงหมึกในแต่ละเซลล์น้อยกว่าโมดูลสี่เหลี่ยม ซึ่งลดผลต่างเฉพาะที่ที่ตัวแปลงภาพสองระดับวัด ในแบบเดียวกับที่คอนทราสต์ต่ำทำ ต้นทุนที่แท้จริงของรูปทรง QR Code กำหนดเอง ไล่การคำนวณชุดนั้นให้ดู และผลสองอย่างนี้ทบกัน โค้ดที่ตกแต่งแล้วใช้สีแบรนด์อ่อน ๆ คือการเบิกสองครั้งจากงบก้อนเดียว

สร้าง QR Code ของคุณ

ฟรี ไม่ต้องสมัครบัญชี ไม่มีลายน้ำ เลือกรูปทรง ใส่โลโก้ ตรวจคอนทราสต์ แล้วส่งออกเป็น SVG, PDF, EPS หรือ PNG ได้ โค้ดแบบสแตติกที่ไม่มีค่าสมัครสมาชิกอยู่เบื้องหลัง

สร้าง QR Code

Questions? Answered

ในฐานะเป้าหมายการออกแบบ คือ 7:1 สำหรับงานพิมพ์และ 4:1 สำหรับหน้าจอ โดยมี 3:1 เป็นเส้นที่ต่ำกว่านั้นแล้วโค้ดไม่ควรถูกส่งออกไป ขีดต่ำสุดของตัวถอดรหัสเองอยู่ต่ำกว่านั้นมาก ZXing เลิกตรวจจับขอบเมื่อพิกเซลสว่างที่สุดกับเข้มที่สุดในบล็อกต่างกัน 24 จาก 255 หรือราว 1.24:1 แต่ขีดนั้นใช้กับภาพดิจิทัลที่สะอาด ไม่ใช่กับหมึกบนกระดาษใต้แสงไฟในร้าน

ทั้ง Apple และ Google ไม่เคยเผยแพร่เกณฑ์ไว้ ตัวเลขเฉพาะเจาะจงที่คุณเห็นถูกอ้างถึงจึงไม่ใช่ผลการวัดที่ใครตรวจสอบได้ ตัวถอดรหัสทั้งสองปิดซอร์ส จุดอ้างอิงเดียวที่อ่านได้คือ ZXing ซึ่งยอมแพ้ที่ราว 1.24:1 บนภาพที่สะอาด และคำตอบที่ใช้ได้จริงสำหรับงานจริงคือพิมพ์บันไดของระดับคอนทราสต์ที่ไล่ลง แล้วหาจุดที่ชุดของวัสดุ แสง และมือถือของคุณเองไปไม่รอด

เพราะหน้าจอส่งมอบคอนทราสต์ตามไฟล์ออกแบบ แต่กระดาษไม่ได้ทำแบบนั้น กระดาษขาวสะท้อนแสง 80 ถึง 90% แทนที่จะเป็น 100% หมึกแผ่เข้าไปในเซลล์สว่างข้างโมดูลเข้มแต่ละตัว และผิวมันวาวหรือแสงแวดล้อมก็เติมม่านสว่างคลุมทั้งสองฝั่ง คู่สีที่คำนวณได้ 3:1 ในไฟล์ออกแบบจึงอาจไปถึงกล้องในสภาพที่ใกล้ 2:1 ให้ทดสอบบนวัสดุจริงในขนาดจริง อย่าทดสอบบนจอ

โดยทั่วไปได้ ถ้าสีนั้นเป็นสีเข้มไม่ใช่แค่สีอิ่มตัว สีน้ำเงินเข้ม สีกรมท่า และสีแดงเข้ม ล้วนผ่าน 7:1 เทียบกับพื้นขาวและทำงานได้ดีบนกล้อง ส่วนสีส้ม เหลืองอำพัน ฟ้าน้ำทะเล และเหลือง ไม่ผ่าน และไม่มีระดับการแก้ไขข้อผิดพลาดใดกู้มันได้ เมื่อสีแบรนด์ไปไม่ถึง ให้ทำโค้ดให้เข้มขึ้นแทนที่จะทำพื้นหลังให้สว่างขึ้น หรือคงโค้ดไว้ให้เข้มแล้วเอาสีแบรนด์ไปไว้ที่กรอบรอบโค้ด

บนมือถือปัจจุบันโดยทั่วไปได้ บนเครื่องสแกนรุ่นเก่าหรือแบบติดตั้งอยู่กับที่มักไม่ได้ อัตราส่วนคอนทราสต์เป็นค่าสมมาตร สีขาวบนดำจึงคำนวณได้ 21:1 เท่ากับสีดำบนขาว และไม่มีการตรวจคอนทราสต์ใดจะเตือนคุณ สิ่งที่ต่างกันคือเครื่องอ่านลองกลับภาพหรือไม่ โค้ดกลับสียังเสียคอนทราสต์ในงานพิมพ์มากกว่าด้วย เพราะพื้นทึบสีเข้มแผ่เข้าไปในโมดูลสว่าง ให้ใช้มันเฉพาะที่ที่มือถือเป็นเครื่องอ่านเพียงอย่างเดียว

ไล่ระดับสีมักรอด ส่วนภาพถ่ายมักไม่รอด และเหตุผลคือตัวถอดรหัสตั้งเกณฑ์แบบเฉพาะที่ ZXing คำนวณเส้นแบ่งสว่าง-เข้มแยกกันสำหรับแต่ละบล็อกขนาด 8 x 8 พิกเซล พื้นหลังที่เปลี่ยนอย่างช้า ๆ จึงรักษาผลต่างเฉพาะที่ไว้ครบทุกจุด ส่วนภาพถ่ายเปลี่ยนเร็วกว่าตัวโค้ด ที่ใดที่หนึ่งบนสัญลักษณ์โมดูลจึงไปตกอยู่ผิดฝั่งของเกณฑ์ในบล็อกของตัวเอง

เพราะเครื่องตรวจสอบบาร์โค้ดและเครื่องสแกนแบบติดตั้งอยู่กับที่จำนวนมากอ่านภายใต้แสงสีแดงที่ 660 นาโนเมตร และหมึกสีแดงสะท้อนแสงสีแดง โค้ดสีแดงบนกระดาษขาวจึงแทบไม่มีคอนทราสต์เลยที่ความยาวคลื่นนั้น ทั้งที่กล้องสีมองเห็นมันชัดเจน นี่เป็นกับดักที่รู้จักกันดีมาจากโลกของบาร์โค้ดหนึ่งมิติ และใช้กับ QR Code ได้แบบไม่ต้องเปลี่ยนอะไร อะไรก็ตามที่ถูกสแกนด้วยอุปกรณ์ติดตั้งอยู่กับที่ควรเป็นสีดำบนพื้นขาว

ไม่คุ้มบนพื้นขาว สีเหลืองบนพื้นขาวให้ผลต่างความสว่าง 29 ระดับจาก 255 แก่กล้อง ซึ่งสูงกว่า 24 ที่ ZXing เลิกมองหาขอบเลยอยู่นิดเดียว และให้อัตราส่วนคอนทราสต์ 1.07:1 ส่วนสีพาสเทลดีกว่านั้นเพียงเล็กน้อย ถ้าชุดสีอ่อนคือข้อกำหนด ให้พลิกปัญหากลับด้าน โค้ดสีเข้มในแผงสีอ่อนรักษาทั้งชุดสีและคอนทราสต์ไว้ได้

ไม่ได้ และนี่คือวิธีแก้ที่ผิดซึ่งพบบ่อยที่สุด การแก้ไขข้อผิดพลาดซ่อมโมดูลที่ถูกอ่านผิด ส่วนคอนทราสต์ต่ำทำให้สัญลักษณ์ถูกอ่านไม่ได้เลย เพราะการแปลงเป็นภาพสองระดับเกิดขึ้นก่อนที่จะมีข้อมูลใดให้ซ่อม การเพิ่มระดับจาก M เป็น H ยังทำให้สัญลักษณ์แน่นขึ้นที่ความกว้างพิมพ์เท่าเดิม ซึ่งย่อทุกโมดูลลงและทำให้โค้ดคาบเส้นแย่ลงแทนที่จะดีขึ้น

มากกว่า ในความหมายที่ว่าความล้มเหลวตรงนั้นกู้คืนไม่ได้ เครื่องสแกนหาตำแหน่ง QR Code จากเครื่องหมายมุมทั้งสามก่อนที่จะถอดรหัสอะไร มุมสีอ่อนบนโค้ดสีเข้มจึงวางคอนทราสต์ที่อ่อนที่สุดไว้ตรงจุดที่การแก้ไขข้อผิดพลาดเอื้อมไม่ถึงพอดี ให้ประเมินสีของมุมเทียบกับพื้นหลังแยกต่างหาก แล้วถือว่าค่าที่แย่กว่าในสองค่านั้นคือคอนทราสต์จริงของโค้ด

สำรวจต่อ

หน้าที่ต่อจากหน้านี้ - บริบทเดียวกัน โค้ดชนิดเดียวกัน หรือสิ่งที่ต้องตัดสินใจต่อไป

ร้านค้าปลีก

ข้อมูลสินค้า สต๊อก และลิงก์รีวิว บนป้ายบนชั้น กระจกหน้าร้าน และป้ายที่แคชเชียร์

เอเจนซีอีเวนต์

โค้ดที่ผลิตให้อีเวนต์ของคนอื่น ทั้งรีไดเรกต์ของลูกค้า เอกสารสเปกสำหรับผู้ออกบูธ การพิมพ์บัตรประจำตัว และป้ายที่กำหนดขนาดตามห้องจริง

QR Code สี

ใส่พาเลตของคุณลงใน QR Code โดยไม่ทำให้มันพัง สีไหนควรอยู่บนลวดลาย และสีไหนควรอยู่ที่กรอบ

แบนเนอร์

โรลอัพ แบ็กดรอปงานแสดงสินค้าและแบนเนอร์กลางแจ้ง - ขนาดที่ระยะเรียกร้อง ความสูงที่ใช้ได้ และเหตุผลที่วัสดุเมชกับลมทำให้สแกนไม่ติด

ยานพาหนะ

รถตู้ รถยนต์ และรถของบริษัท - ขนาดที่โค้ดต้องมีเมื่อมองจากทางเท้า และตำแหน่งบนตัวถังที่โค้ดจะรอดจากหมุดย้ำ ร่องประตู และคราบถนน

คิวอาร์โค้ดในโฆษณาวิดีโอต้องกินพื้นที่หนึ่งในสามของจอ แต่ได้แค่มุมจอ

คิวอาร์โค้ดในโฆษณาวิดีโอต้องสูงหนึ่งในสี่ถึงหนึ่งในสามของจอ มือถือบนโซฟาจึงจะอ่านได้ เกือบทุกอันที่คุณเคยเห็นเป็นแค่โลโก้ตรงมุมจอ และเราวัดแล้วว่าโค้ดแบบนั้นลงเอยอย่างไร

ทำไมต้อง KoloQR?

  • สร้าง QR Code สำหรับเว็บไซต์ เมนู Wi-Fi ไฟล์ PDF และนามบัตร
  • ปรับแต่งสี โลโก้ และรูปทรงที่ไม่เหมือนใคร
  • ดาวน์โหลดไฟล์ PNG และ SVG คุณภาพสูง
  • ออกแบบมาเพื่อทั้งงานพิมพ์และงานดิจิทัล
สร้าง QR Code
QR Code สีดำธรรมดาวางข้าง QR Code เดียวกันที่ออกแบบใหม่เป็นทรงกลมด้วยสีของแบรนด์