SVGをPNGに一括変換|inkscape・ImageMagick解説

実務レシピ

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 / DebianRHEL / AlmaLinuxmacOS
ImageMagick v7中中対応sudo apt install -y imagemagicksudo dnf install -y ImageMagickbrew install imagemagick
Inkscape低完全再現対応sudo apt install -y inkscapesudo dnf install -y inkscapebrew install --cask inkscape
rsvg-convert最速高対応sudo apt install -y librsvg2-binsudo dnf install -y librsvg2-toolsbrew 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 でディレクトリ内を一括変換

関連記事(内部リンク)

Bash玄

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

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

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

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

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

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

Bash玄をフォローする