【Linux/Mac/Win】SVGをPNGにコマンドで一括変換|ImageMagick・Inkscape・rsvg早見表

実務レシピ

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.pngCSS・フォント完全再現
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.pngWeb用・アイキャッチ作成
高解像度印刷用(300 DPI)inkscape input.svg --export-dpi=300 --export-filename=output.png印刷品質・拡大用

ツールの選び方と使い分けの基準

ツール名得意な用途・メリットおすすめのシチュエーション
ImageMagick v7リサイズ、フォーマット変換、透過処理、色補正Web用画像の簡易変換、CI/CD・シェルスクリプト
Inkscape CLISVG描画の完全再現、高度なCSS/グラデーション、フォント埋め込みデザインデータ、ロゴ・アイコン、印刷用高解像度出力
rsvg-convertRust/Cベースで超高速、省メモリ、依存関係が最小限Linuxサーバー上での大量バッチ処理、自動パイプライン
CairoSVGPythonライブラリとしてインポート可能Pythonデータ処理、Webバックエンド連携

各ツールのインストール手順(Linux / macOS / Windows)

OSImageMagickInkscapersvg-convert
Ubuntu / Debiansudo apt update && sudo apt install imagemagicksudo apt install inkscapesudo apt install librsvg2-bin
RHEL / Rocky / Almasudo dnf install ImageMagicksudo dnf install inkscapesudo dnf install librsvg2-tools
macOS (Homebrew)brew install imagemagickbrew install --cask inkscapebrew install librsvg
Windows (winget)winget install ImageMagick.ImageMagickwinget install Inkscape.Inkscapewinget 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

関連記事

Bash玄

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

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

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

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

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

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

Bash玄をフォローする