SVGをPNGに変換するコマンド – 【ImageMagick/Inkscape対応】

メディア変換
スポンサーリンク

SVG形式は拡大・縮小しても劣化しないベクター画像として、Web制作やデザインの現場で広く使われています。しかし、実際の利用シーンによってはPNG形式への変換が必要になる場面も少なくありません。
たとえば、

  • Webブラウザでの表示互換性を確保したい
  • SNSやプレゼン資料でそのまま使いたい
  • 印刷やサムネイル生成のためにラスタ画像が必要

こうした場合、GUIツールやオンライン変換サービスでも対応できますが、複数ファイルの一括変換や自動化には不向きです。

そこで本記事では、コマンドライン(CLI)でSVGをPNGに変換する方法を詳しく解説します。ImageMagick、Inkscape、rsvg-convertといった主要ツールを取り上げ、単発変換から一括処理、自動化まで幅広くカバーします。
この内容をマスターすれば、「変換のためにソフトを開く」手間から解放され、数十〜数百枚のSVG変換も一瞬で完了します。

コマンドラインに苦手意識を持っている方は「Bashとは」のページから基本的な知識を得ることで苦手克服をしてから本記事を見ることをお勧めします。

すぐ試せる:SVGをPNG変換する簡易的なコマンド

SVGからPNGへの変換は、専用のGUIソフトやオンラインツールを使わなくても、ターミナルから一瞬で実行できます。
ここでは、多くの環境で利用可能な2つのコマンドを紹介します。どちらもシンプルな構文で、1枚のSVGをそのままPNGに変換できます。

# rsvg-convertを使う方法(軽量でシンプル)
rsvg-convert input.svg -o output.png

# ffmpegを使う方法(動画変換で有名だが画像変換も可能)
ffmpeg -i input.svg output.png

どちらも追加オプションなしで動作し、変換結果はカレントディレクトリに output.png として保存されます。
環境によっては事前に librsvg(rsvg-convert用)や ffmpeg をインストールする必要がありますが、既に導入済みであればコピペしてすぐに試せます。

SVGとPNGはどっちが綺麗?

拡大縮小する用途ではSVGが綺麗です。SVGはベクターデータなので、拡大しても画質が劣化しません。
一方、PNGはピクセル画像なので、印刷やWebに最適化した固定サイズの出力向きです。

比較項目SVGPNG
種類ベクターラスター
拡大時の画質劣化しない劣化する
ファイルサイズ小さい(シンプルな形状なら)大きくなりやすい
対応範囲Web, 印刷, アプリ内アイコン画像全般, スクリーンショットなど

必要なツールの選択肢と特徴

rsvg-convert

librsvg に含まれる軽量な変換ツールで、シンプルなコマンド構文が特徴です。
多くのLinuxデスクトップ環境では標準でインストールされている場合があり、インストールしてすぐ使えるケースが多いです。サイズ指定や簡単な変換であれば、最短の手順で結果を得られます。

ImageMagick

convert または magick コマンドで有名な高機能画像変換ツールです。
SVGからPNGだけでなく、ほぼすべての画像形式に対応し、リサイズや色調補正、フィルター適用など幅広い加工が可能です。大規模なバッチ処理や複雑な変換条件を設定したい場合に適しています。

Inkscape CLI

GUI版で知られるInkscapeは、コマンドラインからも利用可能です。
SVGレンダリングの精度が非常に高く、Web制作や印刷用途での品質重視の変換に向いています。サイズ指定やDPI変更なども簡単に行えるため、デザインデータの変換におすすめです。

ffmpeg

動画変換で有名なffmpegですが、画像変換機能も備えています。
SVGが読み込めるビルドであれば、シンプルなコマンドでPNGに変換できます。動画編集環境やサーバーにffmpegが既に導入されている場合は追加インストール不要で利用できる可能性があります。

インストール方法

ここでは、主要な環境ごとに rsvg-convert、ImageMagick、Inkscape、ffmpeg のインストール手順を紹介します。
すでにインストールされている場合は、このセクションはスキップして構いません。

macOS(Homebrew経由)

# rsvg-convert(librsvg)
brew install librsvg

