Introduction to ImageMagick

  ImageMagick®, http://www.imagemagick.org, 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 scale,
  flip, mirror, rotate, distort, 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
  in both open and proprietary applications. It is distributed under the
  Apache 2.0 license, approved by the OSI and recommended for use by the OSSCC.
  
  The ImageMagick development process ensures a stable API and ABI. Before
  each ImageMagick release, we perform a comprehensive security assessment
  that includes memory and thread error detection to prevent security
  vulnerabilities.

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 attributes of an image.
      * Composite: overlap one image over another.
      * Montage: juxtapose image thumbnails on an image canvas.
      * Generalized pixel distortion: correct for, or induce image distortions
        including perspective.
      * Morphology of shapes: extract features, describe shapes and recognize
        patterns in images.
      * 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 mega-, giga-, or
        tera-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 multicore processor chips.
      * 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.
      * ImageMagick on the iPhone: convert, edit, or compose images on your
        iPhone.
  
  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,
  http://www.fmwconcepts.com/imagemagick/: a plethora of command-line scripts
  that perform geometric transforms, blurs, sharpens, edging, noise removal,
  and color manipulations.
