PythonでSVGの絵を出力

PythonでSVG(スケーラブル・ベクター・グラフィックス)形式のファイルを出力するプログラムを今回もGemini 2.5 Flashとともに作ってみました。煙突をちょっと手直ししたりして、こんな結果になりました。

このプログラムはhouse.svgというSVGファイルを出力します。SVGファイルはブラウザやGIMP、Inkscape、Adobe Illustratorなどのアプリケーションで開くことができます。ちなみに、Adobe Project Neo (Beta) というサイトでSVGファイルを取り込んで加工すると3Dにすることができます。こんな感じ。

なお、Windows 11 と Chrome 138 の組み合わせでは Project Neo でエラーが出てしまうため、macOS Sequoia 15.5 と Chrome 137 の組み合わせで試しました。Mac の場合は Chrome 138 でも動作しました。

# 家の絵をSVG形式で描画するPythonプログラム
# Version 0.1
# Copyright © 2025 たかはしのんき. The MIT License.
# このスクリプトは、svgwriteライブラリを使用して簡単な家の絵を描画し、SVGファイルとして保存します。
# Gemini 2.5 Flashによって生成されたコードを基にしています。

# 必要なライブラリをインポートします。
import svgwrite

def draw_house(filename="house.svg"):
    """
    svgwriteを使って簡単な家の絵を描画し、SVGファイルとして保存します。

    Args:
        filename (str): 保存するSVGファイルの名前。
    """
    # SVGドキュメントを作成します。ビューボックスを設定して、描画領域を定義します。
    # widthとheightは、生成されるSVGのサイズです。
    dwg = svgwrite.Drawing(filename, size=('200px', '200px'), viewBox='0 0 200 200')

    # 背景を白に設定(オプション)
    dwg.add(dwg.rect(insert=(0, 0), size=('100%', '100%'), fill='white'))

    # 家の本体 (長方形)
    # insert: 左上隅の座標 (x, y)
    # size: 幅と高さ (width, height)
    # fill: 塗りつぶしの色
    # stroke: 線の色
    # stroke_width: 線の太さ
    house_body = dwg.rect(insert=(50, 100), size=('100px', '70px'),
                          fill='sandybrown', stroke='black', stroke_width=2)
    dwg.add(house_body)

    # 煙突 (長方形)
    # insert: 左上隅の座標 (x, y)
    # size: 幅と高さ (width, height)
    # fill: 塗りつぶしの色
    # stroke: 線の色
    # stroke_width: 線の太さ
    chimney = dwg.rect(insert=(120, 60), size=('20px', '30px'),
                       fill='gray', stroke='black', stroke_width=1)
    dwg.add(chimney)

    # 屋根 (多角形)
    # points: 頂点のリスト [(x1, y1), (x2, y2), (x3, y3)]
    # fill: 塗りつぶしの色
    # stroke: 線の色
    # stroke_width: 線の太さ
    # 屋根の頂点: (100, 50) - 上の頂点
    #            (40, 100) - 左下の頂点
    #            (160, 100) - 右下の頂点
    roof = dwg.polygon(points=[(100, 50), (40, 100), (160, 100)],
                       fill='darkred', stroke='black', stroke_width=2)
    dwg.add(roof)

    # ドア (長方形)
    # insert: 左上隅の座標 (x, y)
    # size: 幅と高さ (width, height)
    # fill: 塗りつぶしの色
    # stroke: 線の色
    # stroke_width: 線の太さ
    door = dwg.rect(insert=(85, 130), size=('30px', '40px'),
                    fill='brown', stroke='black', stroke_width=1)
    dwg.add(door)

    # 窓 (長方形)
    # insert: 左上隅の座標 (x, y)
    # size: 幅と高さ (width, height)
    # fill: 塗りつぶしの色
    # stroke: 線の色
    # stroke_width: 線の太さ
    window = dwg.rect(insert=(60, 110), size=('20px', '20px'),
                      fill='lightblue', stroke='black', stroke_width=1)
    dwg.add(window)

    # 描画をファイルに保存します。
    dwg.save()
    print(f"'{filename}' が正常に生成されました。")

if __name__ == "__main__":
    draw_house()

関連項目

“PythonでSVGの絵を出力” への2件の返信

  1. 「Windows 11 と Chrome 138 の組み合わせでは Project Neo でエラーが出てしまう」という件ですが、あるPCのみでの現象であり、Geminiに解決策を聞いたところ、その中にChromeの「設定>システム>ハードウェア アクセラレーションが使用可能な場合は使用する」の話があったので、この設定をONにしたら正常に動作するようになりました。
    ただし「Intel CPUが低速です」という警告がでました。PCのCPUが推奨の第12世代Intel Core i7より1世代前のIntel Core i7-1195G7だからでしょう。

    いいね

のんき への返信 コメントをキャンセル