4 ポイント 投稿者 GN⁺ 2023-12-23 | 1件のコメント | WhatsAppで共有
  • Rough.jsは、くっきりしたデジタル図形の代わりに、手で描いたようなスケッチスタイルのグラフィックを作る軽量な JavaScript ライブラリ
  • gzip 圧縮時で 9kB 未満と小さいが、線・曲線・弧・多角形・円・楕円と SVG pathまで扱える
  • 同じ API フローで Canvas と SVG の両方をサポートし、描画対象に応じて rough.canvas() または rough.svg() を選べる
  • 標準の塗りつぶしである hachure のほか、solid, zigzag, cross-hatch, dots, sunburst, dashed, zigzag-line をサポート
  • roughness, bowing, strokeWidth, hachureAngle, hachureGap などのオプションで、線の揺らぎや塗りの密度を調整できる

手描き風図形を描く軽量ライブラリ

  • Rough.jsは、スケッチ風グラフィックを作るための JavaScript ライブラリ
  • ライブラリのサイズは gzip 圧縮時で 9kB 未満
  • 基本図形とパスをあわせてサポート
    • 曲線
    • 多角形
    • 楕円
    • SVG paths
  • 描画先として CanvasSVG の両方を利用可能

インストールと基本的な使い方

  • npm でインストール
npm install --save roughjs
  • コードでは roughjs をインポートして使用
import rough from 'roughjs';
  • Canvas では rough.canvas() でコンテキストを作成して図形を描画
const rc = rough.canvas(document.getElementById('canvas'));

rc.rectangle(10, 10, 200, 200); // x, y, width, height
  • SVG では rough.svg() でノードを作成し、SVG に追加
const rc = rough.svg(svg);

let node = rc.rectangle(10, 10, 200, 200); // x, y, width, height
svg.appendChild(node);
  • 円、楕円、線を描く基本 API も用意されている
rc.circle(80, 120, 50); // centerX, centerY, diameter
rc.ellipse(300, 100, 150, 80); // centerX, centerY, width, height
rc.line(80, 120, 300, 100); // x1, y1, x2, y2

塗りつぶしとスケッチ表現の調整

  • 塗りつぶしは fill と関連オプションで設定
    • fill: 'red' は赤い hachure 塗りつぶしを使用
    • fillWeight で hachure 線の太さを調整
    • hachureAnglehachureGap で hachure の角度と間隔を変更
    • fillStyle: 'solid' で単色塗りつぶしを使用可能
rc.circle(50, 50, 80, { fill: 'red' });
rc.rectangle(120, 15, 80, 80, { fill: 'red' });

rc.circle(50, 150, 80, {
  fill: "rgb(10,150,10)",
  fillWeight: 3
});

rc.rectangle(220, 15, 80, 80, {
  fill: 'red',
  hachureAngle: 60,
  hachureGap: 8
});

rc.rectangle(120, 105, 80, 80, {
  fill: 'rgba(255,0,200,0.2)',
  fillStyle: 'solid'
});
  • 対応する塗りつぶしスタイルhachure, solid, zigzag, cross-hatch, dots, sunburst, dashed, zigzag-line
  • 線の揺らぎや輪郭表現は roughness, bowing, stroke, strokeWidth などのオプションで変更できる
rc.rectangle(15, 15, 80, 80, { roughness: 0.5, fill: 'red' });
rc.rectangle(120, 15, 80, 80, { roughness: 2.8, fill: 'blue' });
rc.rectangle(220, 15, 80, 80, { bowing: 6, stroke: 'green', strokeWidth: 3 });

SVG path と API ドキュメント

  • SVG path 文字列は rc.path() で描画できる
rc.path('M80 80 A 45 45, 0, 0, 0, 125 125 L 125 80 Z', { fill: 'green' });
rc.path('M230 80 A 45 45, 0, 1, 0, 275 125 L 275 80 Z', { fill: 'purple' });
rc.path('M80 230 A 45 45, 0, 0, 1, 125 275 L 125 230 Z', { fill: 'red' });
rc.path('M230 230 A 45 45, 0, 1, 1, 275 275 L 275 230 Z', { fill: 'blue' });

1件のコメント

 
GN⁺ 2023-12-23
Hacker Newsの意見