Introduction to ImageMagick

  ImageMagick® is a software suite to create, edit, and compose bitmap
  images. It can read, convert and write images in a variety of formats
  (over 100) including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG,
  Postscript, SVG, and TIFF. Use ImageMagick to translate, flip, mirror,
  rotate, scale, shear and transform images, adjust image colors, apply various
  special effects, or draw text, lines, polygons, ellipses and Bézier curves.

  The functionality of ImageMagick is typically utilized from the command
  line or you can use the features from programs written in your favorite
  programming language. Choose from these interfaces: G2F (Ada), MagickCore
  (C), MagickWand (C), ChMagick (Ch), ImageMagickObject (COM+), Magick++
  (C++), JMagick (Java), L-Magick (Lisp), NMagick (Neko/haXe), MagickNet
  (.NET), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP
  (PHP), IMagick (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick
  (Tcl/TK). With a language interface, use ImageMagick to modify or create
  images dynamically and automagically.

  ImageMagick is free software delivered as a ready-to-run binary distribution
  or as source code that you may freely use, copy, modify, and distribute. Its
  license is compatible with the GPL. It runs on all major operating systems.

Features and Capabilities

  Here are just a few examples of what ImageMagick can do:

    * Format conversion: convert an image from one format to another (e.g. PNG
      to JPEG)
    * Transform: resize, rotate, crop, flip or trim an image
    * Transparency: render portions of an image invisible
    * Draw: add shapes or text to an image
    * Decorate: add a border or frame to an image
    * Special effects: blur, sharpen, threshold, or tint an image
    * Animation: create a GIF animation sequence from a group of images
    * Text & comments: insert descriptive or artistic text in an image
    * Image identification: describe the format and properties of an image
    * Composite: overlap one image over another
    * Montage: juxtapose image thumbnails on an image canvas
    * Motion picture support: read and write the common image formats used in
      digital film work
    * Image calculator: apply a mathematical expression to an image or image
      channels
    * Discrete Fourier transform: implements the forward and inverse DFT.
    * High dynamic-range images: accurately represent the wide range of
      intensity levels found in real scenes ranging from the brightest direct
      sunlight to the deepest darkest shadows
    * Encipher or decipher an image: convert ordinary images into
      unintelligible gibberish and back again
    * Virtual pixel support: convenient access to pixels outside the image
      region
    * Large image support: read, process, or write mebi- and gibi-pixel image
      sizes
    * Threads of execution support: ImageMagick is thread safe and most
      internal algorithms are OpenMP-enabled to take advantage of speed-ups
      offered by the dual and quad-core processor technologies
    * Heterogeneous distributed processing: certain algorithms are
      OpenCL-enabled to take advantage of speed-ups offered by executing in
      concert across heterogeneous platforms consisting of CPUs, GPUs, and
      other processors.

  Examples of ImageMagick Usage, http://www.imagemagick.org/Usage/,
  shows how to use ImageMagick from the command-line to accomplish any
  of these tasks and much more. Also, see Fred's ImageMagick Scripts at
  http://www.fmwconcepts.com/imagemagick/, a plethora of command-line scripts
  that perform geometric transforms, blurs, sharpens, edging, noise removal,
  and color manipulations.
