SVGをPNGに変換する際、Web上のオンライン変換ツールにファイルをアップロードする必要はありません。コマンドライン(CLI)を使えば、1枚の即時変換から数百枚の一括バッチ変換、高解像度(DPI/サイズ指定)まで一瞬で完了します。「今すぐコマンドをコピペしたい」という方向けに、主要ツール(ImageMagick・Inkscape・rsvg-convert)の1秒コピペ早見表と実務コード例をまとめました。
【1秒コピペ】SVG→PNG変換コマンド早見表(ファーストビュー)
| やりたいこと / ツール | コピペ用コマンド | 特徴・用途 |
|---|---|---|
| ImageMagick v7(手軽) | magick -background none input.svg output.png | 透過維持・最も手軽 |
| Inkscape(最高画質) | inkscape input.svg --export-type=png --export-filename=output.png | CSS・フォント完全再現 |
| rsvg-convert(最速) | rsvg-convert -o output.png input.svg | 超軽量・サーバー向け |
| rsvg-convert一括変換 | for f in *.svg; do rsvg-convert -o "${f%.svg}.png" "$f"; done | 大量ファイルを爆速一括変換 |
| ImageMagick一括変換 | for f in *.svg; do magick -background none "$f" "${f%.svg}.png"; done | フォルダ内の全SVGを一括化 |
| 横幅指定変換(1200px) | inkscape input.svg -w 1200 --export-filename=output.png | Web用・アイキャッチ作成 |
| 高解像度印刷用(300 DPI) | inkscape input.svg --export-dpi=300 --export-filename=output.png | 印刷品質・拡大用 |
ツールの選び方と使い分けの基準
| ツール名 | 得意な用途・メリット | おすすめのシチュエーション |
|---|---|---|
| ImageMagick v7 | リサイズ、フォーマット変換、透過処理、色補正 | Web用画像の簡易変換、CI/CD・シェルスクリプト |
| Inkscape CLI | SVG描画の完全再現、高度なCSS/グラデーション、フォント埋め込み | デザインデータ、ロゴ・アイコン、印刷用高解像度出力 |
| rsvg-convert | Rust/Cベースで超高速、省メモリ、依存関係が最小限 | Linuxサーバー上での大量バッチ処理、自動パイプライン |
| CairoSVG | Pythonライブラリとしてインポート可能 | Pythonデータ処理、Webバックエンド連携 |
各ツールのインストール手順(Linux / macOS / Windows)
| OS | ImageMagick | Inkscape | rsvg-convert |
|---|---|---|---|
| Ubuntu / Debian | sudo apt update && sudo apt install imagemagick | sudo apt install inkscape | sudo apt install librsvg2-bin |
| RHEL / Rocky / Alma | sudo dnf install ImageMagick | sudo dnf install inkscape | sudo dnf install librsvg2-tools |
| macOS (Homebrew) | brew install imagemagick | brew install --cask inkscape | brew install librsvg |
| Windows (winget) | winget install ImageMagick.ImageMagick | winget install Inkscape.Inkscape | winget install MSYS2.MSYS2(またはWSL) |
実務で使える変換コマンド具体例
1. ImageMagick v7での変換(magick)
ImageMagick 7 では magick コマンドを使用します(バージョン 6 以前は convert)。SVGをそのまま変換すると背景が白または黒で塗りつぶされることがあるため、-background none を指定して透過を維持するのが実務の基本です。
# 基本変換(背景透過を維持)
magick -background none input.svg output.png
# 解像度(密度)を高めて綺麗にラスタライズ(300 DPI相当)
magick -density 300 -background none input.svg output.png
# 横幅1200pxにアスペクト比を維持してリサイズ出力
magick -density 300 -background none input.svg -resize 1200x output.png
# 高さ800pxにリサイズ出力
magick -density 300 -background none input.svg -resize x800 output.png
2. Inkscape CLIでの高精度変換
Inkscapeはベクターグラフィックエディタの標準描画エンジンを使用するため、複雑なCSSドロップシャドウやカスタムフォント、グラデーションを含むSVGでも崩れることなく忠実にPNGへ変換できます。
# 基本変換(Inkscape 1.0以降の構文)
inkscape input.svg --export-type=png --export-filename=output.png
# 幅・高さをピクセル単位で明示指定
inkscape input.svg -w 800 -h 600 --export-filename=output.png
# 印刷向け高解像度(300 DPI)指定
inkscape input.svg --export-dpi=300 --export-filename=output.png
# 背景を完全に透過して出力
inkscape input.svg --export-background-opacity=0 --export-type=png --export-filename=output.png
3. rsvg-convertでの超高速変換(サーバー・バッチ向け)
rsvg-convert(librsvg)はGUIライブラリの依存が少なく、CPU・メモリ消費が極めて小さいため、LinuxサーバーやCIパイプラインで大量のSVGを処理するのに最適です。
# 基本変換
rsvg-convert -o output.png input.svg
# 横幅1200px・縦幅比率維持(-w オプション)
rsvg-convert -w 1200 -a -o output.png input.svg
# DPIを300に指定して高密度出力
rsvg-convert -d 300 -p 300 -o output.png input.svg
# 背景透過(デフォルトで透過保持、明示的に背景色を指定する場合は -b)
rsvg-convert -b white -o output.png input.svg
4. 複数ファイルの一括バッチ変換(ワンライナー&並列化)
フォルダ内の大量のSVGファイルを一発でPNGに一括変換するシェルスクリプト・ワンライナーです。変数展開(${f%.svg}.png)により、元のファイル名を保持したまま拡張子だけを安全に変更します。
# rsvg-convert で一括変換(推奨・最速)
for f in *.svg; do
rsvg-convert -o "${f%.svg}.png" "$f"
done
# ImageMagick v7 で一括変換(透過維持)
for f in *.svg; do
magick -background none "$f" "${f%.svg}.png"
done
# Inkscape で一括変換
for f in *.svg; do
inkscape "$f" --export-type=png --export-filename="${f%.svg}.png"
done
# 【超高速】find と xargs でマルチCPU並列一括変換(-P 4)
find . -maxdepth 1 -name "*.svg" -print0 | xargs -0 -P 4 -I {} sh -c 'rsvg-convert -o "${1%.svg}.png" "$1"' _ {}
よくあるトラブル・落とし穴と解決策
| トラブル | 主な原因 | 解決策 |
|---|---|---|
| 透過背景が真っ黒になる | ImageMagick等のデフォルト背景色が不透明設定 | -background none オプションを必ず付与する |
| 文字化け・フォント崩れ | 実行環境にSVG指定のフォントが存在しない | inkscape を使用するか、元SVGのテキストをパス(アウトライン)化する |
| 変換後の画像がぼやける・粗い | 初期解像度(72/96 DPI)でラスタライズされている | -density 300(ImageMagick)や --export-dpi=300(Inkscape)を指定する |
| ImageMagickのセキュリティ拒否エラー | policy.xml でSVG形式の処理が制限されている | /etc/ImageMagick-7/policy.xml の <policy domain="coder" rights="none" pattern="SVG" /> を read|write に変更 |
| 大量処理時にメモリ不足になる | Inkscape等のGUI系プロセスのオーバーヘッド | 軽量な rsvg-convert または xargs -P によるプロセス制御を利用する |
まとめ
- 手軽さ&画像加工:
magick -background none input.svg output.png(ImageMagick v7) - 画質・デザイン完全再現:
inkscape input.svg --export-type=png --export-filename=output.png(Inkscape) - 最速&サーバー一括バッチ:
rsvg-convert -o output.png input.svg(librsvg) - 一括変換ワンライナー:
for f in *.svg; do rsvg-convert -o "${f%.svg}.png" "$f"; done
