Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use ImageMagick with XQuartz

I am trying to create animated visualization in R and people say needs to install ImageMagick. However, it seems that current Mac no longer support x11, while ImageMagick just needs X11 server on Mac. Install ImageMagick

I have also tried brew install imagemagick --with-x11, doesn't work and only returned so many errors.

Apples says need to use XQuartz to replace x11. I have XQuartz, but when I turned on it, typed the same commands here, still give me the same error

display: delegate library support not built-in '' (X11) @ error/display.c/DisplayImageCommand/1891.

So, my questions is, how to install and use ImageMagick with Mac XQuartz?

like image 642
Cherry Wu Avatar asked Jun 19 '17 07:06

Cherry Wu


2 Answers

I created a Homebrew ImageMagick X11 formula that can be used like this:

brew uninstall imagemagick  # without X11 support
brew install --cask xquartz
brew install tlk/imagemagick-x11/imagemagick 

Note that homebrew-core used to support formula options such as --with-x11 in order to enable a configure option of the same name. This is no longer the case as the Homebrew maintainer(s) decided to remove formula options from homebrew-core formulas.

like image 52
tlk Avatar answered Oct 18 '22 02:10

tlk


Updated Answer

Note that things have changed a bit since I wrote this answer, Homebrew no longer supports installation options such as --with-x11. One possibility, pointed out in the comments by @MattWhite was to install ImageMagick interactively:

brew install imagemagick -i;
./configure --disable-osx-universal-binary --prefix=/usr/local/Cellar/imagemagick/7.0.8-66 --disable-silent-rules --with-x11
make install
exit

Another option that occurred to me was that, rather than installing all of XQuartz, you could just add your own delegate that uses macOS's built-in Preview app and tell ImageMagick to use that, i.e. delegate to it. This means you can do things like:

magick SomeImage.png -crop 100x100+10+10 display:

For this to work, you need to find your delegates.xml file. I used this:

magick -list delegate | awk '/^Path/ {print $2}'

and mine is at:

/opt/homebrew/Cellar/imagemagick/7.1.0-16/etc/ImageMagick-7/delegates.xml

Then I edited that file and added a line very close to the end, but just above the last line like this:

<delegate decode="miff" encode="display" spawn="True" command="magick %i %u.png ; /usr/bin/open -a Preview %u.png"/>

That converts any file formats that ImageMagick knows into a PNG which the Preview app understands and should be able to represent most images, even those with 16-bit depth and transparency.

Original Answer

In general, to use ImageMagick with X11, you will probably be most likely to succeed if you follow the following steps:

Step 1 - Install or update Xcode command line tools

It is important that your developer tools are up-to-date, especially if you have updated your macOS version since setting them up originally. You can do this with:

xcode-select --install

Step 2 - Ensure ImageMagick is correctly installed

The easiest way to do this is first to ensure that old versions of ImageMagick are removed and cleaned up and that you then install (or re-install) with the latest version:

brew update                           # update homebrew itself 
brew rm imagemagick                   # remove old IM versions
brew install imagemagick --with-x11   # install latest IM version including X11 support

Step 3 - Check

If you have been trying for ages to install ImageMagick, you may have left some old versions lying around. It is important that you use the homebrew-installed version in /usr/local/bin, so check you are running the version you expect with the following:

which convert           # should report "/usr/local/bin/convert"
which magick            # should report "/usr/local/bin/magick"

identify -version       # should report same version as next command
brew info imagemagick

Step 4 - Start X11

Start X11, it is probably easiest to fire up xclock, which not only starts X11, but also checks everything X11 is running and your X11 environment is configured correctly:

xclock & 

Step 5 - Run ImageMagick X11

Now you can test your ImageMagick configuration, without needing any test images as follows - since the wizard: image is built-in:

display wizard:
like image 20
Mark Setchell Avatar answered Oct 18 '22 00:10

Mark Setchell