前回のハンコ作成ツール開発の中で、非常に汎用性が高いと感じた「基本図形の描画」について、備忘録を兼ねて共有します。
PythonのPillowライブラリを使えば、〇、◎、△、□といった図形を、ミリ単位の精度で、かつ好きな角度と大きさで生成することが可能です。これができると、ハンコ以外にもロゴ作成や図解の自動生成に応用が効きます。
第1章:図形生成の基本コード
まずは、指定したキャンバスに図形を描画するベースとなるコードを紹介します。エンジニアらしく、再利用性を考えて関数化しておきましょう。
from PIL import Image, ImageDraw
def create_shape_canvas(size=(400, 400)):
# 白背景のキャンバスを作成
img = Image.new('RGB', size, (255, 255, 255))
draw = ImageDraw.Draw(img)
return img, draw
# 二重丸(◎)の描画例
img, draw = create_shape_canvas()
# 外側の円
draw.ellipse([50, 50, 350, 350], outline="black", width=3)
# 内側の円
draw.ellipse([100, 100, 300, 300], outline="black", width=2)
img.show()
第2章:角度と大きさを自在に操る
単純な描画だけでなく、「回転」を加えるのがポイントです。Pillowでは一度描画したものを「rotate」させることで、斜めの四角形や多角形も自由自在です。
特に複数の図形をレイヤーのように重ね合わせることで、複雑なパターンも驚くほど簡単に実装できます。こうした「部品」を積み上げていく感覚は、システム設計に通じるものがありますね。
第3章:エンジニアの視点(30の法則的アプローチ)
ブログの進捗管理やデータ分析と同じで、こうした「最小単位のツール」をストックしておくことで、開発スピードは劇的に向上します。
今回は①の図形編ですが、次回予定している「②文字の自由配置」と組み合わせることで、あのハンコツールが完成する仕組みです。
番外編:技術の無駄遣いこそが、大人の特権……のはずが?
今回、図形と文字の重ね合わせを検証していて、ふと恐ろしいことに気がついてしまいました。
このロジックを応用して、複雑な幾何学模様とフォントを配置していけば……かつてノートの隅に描き殴っていた「僕の考えた最強の魔法陣(黒歴史)」が、プログラミングの力で超高精度に召喚できてしまうということに。
50代エンジニアの技術力で、過去の青い情熱を成仏させる時が来たか!と一人で盛り上がっていたのですが……。
――世の中、上には上がいました。
魔法陣ジェネレーター (TsubokuLab)
幾何学模様、文字、エフェクト……魔法陣に必要なあらゆる要素をブラウザ上でカスタマイズ・生成できる神ツール。
あまりの完成度の高さに、自作する前に白目を剥いて倒れそうになりましたが(笑)、仕組みを理解することは自分の血肉になります。先人の知恵をリスペクトしつつ、私は私で地道に「ハンコ」の完成を目指します。
誘導リンク:
Tomaのゲーム日記(はてなブログ)