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に最適化した固定サイズの出力向きです。
比較項目 | SVG | PNG |
---|---|---|
種類 | ベクター | ラスター |
拡大時の画質 | 劣化しない | 劣化する |
ファイルサイズ | 小さい(シンプルな形状なら) | 大きくなりやすい |
対応範囲 | 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などのツール利用)を行ってから変換します。
よくある質問
本記事で紹介されたように Inkscape, ImageMagick, rsvg-convert などを使用するのが一般的です。GUIツールを使うなら、Inkscape や GIMP でも同様に変換可能です。
拡大縮小する用途ではSVGが綺麗 です。SVGはベクターデータなので、拡大しても画質が劣化しません。
一方、PNGはピクセル画像なので、印刷やWebに最適化した固定サイズの出力向きです。
同様にInkscapeやImageMagickで可能です。
Inkscapeの場合:inkscape input.svg --export-type=jpg --export-filename=output.jpg
ImageMagickの場合:magick input.svg output.jpg
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-convert
やffmpeg
でシンプルに変換 - 高機能を求めるなら:ImageMagickで多様な形式や加工に対応
- 品質重視なら:Inkscapeで正確なレンダリング
- 大量処理なら:GNU Parallelやスクリプトで一括変換
用途や環境に合わせて最適なツールを選び、日常の作業に組み込むことで、変換作業の時間を削減できます。
一度コマンドを覚えてしまえば、数十枚から数百枚のSVG変換も一瞬で完了します。