Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

星のベクター画像を作成する

星のベクター画像を作成します。
ドットの集合である普通の画像(ラスター画像)と異なり、ベクター画像は線や円といったオブジェクトの集合として記述されており、拡大縮小してもギザギザになったりせず画像の質が変わらない特徴があります。
ベクターファイルの生成にはライブラリsvgwriteを用います。このライブラリを使うことでベクター画像の一種であるsvgファイルが生成できます。

関連記事

星を描く
青海波のベクター画像を作成する

環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • svgwrite 1.4
コード

多角形を描画するdwg.polygonに、点のx,y座標のリスト、塗りつぶし色、回転変形の角度を与えて星を描画しています。

import numpy as np
import svgwrite

dwg = svgwrite.Drawing('star.svg', profile='tiny')

x = 30  # 中心位置x
y = 30  # 中心位置y
r = 10  # 中心から頂点の距離
theta = 30 # 回転角度
ratio = 0.3  # 頂点とへこみの比
color = 'darkblue' # 色

peak = r
valley = r * ratio
rotate = 'rotate('+ str(theta)+' '+str(x)+' '+str(x)+')'   
  
points = []

for i in range (0, 360, 72):
        
    angle = i / 360 * np.pi * 2
    peak_x = x + peak * np.sin(angle)
    peak_y = y - peak * np.cos(angle)
    points.append([peak_x, peak_y])
             
    angle = (36 + i) / 360 * np.pi * 2
    valley_x = x + valley * np.sin(angle)
    valley_y = y - valley * np.cos(angle)
    points.append([valley_x, valley_y])     

dwg.add(dwg.polygon(points=points, fill=color, transform=rotate))
dwg.save()
実行結果

生成した'star.svg'をベクター画像描画フリーソフトInkscapeで開きます(ブラウザでも開けます)。星が作成できています。

f:id:T_A_T:20200516133326p:plain

ベクター画像なので拡大してもエッジがギザギザになりません。

f:id:T_A_T:20200516133340p:plain

以下のサイトを参考にさせていただきました

pythonfix BETA > svgwrite code examples
svgwrite module

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村