Debian 10 (buster) にて ImageMagick で SVG を扱う

背景

Debian 10 で apt で ImageMagick を自然にインストールすると、7.0.10-53 が入る。

$ /usr/local/bin/convert --version
Version: ImageMagick 7.0.10-53 Q16 x86_64 2020-12-24 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(4.5)
Delegates (built-in): cairo fontconfig freetype ltdl png rsvg x zlib

しかしこの場合SVGを扱おうとするとうまく行かない。

$ /usr/local/bin/convert  a.svg b.png
convert: no images defined `b.png' @ error/convert.c/ConvertImageCommand/3301.

librsvg についてはこんな感じ。

$ dpkg -l | grep rsvg
ii  gir1.2-rsvg-2.0:amd64                                       2.44.10-2.1                         amd64        gir files for renderer library for SVG files
ii  librsvg2-2:amd64                                            2.44.10-2.1                         amd64        SAX-based renderer library for SVG files (runtime)
ii  librsvg2-bin                                                2.44.10-2.1                         amd64        command-line and graphical viewers for SVG files
ii  librsvg2-common:amd64                                       2.44.10-2.1                         amd64        SAX-based renderer library for SVG files (extra runtime)
ii  librsvg2-dev:amd64                                          2.44.10-2.1                         amd64        SAX-based renderer library for SVG files (development)

この記事では ImageMagick で SVG を操作できるようにする。

TL;DR

ImageMagick 6.8.9-9 のソースコードをダウンロードして、ビルドする。このとき、rsvgを使用せずにビルトインのSVGマニピュレータを使用するようにする。つまり、./configure 時に --with-rsvg オプションを付けない。

経緯

別のマシンに入っている、SVGに対して動作確認ができているImageMagickは下記のようになっていたので、このバージョンのソースコードを持ってきてビルドする。

$ convert --version
Version: ImageMagick 6.8.9-9 Q16 x86_64 2020-12-04 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules OpenMP
Delegates: bzlib cairo djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png rsvg tiff wmf x xml zlib

Delegatesについては、とりあえず SVG を PNG に変換できればいいので、 rsvg を含めることにする。 configure時に --with-rsvg をつける (pngについては何も指定しなくても標準で入るようだ)。

しかし、これでも同じエラーがでて (行番号はことなる)、動作しない。調べていると、ImageMagickはrsvgに頼らなくても自身にSVG Manimpulatorを持っているようだったので

# ImageMagickのコンピュータが動く方で実行した
$ convert -list format | grep SVG
     MSVG  SVG       rw+   ImageMagick's own SVG internal renderer
      SVG  SVG       rw+   Scalable Vector Graphics (RSVG 2.40.13)
     SVGZ  SVG       rw+   Compressed Scalable Vector Graphics (RSVG 2.40.13)

それを使うように --with-rsvg なしでビルドした結果うまく行った。

# ターケットのコンピュータで実行した
$ convert -list format | grep SVG
     MSVG  -w+   ImageMagick's own SVG internal renderer
      SVG  -w+   Scalable Vector Graphics
     SVGZ  -w+   Compressed Scalable Vector Graphics

(RSVG 2.40.13) という記述がなくなっている。