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.
      * Computer vision: Canny edge detection.
      * 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.
      * Perceptual hash: maps visually identical images to the same or similar
        hash-- useful in image retrieval, authentication, indexing, or copy
        detection as well as digital watermarking.
      * Color management: accurate color management with color profiles or in
        lieu of-- built-in gamma compression or expansion as demanded by the
        colorspace.
      * 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.
      * Distributed pixel cache: offload intermediate pixel storage to one or
        more remote servers.
      * 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.
