SVG(ベクター画像)はWeb制作や資料作成で便利ですが、環境の互換性を考慮してPNG(ラスター画像)へ変換したい場面は多いです。オンライン変換ツールもありますが、ファイル数が多い場合や機密性を要する業務データでは、ターミナル(CLI)を使ったコマンドラインでの一括変換が最も安全かつ高速です。
LinuxやMacで使える代表的なSVG変換ツールには、 ImageMagick 、 Inkscape 、 rsvg-convert(librsvg) の3大ツールが存在します。本記事では、3大ツールの特徴・選び方、解像度の劣化を防ぐ密度指定、背景透過、一括変換ワンライナーまで即実践できるコマンドを解説します。
SVGをPNGに変換する3大ツールの比較早見表
ツール別特徴(ImageMagick / Inkscape / librsvg)と選び方
SVGからPNGへの変換ツールを選ぶ際は、 「描画の正確性(再現性)」「変換速度」「外部依存ライブラリ」 の3基準で使い分けます。
- ImageMagick(magick / convert): 最も普及している画像処理スイート。リサイズや色調補正などの加工を同時に行いたい場合に最適です。
- Inkscape: GUIと同じ描画エンジンをCLIから実行でき、高度なCSSやカスタムフォント、グラデーションも 完全な描画精度 で再現できます。デザイン品質を最優先する場合に最適です。
- rsvg-convert(librsvg): Rust/C製の軽量ライブラリ。GUI非依存で 圧倒的な超高速処理 を誇り、サーバー上の自動バッチ処理や大量のSVG一括変換で最良の選択肢です。
【早見表】変換速度・描画精度・透過対応・インストールコマンド一覧
3大ツールの機能対比と各OS向けインストールコマンド一覧です。
| ツール名 | 速度 | 精度 | 透過 | Ubuntu / Debian | RHEL / AlmaLinux | macOS |
|---|---|---|---|---|---|---|
| ImageMagick v7 | 中 | 中 | 対応 | sudo apt install -y imagemagick | sudo dnf install -y ImageMagick | brew install imagemagick |
| Inkscape | 低 | 完全再現 | 対応 | sudo apt install -y inkscape | sudo dnf install -y inkscape | brew install --cask inkscape |
| rsvg-convert | 最速 | 高 | 対応 | sudo apt install -y librsvg2-bin | sudo dnf install -y librsvg2-tools | brew install librsvg |
ImageMagickによるSVGからPNGへの変換手順
基本変換コマンド(convert / magick コマンドの構文)
ImageMagickではバージョンによってコマンドが異なります。主流の ImageMagick v7 では magick 、旧バージョンの v6 では convert を使います。
# ImageMagick v7 の基本構文(推奨)
magick input.svg output.png
# ImageMagick v6 の基本構文
convert input.svg output.png
※v7環境でも convert が動く場合がありますが、新規スクリプトでは magick への統一を推奨します。
解像度の劣化・ボヤけを防ぐ密度指定(-density オプション)
SVGをそのまま変換すると輪郭がボヤけて荒くなります。鮮明な高解像度PNGを得るには、 -density オプションを入力ファイルの前(左側)に指定 して高密度でラスタライズします。
# 300 DPIで高精細展開した上で、横幅1200pxに縮小出力(必ず入力ファイルの前に指定)
magick -density 300 input.svg -resize 1200x output.png
入力ファイルより後ろに -density を置くと効果がありません。 「入力前に高密度展開 → 後ろでリサイズ」 が鉄則です。
背景の透過(アルファチャンネル)を維持する指定
SVGの透明背景を維持するには -background none を指定します。
# 背景透過+高密度(300 DPI)指定の実務定番コマンド
magick -background none -density 300 input.svg output.png
Inkscapeを使った高精度なSVGからPNGへの変換
CLI実行による基本コマンド(–export-filename)
Inkscapeは画面を開かずにCLIから直接実行できます。v1.0以降の現行環境では --export-type="png" と --export-filename を使用します。
# Inkscape v1.0以降の基本構文
inkscape input.svg --export-type="png" --export-filename="output.png"
※旧バージョン(v0.92以前)の -z -e は廃止されました。現行の構文を使用してください。
出力サイズ(幅・高さ)とDPI指定による高精細変換
横幅指定( -w )やDPI指定( --export-dpi )を組み合わせて、用途に合わせた解像度で出力します。
# 横幅1200px・比率維持で変換
inkscape input.svg -w 1200 --export-filename="output_1200.png"
# 印刷品質の高精細300 DPIで出力(背景透過を確実に維持)
inkscape input.svg --export-dpi=300 --export-background-opacity=0 --export-filename="output_300dpi.png"
超高速!rsvg-convert(librsvg)による軽量一括変換
パッケージ導入と基本コマンド構文
rsvg-convert はlibrsvgに含まれるCLIツールです。依存関係が最小限で起動オーバーヘッドがないため、サーバーでのバッチ処理に最適です。デフォルトで背景透過が維持されます。
# 基本構文(-o で出力先を指定)
rsvg-convert -o output.png input.svg
# 横幅1200px・比率維持(-a)+解像度300 DPI指定
rsvg-convert -w 1200 -a -d 300 -p 300 -o output.png input.svg
大量画像変換時のベンチマークとおすすめユースケース
大量のSVGを処理する場合、rsvg-convertはInkscapeに比べて 10倍〜20倍以上高速 で、ImageMagickと比較しても約2〜3倍高速です。CI/CDパイプラインやWebサーバーでの動的生成など、処理速度を重視する場面では rsvg-convertの採用がベストプラクティス です。
【実務即コピペ】ディレクトリ内のSVGを一括変換するワンライナー
find と xargs を組み合わせた並列一括変換
大量のSVGファイルを最短で変換するには、マルチコアCPUを活用する 並列一括変換ワンライナー が有効です。 findコマンド で抽出し、 xargsコマンド の -P オプションで並列化します。
# 【最速】rsvg-convert + xargs による4並列一括変換(空白ファイル名にも対応)
find . -maxdepth 1 -name "*.svg" -print0 |
xargs -0 -P 4 -I {} sh -c 'rsvg-convert -o "${1%.svg}.png" "$1"' _ {}
-print0 と -0 でスペースや日本語を含むファイル名も安全に処理できます。詳細は findコマンド記事 および xargsコマンド記事 を参照してください。
bashのforループによる拡張子一括置換シェルスクリプト
順次変換であれば、bashの for ループとパラメータ展開( ${file%.svg}.png )を組み合わせたワンライナーが最もシンプルです。
# rsvg-convert による順次一括変換(1行ワンライナー)
for f in *.svg; do [ -f "$f" ] || continue; rsvg-convert -o "${f%.svg}.png" "$f"; done
シェルスクリプト( .sh )として安全に運用する場合は以下の通りです。
#!/usr/bin/env bash
set -euo pipefail
for svg in ./*.svg; do
[ -f "$svg" ] || continue
rsvg-convert -o "${svg%.svg}.png" "$svg"
done
echo "一括変換が完了しました。"
よくあるエラーと落とし穴・解決策
ImageMagickでSVG変換時に「not authorized」エラーが出る場合のpolicy.xml修正
Linux環境で convert: not authorized input.svg というエラーが出る場合、セキュリティポリシー( policy.xml )でSVG処理が制限されています。管理者権限(sudo)で設定ファイルを開き、制限を解除します。
# 設定ファイルを開く(v6またはv7)
sudo nano /etc/ImageMagick-6/policy.xml
# (v7の場合は /etc/ImageMagick-7/policy.xml)
<policy domain="coder" rights="none" pattern="SVG" /> を rights="read|write" に書き換えて保存すれば解消します。
日本語フォントの文字化け・豆腐化を防ぐポイント
SVG内の日本語テキストが四角い枠(豆腐)に化けてしまうトラブルへの対処法です。
- 日本語フォントの導入:
sudo apt install -y fonts-noto-cjk(Ubuntu)などでフォントを導入します。 - テキストのアウトライン化: デザイン作成時にテキストをパス化しておくと、サーバーのフォント有無に依存せず確実に描画できます。
まとめ
適切なツール選定が実務効率化の鍵です。
- 手軽&画像加工:
magick -background none -density 300 input.svg output.png(ImageMagick) - デザイン完全再現・高精細:
inkscape input.svg --export-type="png" --export-filename="output.png"(Inkscape) - 超高速・大量バッチ処理:
rsvg-convert -o output.png input.svg(librsvg) - 並列一括変換:
find + xargs -P 4でディレクトリ内を一括変換
