4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Elixir Image で SVG を PNG に変換する

Last updated at Posted at 2023-02-12

はじめに

皆さんは SVG を PNG に変換したいときどうしていますか?

Google で検索すると大量にオンライン変換ツールが出てきます

でも、オンラインには上げられない、もしくは怪しいサイトにはアクセスしたくない、ということもありますよね

Elixir なら手元で変換可能です!

というわけで、今回は Image モジュールで SVG を PNG に変換するだけの小ネタです

いつものように Livebook を使います

実装したノートブックはこちら

実行環境

  • Elixir: 1.14.2 OTP 24
  • Livebook: 0.9.3

以下のリポジトリーの Docker コンテナ上で起動しています

Docker が使える環境であれば簡単に実行できます

https://docs.docker.com/engine/install/

Docker Desktop を無償利用できない場合は Rancher Desktop を使ってください

https://rancherdesktop.io/

セットアップ

必要なモジュールをインストールします

Mix.install([
  {:image, "~> 0.35"},
  {:req, "~> 0.3"},
  {:kino, "~> 0.9"}
])

Req はモデルファイルや画像を Web からダウンロードするのに使っています

SVG のダウンロード

元画像には ElixirConf EU のヘッダーに使われているアイコンを使ってみます

元画像(SVG)

元画像

SVG の画像を Web からダウンロードします

svg_img =
  "https://www.elixirconf.eu/assets/images/drops.svg"
  |> Req.get!()
  |> then(& &1.body)
  |> Image.from_svg!()

drops.png

実はこの時点で Livebook に表示された画像を右クリック |> 保存で PNG として保存可能です

PNG 形式で保存

せっかくなので、コードでも保存しましょう

Image.write(svg_img, "png_img.png")

実行結果は以下のようになります

{:ok, %Vix.Vips.Image{ref: #Reference<0.795797202.1408368656.27075>}}

Image モジュールは内部的に Vix というモジュールを利用していて、その画像形式が返っています

ファイルを確認すると、確かに PNG 形式になっています

まとめ

SVG を扱えるのは何気に便利です

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?