QRコードを JPG にすると何が起きるか
PNG は各モジュールを正確な色の値として書き込みます。JPEG はまったく違う扱いをします。画像を 8×8 のブロックに分け、各ブロックを周波数係数へ変換したうえで、エンコーダーが「目立たない」と判断した係数を捨ててしまうのです。写真ではこのトレードオフは目立ちません。しかし黒と白の急な縁だけでできているコードでは、捨てられる情報がそのまま縁になります。
QRコードを壊す3つの性質
色度のサブサンプリング。 多くのエンコーダーは輝度は全解像度で保ち、色度を半分または4分の1の解像度で保存します(4:2:0 や 4:2:2 モード)。モジュールの形は輝度が担っているので、設定が適切なら JPEG でも持ちこたえます。品質を下げていくと色面が隣のモジュールへ横方向に滲み、低品質のコードに見える淡い色縁が発生します。
急な縁のリンギング。 黒から白への急峻な立ち上がりは量子化のときに両側でオーバーシュートし、全モジュールの周囲に薄い同心円状の帯を残します。品質 0.9 では背景より数グレースケール高い程度ですが、0.5 では1行目の黒モジュールを2つと誤読するほど幅を持ちます。
透明非対応。 JPEG は alpha チャンネルを持たないので、描画していない領域は実色になり、どの色かは記録されません。このページで背景を白に固定し、選択肢として出していない理由がそれです。暗いウェブページに QRコード JPG を置いても白い枠が残るのも同じ理由です。
読めるかどうかを決める数値
圧縮の前に、書き出し幅を総マス数で割ってください。総マス数はモジュール数に余白の2倍を足した値です。バージョン3に余白4モジュールなら 29 + 8 = 37 マス。幅 900 画素なら1マスあたり 24 画素あり、圧縮余地は十分です。111 画素ではちょうど 3 画素になり、品質 0.85 未満ではスキャン失敗が出始めます。プレビュー下の表示がこの数値をそのままの値で示します。
- 1モジュールあたり 2 画素未満:画面でも読めず、カメラでは安定的に失敗します。
- 3〜4 画素:画面とフラットベッドでは読めますが、スマホカメラでは不安定です。
- 5〜8 画素:印刷物を通常の距離からスキャンできます。
- 10 画素以上:プラットフォームが再度圧縮する SNS でも安全です。
QRコード画像に PNG・JPG・SVG のどれを選ぶか
後で拡大・縮小したり色を変えたり、透明背景に載せたりするなら PNG。書き込み先が写真形式しか受け付けない場合、メールを経由する場合、そもそも固定の白背景なら JPG。サイズが確定していない印刷物なら SVG を選んでください。
| 形式 | 非可逆か | 透明か | 向いている用途 | 主なリスク |
|---|---|---|---|---|
| PNG | いいえ | はい | 画面、アプリへのアップロード、後で加工する画像 | 3つの形式の中で最も重い |
| JPG / JPEG | はい | いいえ | メールの署名、白背景のウェブページ、PNG を拒否するフォーム | 品質を下げるとモジュールの縁が甘くなる |
| SVG | ベクターで可逆 | はい | 印刷、HTML への埋め込み、ロゴ | スマホのスキャンアプリが直接開けないことが多い |
実際に崩れない組み合わせ
生成からカメラで読み取るまでの往復に耐える設定です。長さはおおむね実際に入力される内容に合わせています。規則ではなく出発点なので、プレビューが1モジュールあたり 5 画素未満なら幅を足してください。
| 使い先 | 幅 | 品質 | 復元レベル | 補足 |
|---|---|---|---|---|
| メールフッターのリンク | 600 px | 0.90 | M | メールクライアントが縮小するので余裕を残す |
| 自サイトのページ | 900 px | 0.92 | M | レティナでくっきり、短い内容なら 10 KB 未満 |
| Instagram・LinkedIn の投稿 | 1200 px | 0.95 | Q | SNS がアップロード時に再圧縮する |
| A5 チラシ 300 dpi | 1500 px | 0.95 | M | 約 4 cm 角で印刷しても余裕あり |
| ポスター・バナー | 2000 px | 1.00 | L | 遠目に見るので密度よりモジュールサイズが重要 |
| クエリ文字列が長い URL | 1600 px | 0.95 | L | 長い内容はバージョンが上がりモジュールが小さくなる |
一般的な印刷解像度での寸法
印刷解像度は 1インチあたりのドット数なので、画素数を dpi で割ると実寸が出ます。幅 900 画素の QRコード JPG なら、300 dpi のチラシで 3インチ、150 dpi のポスターで 6インチ、大型出力機の一般的な 100 dpi なら 9インチです。逆に印刷から逆算するほうが実用的です。使える寸法をインチで測り、プリンターの dpi を掛けて、その幅かやや上で書き出してください。
印刷で注意が一つ。小さく書き出した JPEG を拡大するのは、すでに非可逆なファイルを再リサンプリングする動作で、プリンター側でさらに量子化されます。必ず最終サイズで書き出してください。2000 画素を超えて拡大必要があるなら、メインの QRコード画像生成器 で SVG ルートを使ってください。