Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
真っ黒なQRコードは本当に作れないのか
Search
1pp0
July 18, 2024
0
90
真っ黒なQRコードは本当に作れないのか
1pp0
July 18, 2024
Tweet
Share
More Decks by 1pp0
See All by 1pp0
もっと真っ黒なQRコードは作れないのか
1pp0
0
150
Placenoteで簡単共有AR
1pp0
0
2k
Featured
See All Featured
KATA
mclloyd
32
14k
GraphQLとの向き合い方2022年版
quramy
49
14k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Visualization
eitanlees
148
16k
The Invisible Side of Design
smashingmag
301
51k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Transcript
真っ黒なQRコードは 本当に作れないのか
1. 「真っ黒」なQRコードの目標 2. QRコードの仕様を確認 3. 「真っ黒」なQRコードを作る方法
最初に理論値を確認
真っ黒なQRコード? QRコードとして読み取れない事は自明
QRコードとして認識するために 白黒が割り当てられているセルがある 灰色の領域にデータ情報が格納される
理論値? QRコードの仕様に則って データが格納されていないため 読み取る事ができない
目標 QRコードの仕様に則って 可能な限り黒セルが多くなるような データ情報の作り方を求める
QRコード生成の仕様を確認
1. 格納データを二進数化して配置 2. マスク処理
格納データの要素 1. バージョン(QRコードのサイズ、1:21x21 ~ 40:177x177) 2. 誤り訂正レベル(L、M、Q、H) 3. マスクパターン参照子(0 ~
7) 4. モード(数字、英数字、バイナリ、漢字) 5. データコード(QRコード化する文字列) 6. 誤り訂正コード 1.格納データを二進数化して配置
各要素が配置される領域 ※ バージョン1(21x21)、数字モード、誤り訂正レベルLの場合) • 範囲内で設定可能 ◦ 誤り訂正レベル ◦ マスクパターン参照子 ◦
モード ◦ 格納文字数 • 自由に設定可能 ◦ データコード • 計算で導出されるため設定不可 ◦ 誤り訂正コード 1.格納データを二進数化して配置
誤り訂正レベル L:01 M:00 Q:11 H:10 1.格納データを二進数化して配置 マスクパターン 参照子(0~7) 0:000 1:001
〜 7:111 01001 → 計算省略 → 000110100001100
モード 数字:0001 英数字:0010 8bitバイト:0100 漢字:1000 1.格納データを二進数化して配置 格納文字数 41(最大) :0000101001 00010000101001
データコード 数字:101202…(41文字) 101 202 … 0001100101 0011001010 … 誤り訂正コード 格納文字列と誤り訂正レベルから算出
1.格納データを二進数化して配置
データコード及び誤り訂正コードを配置しただけでは、QRコードとして の読み取りに支障がでる場合があるため、8種類のマスクパターンを検証 し、その中で最も優れたパターンでマスク処理を行う。 2.マスク処理
2.マスク処理 特徴 評価条件 失点 同色の行/列の隣接 5連続+i 3+i 同色のブロック 2*2 3
ファインダパターン 40 全体に占める黒の割合 50±(5*k)%~50±((5*(k+1))% 10*k -40 -7 -3 マスク処理後の黒セルが99%の場合 k=9 → -90 以上の評価条件により、黒セルの割合が 極端に多くなるような「真っ黒」なQRコードは生成されない
QRコードが真っ黒になるマスクパターンは選択されない QRコードの生成アルゴリズムを改変し マスクパターンを固定して格納データを求めれば良い
格納データの導出 マスクパターン(001) 1100110011 → 819、1100110011 → 819、0011001100 → 204 …
バージョン:1 誤り訂正レベル:L マスクパターン参照子:1 モード:数字 データコード :81981920478081920720481 905120481981905130 真っ黒なQRコード理論値?
バージョン:1:バージョン2以降は「アライメントパターン」が挿入 誤り訂正レベル:L:誤り訂正レベルが低いほど格納可能な文字数が多い マスクパターン参照子:1 モード:数字 パラメータ選定理由 範囲内で設定可能な領域で 最も黒セルが多くなる組み合わせ
多分これが一番黒いと思います。
おまけ
誤り訂正領域等をある程度塗りつぶしても読み取れる
最も良いmaskを選択する処理を改変して固定値を設定