# ImageMagick
brew install imagemagick

# Inkscape
brew install --cask inkscape

# ffmpeg
brew install ffmpeg

Ubuntu / Debian系

# rsvg-convert(librsvg)
sudo apt install librsvg2-bin

# ImageMagick
sudo apt install imagemagick

# Inkscape
sudo apt install inkscape

# ffmpeg
sudo apt install ffmpeg

Windows

  • rsvg-convert
    単体での配布は少ないため、Windowsで利用する場合は WSL(Windows Subsystem for Linux)で librsvg2-bin をインストールするのが簡単です。
  • ImageMagick
    公式サイト または choco install imagemagick(Chocolatey)でインストール可能。
  • Inkscape
    公式サイト からインストーラーをダウンロード。
  • ffmpeg
    公式サイト または choco install ffmpeg でインストール可能。

環境によっては管理者権限が必要な場合があります。
インストール後は、--version オプションで動作確認しておくと安心です。

基本的な変換コマンド集

ここでは、各ツールを使った基本的なSVG→PNG変換コマンドを紹介します。
まずは1枚のファイルを変換する最もシンプルな例から始めましょう。

rsvg-convert

rsvg-convert input.svg -o output.png

input.svg を読み込み、output.png として保存します。軽量で高速に変換できるのが特徴です。

ImageMagick(magickコマンド)

magick input.svg output.png

convert コマンドでも同様に変換可能ですが、新しい環境では magick を推奨します。

Inkscape CLI

inkscape input.svg --export-type=png

高精度なレンダリングで、デザインや印刷用途に向いています。

ffmpeg

ffmpeg -i input.svg output.png

動画編集環境やサーバーですでにffmpegが入っている場合、追加設定なしで変換できます。


これらのコマンドはオプションを付けずに実行すると、元のSVGサイズに合わせてPNGが生成されます。
解像度やサイズを変更する場合は、後述のサイズ指定オプションを利用します。

複数ファイルの一括変換

SVGファイルを1枚ずつ変換するのは効率が悪いため、コマンドラインでは一括変換が便利です。
ここではBashのfor文とGNU Parallelを使った例を紹介します。

Bashのfor文を使う例(rsvg-convert)

for f in *.svg; do
  rsvg-convert "$f" -o "${f%.svg}.png"
done

カレントディレクトリ内のすべてのSVGファイルを順番にPNGに変換します。

Bashのfor文を使う例(ImageMagick)

for f in *.svg; do
  magick "$f" "${f%.svg}.png"
done

ImageMagickを使った場合でも同様に一括変換が可能です。

GNU Parallelを使う例

parallel rsvg-convert {} -o {.}.png ::: *.svg

複数のファイルを同時に処理できるため、ファイル数が多い場合に処理時間を短縮できます。
GNU Parallelはインストールが必要ですが、大量のファイル変換では特に有効です。

自動化のコツ

頻繁にSVGをPNGへ変換する場合は、コマンドを手動で実行するよりも、自動化することで作業効率を大幅に向上できます。ここでは、代表的な自動化方法を3つ紹介します。

cronで定期変換する

サーバーやローカル環境で定期的に変換したい場合は、cron を使います。

例:毎日深夜2時にconvert_svg.shを実行

0 2 * * * /path/to/convert_svg.sh

変換スクリプトを作成しておけば、定期的に新しいSVGを自動でPNGに変換できます。

Makefileでタスク化する

開発プロジェクトで利用する場合は、Makefileに変換ルールを定義しておくと便利です。

pngs: $(patsubst %.svg, %.png, $(wildcard *.svg))

%.png: %.svg
	rsvg-convert $< -o $@

make pngs と実行するだけで、すべてのSVGがPNGに変換されます。

GitフックでSVG更新時に自動変換する

Gitのpre-commitフックやpost-mergeフックに変換コマンドを仕込むことで、SVGが更新されたタイミングで自動変換が行われます。

例:.git/hooks/pre-commit に追加

#!/bin/bash
for f in $(git diff --cached --name-only --diff-filter=AM | grep '\.svg$'); do
  rsvg-convert "$f" -o "${f%.svg}.png"
