
קודי QR מדופדפים: איך מחביאים תמונה בתוך קוד סורק
המפתח אנדרו טיילור מסביר כיצד פיזור שגיאות ומעבר כפול מאפשרים לקוד QR לשאת דיוקן חד-סיבית ועדיין להיסרק.
קוד QR יכול עדיין להיסרק גם כשתמונה חבויה בתוכו — אם יודעים לכופף את הכללים. אנדרו טיילור, המפתח שמאחורי מחולל קודי ה-QR המדופדפים, פרסם הסבר על הטכניקה שמאחורי הכלי שלו, שהופך קודים רגילים לדיוקנאות חד-סיבית; קוד המקור זמין ב-Codeberg.
האנטומיה של קוד QR
קוד QR הוא רשת של ריבועים המתחלקת לשני חלקים: תבניות התפקוד — הצורות הבולטות שמאפשרות לסורק למצוא את הקוד ולקבוע את כיוונו — ומודולי הנתונים, שבהם נשמרים המידע עצמו ובתים של כותרת. מכיוון שמודולי הנתונים נקראים רק לאחר שהסורק נאחז בתבניות התפקוד, אפשר לשנות אותם — ולכן מותגים מדפיסים קודי QR ייחודיים — אם כי כל שינוי פוגע במעט בעמידות הסריקה.
תמונה בתוך הרעש
דרך אחת, שהודגמה על ידי דייב ריצ'סון בפוסט שטיילור מצטט, היא לכווץ כל מודול: לפצל כל פיקסל לרשת 3×3, לשמור את הסיבית המקודדת בתא האמצעי ולהקדיש את שמונת האחרים לתמונה. התוצאה היא תמונה חד-סיבית ברזולוציה נמוכה, מכוסה ברעש של מלח ופלפל — שהרי פיקסל אחד מכל תשעה עדיין נושא נתונים.
דיפדוף ופיזור שגיאות
גווני ביניים נוצרים בדרך כלל בדיפדוף — למשל בתבנית באייר, שמדמה גוונים אמצעיים באמצעות דוגמת שחמט של שחור ולבן. פיזור שגיאות הולך רחוק יותר: כשפיקסל עובר סף, השגיאה שנוצרת מפוזרת לפיקסלים סמוכים שטרם הוחלט עליהם, כך שכל אזור מתקרב יותר לבהירות האמיתית שלו מאשר בדיפדוף רגיל, והמרקם הפחות סדיר נעים יותר לעין. הדוגמה של טיילור היא עיבוד חד-סיבית בגודל 147×147 של דוד של מיכלאנג'לו באלגוריתם פלויד-שטיינברג.
כדי שמודולי הנתונים לא ינצצו, הוא מריץ את הפיזור פעמיים. במעבר הראשון המודולים מקבלים את צבעיהם המחייבים והשגיאה מפוזרת לשמונה הפיקסלים סביבם — היא יכולה להגיע ל-95% כשפיקסל באזור כהה חייב להיות לבן טהור — והמעבר השני מתנהל כרגיל. לדבריו, דווקא מיסוך השגיאה הראשונה הוא שהופך את התמונה לקריאה.
המחיר: יכולת הסריקה
קיימת פשרה בין מראה לאמינות. קוד שנסרק מהמסך של מחשב נייד בטלפון שלכם עשוי להיכשל בטלפון של זר, מהדפסה בתאורה גרועה. המחולל גם מפיק תמונות זעירות בלי שוליים, בעוד לסורקים נדרש אזור שקט; דפדפנים מטשטשים תמונות מוגדלות אלא אם מוגדר ב-CSS image-rendering. צבע השוליים צריך להתאים לרקע של תבניות האיתור — בדרך כלל לבן, אם כי קודי QR הפוכים זקוקים לשחור.
SiTech — פיתוח אתרים בכוח ה-AI
אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.