【svgwrite】JPGやPNG形式画像をSVG形式(またはその逆)に変換する
今回は、JPGやPNG形式の画像ファイルをSVG形式の画像ファイルに変換する方法。svgwriteというライブラリを使用しています。
SVG → JPG/PNG への変換は最後にリンクだけ貼っています。
参考サイト
Python 画像ファイルjpg/pngをsvgへ変換する「svgwrite」 - PythonとVBAで世の中を便利にする
コードを参考にさせてもらいました。
svgwrite オフィシャル
svgwrite 1.4.1 documentation — svgwrite 1.4.1 documentation
内容と手順
用意した適当なJPG画像をsvgwrite
というライブラリを使ってSVGファイルに変換・保存します。
変換後の画像サイズは↓のコードで500×500に指定しています。
実行環境
- Android
- Termux
- Python3.9.6
- Jupyter Notebook6.4.0
- 外部ライブラリ
- svgwrite
外部ライブラリはターミナル等から pip install svgwrite
など、環境に合わせてインストールしておく。
画像の変換
import base64 # 標準ライブラリ import svgwrite # 変換前画像ファイルパス input_file = 'Sekizou.jpg' # 変換後SVGファイルパス output_file = input_file.split(".")[0] + '.svg' # 変換前画像ファイルを開く with open(input_file, "rb") as f: img = base64.b64encode(f.read()) # 変換後ファイルを書き込む準備 dwg = svgwrite.Drawing(output_file) # 保存画像のサイズ等指定と書き込み dwg.add(dwg.image('data:image/jpg;base64,' + img.decode("ascii"), size=(500, 500) ) ) # ファイル保存 dwg.save()
画像ファイルサイズの確認
変換前と後でファイルサイズが変化したか確認します。
import os print(input_file, os.path.getsize(input_file)) print(output_file, os.path.getsize(output_file))
Sekizou.jpg 91342
Sekizou.svg 122104
変換後のSVG画像ファイルサイズが変換前より大きくなりました。9.13KB → 12.2KB。
SVG画像の大きさを500×500に設定しましたが、より大きく、又は小さくしても、変換後のファイルサイズは12.2KBで変化ありませんでした。XMLコードの画像表示サイズが書き変わるだけってことかな。
出来たSVG画像ファイルのXMLコード内で、最初の方にある 長くて貼れないので止め。<svg baseProfile="full"
から最後</svg>
までを↓にコピペした。かなり長い。
はたして画像は表示されるか?
画像を変換させているコードの中にあるdwg.add(dwg.image('data:image/jpg;base64,' + img.decode("ascii")
の部分で、
data:image/jpg;base64
の「jpg」を「png」に書き換えれば PNG → SVG へ変換出来るようです。しかし、書き換えなくても出来た。
img.decode("ascii")
の部分は「ascii」でなければならないようです。
先頭の「with」文はお決まりっぽい。
svgwriteについて
最初にリンクを貼っているsvgwrite
オフィシャルページを見た感じでは、画像形式の変換専用ソフトではなく、SVGファイルを作る為のドローイング用ライブラリのようです。いろんな図形描いたりできるようだが、検索しても日本語のページはどれも古い。今どき便利なGUIのお絵描きソフトが沢山あるってことで。深掘りしません。
逆にSVG → JPG/PNG の変換方法は
リンクだけ貼っておきます。ライブラリは別のものを使うようです。
SVGをPDFとPNGへ変換する方法【Python】 - Qiita
PythonでSVGをPNGまたはJPEGに変換する方法は?
今回は以上です。