2021年12月21日火曜日

drawingboard.js 超入門

drawingboard.js 超入門

概要

drawingboard.js を使うと HTML だけで簡単にペイント機能が追加できます

環境

  • macOS 11.6.2
  • Chrome 96.0.4664.110
  • drawingboard.js 0.4.2

最小サンプルコード

index.html だけで動作します
サーバなどへのデプロイも不要です

  • vim index.html
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width">
  <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/drawingboard.js/0.4.2/drawingboard.min.js"></script>
  <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/drawingboard.js/0.4.2/drawingboard.min.css">
  <style data-example="2">
  #board1 {
    width: 400px;
    height: 400px;
  }
  </style>
</head>
<body>
  <div class="board" id="board1"></div>
  <script data-example="2">
  var board1 = new DrawingBoard.Board('board1', {
    background: "#000000",
    color: "#ffffff",
    size: 30,
    fillTolerance: 150,
    controls: [
      { Size: { type: "range", min: 12, max: 42 } },
      { Navigation: { back: true, forward: true } },
      'DrawingMode',
      'Color'
    ],
    webStorage: 'local',
    droppable: true
  });
  board1.addControl('Download');
  board1.downloadImg = function() {
    var img = this.getImg();
    img = img.replace("image/png", "image/octet-stream");
    var link = document.createElement('a');
    link.download = "download.png";
    link.href = img;
    link.click();
  };
  </script>
</body>
</html>

ちょっと解説

まず div タグを作成し id を振ります
その id を元に new DrawingBoard.Board でボードを作成します

引数の2つ目でいろいろとオプションを指定できます
特に controls が重要でこれで消しゴムやペン、塗りつぶしなど様々なコントローラを設定できます
コントローラに指定可能な値は全部で4つで「Color」「DrawingMode」「Size」「Navigation」がありそれぞれ更にオプションを指定できます

ダウンロードボタンだけ board1.addControl('Download') で設定します デフォルトだと「ダウンロード」というファイル名でダウンロードされてしまうので拡張しなど指定したい場合は downloadImg 関数をオーバライドすることで指定できます

動作確認

  • open index.html

こんな感じでペイント画面がブラウザで表示されれば OK です

最後に

簡単なペイント機能であれば簡単に追加できそうです

各種コントローラなどのボタンのイベントをハンドリングすれば作成した画像をサーバサイドに保存することもできそうです

ただあまりメンテナンスされていないのでそのうち動かなくなる可能性はありそうです

参考サイト

0 件のコメント:

コメントを投稿