見出し画像

なでしこさんで偽2次元コード作成

今週も、noteに書きたいことを抱えたまま、あっという間に日曜日。
その日曜日も、致命的に頭が悪いので午前中も午後も寝まくり。
Qiitaの記事も書いてなかったから書いて、noteに残された時間はあと約1時間。
今週もまた適当なプログラムを書いて繋ぐしかないか。

(カタカタカタカタ)

実装完了。残り約15分。さあ記事を書こう。

今回やったこと

なでしこで、QRコードっぽい画像を作る。

※QRコードは株式会社デンソーウェーブの登録商標です。

画像
本物のQRコードの例

プログラム

偽2次元コード作成 (プログラム貯蔵庫)

ポイント

パラメータの用意

定数のセルサイズは8。
定数の余白セル数は4。
定数のコードセル数は21。

四角1個あたりのピクセル数、コードのまわりの白い部分の幅 (四角の個数)、コードの一辺で使う四角の個数を設定する。
この余白幅4、コードサイズ21というのは、QRコードの定義上の最小の値である。
なお、コードサイズを大きくすると、考慮したい特徴が増えてしまうので、今回は21とする。

描画用関数の用意

●(セルXのセルYに)目描画とは
  白色に塗色設定。
  [セルサイズ×(セルX-1), セルサイズ×(セルY-1), セルサイズ×9, セルサイズ×9]へ四角描画。
  黒色に塗色設定。
  [セルサイズ×セルX, セルサイズ×セルY, セルサイズ×7, セルサイズ×7]へ四角描画。
  白色に塗色設定。
  [セルサイズ×(セルX+1), セルサイズ×(セルY+1), セルサイズ×5, セルサイズ×5]へ四角描画。
  黒色に塗色設定。
  [セルサイズ×(セルX+2), セルサイズ×(セルY+2), セルサイズ×3, セルサイズ×3]へ四角描画。
ここまで。

●(セルXのセルYに)点描画とは
  [セルサイズ×セルX, セルサイズ×セルY, セルサイズ, セルサイズ]へ四角描画。
ここまで。

QRコードで特徴的な四隅のうち3個に配置されるパターンを描画する関数と、点1個を描画する関数を定義する。
パターンの描画は、共通で使えるよう、余白部分にも描画する仕様である。
黒い部分の左上の座標を、四角単位で指定する。

描画先の用意

DOM親要素の「行揃え」に「中央」をDOMスタイル設定。

定数の画像セル数は余白セル数に2を掛けてコードセル数を足す。
定数の画像ピクセル数は画像セル数にセルサイズを掛ける。
[画像ピクセル数, 画像ピクセル数]のキャンバス作成。
空に線色設定。

描画先となるキャンバスのサイズを計算し、キャンバスを作成する。
また、線を描画しない設定にする。
この設定をしないと、描画時にぼやけたような表示になってしまった。

画像
線を描画しない設定をしない場合の描画例 (開発中)

描画処理の用意と実行

●偽コード作成とは
  # 画像全体を白で塗りつぶす
  白色に塗色設定。
  [0, 0, 画像ピクセル数, 画像ピクセル数]へ四角描画。
  # まずはコードの場所全体にランダムで点を打つ
  黒色に塗色設定。
  Yで余白セル数から(余白セル数+コードセル数-1)まで繰り返す
    Xで余白セル数から(余白セル数+コードセル数-1)まで繰り返す
      もし、2の乱数が0と等しいならば
        XのYに点描画。
      ここまで。
    ここまで。
  ここまで。
  # 特徴的な部分を描画する
  定数の目位置は余白セル数にコードセル数を足して7を引く。
  余白セル数の余白セル数に目描画。
  目位置の余白セル数に目描画。
  余白セル数の目位置に目描画。
  オフセットで1から(コードセル数-16)まで繰り返す
    [白色, 黒色]@(オフセットを2で割った余り)に塗色設定。
    (余白セル数+7+オフセット)の(余白セル数+6)に点描画。
    (余白セル数+6)の(余白セル数+7+オフセット)に点描画。
  ここまで。
ここまで。

偽コード作成。

描画を行う関数を定義し、実行する。
描画は以下の流れで行う。

  1. 画像全体を白で塗る

  2. コード部分全体にランダムに黒い点 (四角) を描画する

  3. 四隅のうち3個に配置されるパターンを描画する

  4. パターン間に点線を描画する

再描画ボタンの設置

改行作成。
「再生成」のボタン作成。
{関数}偽コード作成でそれをクリックした時。

クリックすると描画する関数を呼び出し、別の画像を生成できるボタンを設置する。

まとめ

なでしこさんで、QRコードっぽい画像を生成することができた。
偶然QRコードとして読める画像ができたらラッキー?


いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
なでしこさんで偽2次元コード作成|みけCAT
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1