Introduction to ImageMagick

  ImageMagick® is a software suite to create, edit, compose, or convert
  bitmap images. It can read and write images in a variety of formats (over
  200) including PNG, JPEG, JPEG-2000, GIF, TIFF, DPX, EXR, WebP, Postscript,
  PDF, and SVG. Use ImageMagick to resize, 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
  language. Choose from these interfaces: G2F (Ada), MagickCore (C),
  MagickWand (C), ChMagick (Ch), ImageMagickObject (COM+), Magick++ (C++),
  JMagick (Java), L-Magick (Lisp), Lua, NMagick (Neko/haXe), Magick.NET
  (.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 utilizes multiple computational threads to increase performance
  and can read, process, or write mega-, giga-, or tera-pixel image sizes.
  
  ImageMagick is free software delivered as a ready-to-run binary distribution
  or as source code that you may use, copy, modify, and distribute in both open
  and proprietary applications. It is distributed under the Apache 2.0 license.
  
  The ImageMagick development process ensures a stable API and ABI. Before
  each ImageMagick release, we perform a comprehensive security assessment
  that includes memory error and thread data race detection to prevent
  security vulnerabilities.

  The current release is ImageMagick 6.9.1-4 available from
  http://www.imagemagick.org/download. It runs on Linux, Windows, Mac
  Os X, iOS, Android OS, and others.

  The authoritative ImageMagick web site is
  http://www.imagemagick.org. The authoritative source code repository is
  https://subversion.imagemagick.org/subversion/ImageMagick/.


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, deskew, 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.
      * Connected component labeling: uniquely label connected regions in an
        image.
      * 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 or iPad.
  
  Examples of ImageMagick 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: a plethora of command-line scripts that
  perform geometric transforms, blurs, sharpens, edging, noise removal,
  and color manipulations. With Magick.NET, use ImageMagick without having
  to install ImageMagick on your server or desktop.

