写真からストリングアート図案を自動生成するWebツールを作った(SVG/番号のみ出力に対応)
こんにちは。<<<名前(例:蛙嘟嘟)>>> です。
最近、写真をアップロードするだけでストリングアート(糸かけアート)の図案を自動生成するWebツール String Art Generator を公開しました。
先日のアップデートで プレビューの鮮明化 と 「番号のみ」エクスポート に対応しました。
デモと使い方
- 画像をアップロード(JPG/PNG)
- 釘の数・線の本数(密度)・直径などを調整
- プレビューを確認(強化済みで見やすい)
- SVG / PDF、または 釘番号のみ(例:1, 140, 248, 20, ...) をエクスポート
👉 ツール本体:String Art Generator
実装メモ(アルゴリズムの概要)
- 円周上に
N本の釘を配置(極座標で等間隔) - 入力画像をグレースケール化し、エッジ/明度に基づく「誤差画像」を用意
- 現在位置から次の釘候補を走査し、「線分を引いたときの誤差減少量」をスコアリング
- 最も誤差を減らす釘を採用して線を追加(貪欲法)
- 一定本数まで反復し、SVG パスとして出力
(「番号のみ」モードではn1 -> n2 -> n3 -> ...をカンマ区切りで出力)
参考:線の重ねがけでコントラストが上がるため、同じ辺を複数回通ることを許容。モアレ等が出る場合は「釘数」「最小角度」「同一点の連続回数」などで調整。
疑似コード(抜粋)
curr = 0
path = [curr]
for i in 1..maxLines:
best = None
bestGain = -INF
for next in 0..N-1 where next != curr:
gain = errorDecreaseIfDraw(curr, next)
if gain > bestGain:
bestGain = gain
best = next
drawLine(curr, best)
curr = best
path.append(curr)
exportAsSVG(path) or exportAsNumbers(path)


