This file documents how to use the binary distribution packages built by
ImageMagick Studio LLC, and found in the ImageMagick 'binaries' subdirectory
of ImageMagick ftp sites.  Those who want to build ImageMagick from source
code should refer to https://imagemagick.org/script/install-source.php.

Unix/Linux/Darwin/Mac OS X/Cygwin/MinGW Install:

  Download the appropriate binary from

     ftp://ftp.imagemagick.org/pub/ImageMagick/binaries

  Create (or choose) a directory to install the package into and change to that
  directory, for example:

     cd $HOME

  Extract the contents of the package using the command

     gzip -dc /path/to/package.tar.gz | tar -xf -

  If the 'bin' subdirectory of the extracted package is not already in your
  executable search path, add it to your PATH environment variable.  For
  example

     export PATH; PATH="$HOME/ImageMagick/bin:$PATH"

  Set the MAGICK_HOME environment variable to the path where you extracted the
  ImageMagick files. For example

     export MAGICK_HOME="$HOME/ImageMagick-7.0.9"

  On Linux and Solaris machines set the LD_LIBRARY_PATH environment variable:

     export LD_LIBRARY_PATH="$HOME/ImageMagick-7.0.9/lib"

  On Mac OS X (Darwin) machines set the DYLD_LIBRARY_PATH environment variable:

     export DYLD_LIBRARY_PATH="$HOME/ImageMagick-7.0.9/lib"

  Now, test ImageMagick to see if it is working

     convert logo: logo.gif
     display logo.gif

  To install PerlMagick type

      cd ImageMagick-7.0.9/PerlMagick
      perl Makefile.PL
      make
      make install

  Additional Information

    Environment Variables:

      In addition to the MAGICK_HOME environment variable defined above, you may
      find these variables useful:

        MAGICK_TMPDIR           path to store temporary files
        LD_LIBRARY_PATH         path to libMagick.so and other libraries

    Configuration Files

      ImageMagick depends on a number of external configuration files which
      include colors.xml, delegates.xml, and others.
      ImageMagick searches for configuration files in the following order, and
      loads them if found:

          $MAGICK_CONFIGURE_PATH
          $MAGICK_HOME/etc/ImageMagick
          $MAGICK_HOME/share/ImageMagick-7.0.9/config
          $HOME/.config/ImageMagick/
          <client path>/etc/ImageMagick/
          <current directory>/

    Font Files

      ImageMagick is able to load raw TrueType and Postscript font files.  It
      searches for the font configuration file, type.xml, in the following
      order, and loads them if found:

          $MAGICK_CONFIGURE_PATH
          $MAGICK_HOME/etc/ImageMagick
          $MAGICK_HOME/share/ImageMagick-7.0.9/config
          $HOME/.config/ImageMagick/
          <client path>/etc/ImageMagick/
          <current directory>/
          $MAGICK_FONT_PATH

    Module Files

      ImageMagick's file format support is usually provided in the form of
      loadable modules. It searches for loadable modules in the following order
      and it uses the first match found:

          <current directory>/
          $MAGICK_HOME/etc/ImageMagick/modules-Q16/coders/
          $HOME/.config/ImageMagick/
          <client path>/../etc/ImageMagick/modules-Q16/coders/
          $MAGICK_HOME/etc/ImageMagick/modules-Q16/coders
          $MAGICK_HOME/share/ImageMagick-7.0.9/modules-Q16/coders
          $HOME/.config/ImageMagick/
          <client path>/etc/ImageMagick/modules-Q16/coders
          <current directory>/

Windows Vista, XP, and NT Install:

  Download one of

      ftp://ftp.imagemagick.org/pub/ImageMagick/binaries/ImageMagick-7.0.9-15-Q16-windows-dll.exe
      ftp://ftp.imagemagick.org/pub/ImageMagick/binaries/ImageMagick-7.0.9-15-Q16-windows-static.exe
      ftp://ftp.imagemagick.org/pub/ImageMagick/binaries/ImageMagick-7.0.9-15-Q8-windows-dll.exe
      ftp://ftp.imagemagick.org/pub/ImageMagick/binaries/ImageMagick-7.0.9-15-Q8-windows-static.exe

  and execute it (or "open" it from your browser) to start the installation
  program.

  Once ImageMagick is installed, Select Start->Programs->Command Prompt.  In
  the Command Prompt window type

      convert logo: logo.gif
      imdisplay logo.gif

  If you have an X11 server, from the Command Prompt window type

      set DISPLAY=:0
      display

VMS Install:

  Type

      unzip ImageMagick.zip
      set default [.imagemagick]
      @make
      identify -verbose logo:
