I'm using ImageMagick's convert
utility to convert SVG file to PNG image. At first, I used vanilla installation of IM on OSX (brew install imagemagick
) to convert the SVG using:
$ convert file.svg file.png
This worked except that some of the image objects in that file were offset (actual links to images). I then read a related question that suggested ImageMagick to be compiled with rsvg support (homebrew does it with brew install imagemagick --use-rsvg
).
Now, when I try to perform the conversion, no images are rendered. I tried using this SVG file, and the resulting PNG was blank. However, if any text exists on the SVG, it's rendered in the proper location. Any ideas how to proceed? thanks.
You should run this command to see a list of all 'delegates' your ImageMagick is trying to use:
convert -list delegate
To discover which delegate command ImageMagick uses for SVG processing, run
convert -list delegate | grep 'svg ='
You should see the binary + commandline parameters your convert
tries to use. Im my case it is /opt/local/bin/rsvg-convert
(but I'm not using Homebrew, I use MacPorts).
Now check if the binary is present at all on your system:
/opt/local/etc/ImageMagick/delegates.xml
-- I don't know where Homebrew stores it.However, since your un-modified installation was already working, there must have been an SVG consuming delegate at work already then. Otherwise you would not have gotten any SVG processed at all.
This internal SVG rendering method of ImageMagick is called MSVG. This is far from being a feature-complete SVG interpreter/renderer.
Update:
To see what ImageMagick is doing for which format, run this command:
convert -list format
and for SVG run
convert -list format | grep SVG
Output on my system is:
MSVG SVG rw+ ImageMagick's own SVG internal renderer
SVG SVG rw+ Scalable Vector Graphics (RSVG 2.36.1)
SVGZ SVG rw+ Compressed Scalable Vector Graphics (RSVG 2.36.1)
After you installed rsvg
, the internal method to render SVGs will not have gone away. You can still force ImageMagick to use the internal renderer by adding MSVG:
to the commandline like this:
convert MSVG:file.svg file.png
Just for completeness' sake...