done

開発チームで常に最新のPNGを共有でき、変換忘れを防止できます。

トラブルシューティング

SVGからPNGへの変換時にエラーや意図しない結果が出ることがあります。ここでは、よくある問題とその対処方法をまとめます。

コマンドが見つからないと言われる

エラー例:command not found: rsvg-convert

  • 対処:ツールがインストールされていない可能性があります。
    --version オプションで確認し、見つからない場合はインストール手順に従って導入します。

色やグラデーションが崩れる

  • 原因:一部のツールはSVGのCSSやフィルターの解釈が限定的な場合があります。
  • 対処:高精度レンダリングが可能なInkscapeで変換するか、SVGのスタイルを単純化してから変換します。

解像度やサイズが期待と違う

  • 原因:ツールによってはデフォルト解像度やDPIの扱いが異なります。
  • 対処:-w(幅)や-h(高さ)、-density(DPI)オプションを明示的に指定します。

ffmpegで変換できない

  • 原因:利用しているffmpegがSVG入力に対応していないビルドである可能性があります。
  • 対処:ffmpeg -codecs | grep svg で対応状況を確認し、未対応ならlibrsvgやresvgサポート付きで再インストールします。

一部のSVGで変換が遅い

  • 原因:SVG内のパスやエフェクトが複雑すぎるため処理時間が長くなっている場合があります。
  • 対処:IllustratorやInkscapeで不要なオブジェクトを削除し、最適化(SVGOなどのツール利用)を行ってから変換します。

よくある質問

SVGをPNGに変換する方法は?

本記事で紹介されたように Inkscape, ImageMagick, rsvg-convert などを使用するのが一般的です。GUIツールを使うなら、InkscapeGIMP でも同様に変換可能です。

SVGとPNGどっちが綺麗?

拡大縮小する用途ではSVGが綺麗 です。SVGはベクターデータなので、拡大しても画質が劣化しません。
一方、PNGはピクセル画像なので、印刷やWebに最適化した固定サイズの出力向きです。

SVGからJPEGに変換するにはどうすればいいですか?

同様にInkscapeやImageMagickで可能です。
Inkscapeの場合:

inkscape input.svg --export-type=jpg --export-filename=output.jpg
ImageMagickの場合:

magick input.svg output.jpg

SVGファイルを変換できるソフトは?


Inkscape
無料で高機能なベクター画像編集ソフト。
SVGからPNG・JPEG・PDFなどへの変換に対応。
コマンドラインでも一括変換が可能。
ImageMagick
ほぼすべての画像形式を相互変換できる定番ツール。
magick input.svg output.png のようにコマンドで変換可能。
自動処理・スクリプト化にも向く。
GIMP
無料の画像編集ソフト。
SVGを開いて「名前を付けてエクスポート」でPNGやJPEGに変換できる。
GUIで操作したい人におすすめ。
Adobe Illustrator
プロ向けのデザインソフト。
SVGから高解像度のPNGやPDFなどへ変換できる。
カラープロファイル設定も細かく調整可能。
Canva / Photopea(Webツール)
ブラウザ上でSVGを読み込み、PNGやJPEGとして保存できる。
インストール不要で手軽に使える。
rsvg-convert(librsvg)
Linux向けの軽量コマンドラインツール。
rsvg-convert -o output.png input.svg のように高速変換が可能。
バッチ処理やサーバー用途に最適。

まとめ

SVGからPNGへの変換は、GUIツールやオンラインサービスでも可能ですが、コマンドラインを活用すれば一括処理や自動化が容易になり、作業効率が大幅に向上します。

  • まず試すならrsvg-convertffmpeg でシンプルに変換
  • 高機能を求めるなら:ImageMagickで多様な形式や加工に対応
  • 品質重視なら:Inkscapeで正確なレンダリング
  • 大量処理なら:GNU Parallelやスクリプトで一括変換

用途や環境に合わせて最適なツールを選び、日常の作業に組み込むことで、変換作業の時間を削減できます。
一度コマンドを覚えてしまえば、数十枚から数百枚のSVG変換も一瞬で完了します。

スポンサーリンク
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする