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)
という記述がなくなっている。