.TH ImageMagick 1 "Date: 2009/01/10 01:00:00" "ImageMagick"
.SH NAME
ImageMagick \- is a free software suite for the creation, modification and display of bitmap images.
.SH SYNOPSIS
\fBmagick\fP [\fIoptions\fP|\fIinput-file\fP]... \fIoutput-file\fP
\fBmagick-script\fP \fIscript-file\fP [\fIscript-arguments\fP]...
.SH OVERVIEW

Use ImageMagick\[rg] to create, edit, compose, or convert bitmap images. It can read and write images in a variety of formats (over 200) including PNG, JPEG, GIF, HEIC, 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\\['e]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), JuliaIO (Julia), L-Magick (Lisp), Lua (LuaJIT), NMagick (Neko/haXe), Magick.NET (.NET), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP (PHP), IMagick (PHP), PythonMagick (Python), magick (R), 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 a derived 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, thread data race detection, and continuous fuzzing to help prevent security vulnerabilities.

The current release is ImageMagick 7.0.8-11. It runs on Linux, Windows, Mac Os X, iOS, Android OS, and others.

The authoritative ImageMagick web site is https://imagemagick.org. The authoritative source code repository is https://github.com/ImageMagick. We maintain a source code mirror at https://gitlab.com/ImageMagick.

We continue to maintain the legacy release of ImageMagick, version 6, at https://legacy.imagemagick.org.

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: MagickCore (C), MagickWand (C), ChMagick (Ch), Magick++ (C++), JMagick (Java), L-Magick (Lisp), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick (Tcl/TK). With a language interface, use ImageMagick to modify or create images automagically and dynamically.

ImageMagick includes a number of command-line utilities for manipulating images. Most of you are probably accustom to editing images one at a time with a graphical user interface (GUI) with such programs as gimp or Photoshop. However, a GUI is not always convenient. Suppose you want to process an image dynamically from a web script or you want to apply the same operations to many images or repeat a specific operation at different times to the same or different image. For these types of operations, the command-line image processing utility is appropriate.

In the paragraphs below, find a short description for each command-line tool.Cl
ick on the program name to get details on the program usage and a list of comman
d-line options that alters how the program performs. If you are just getting acq
uainted with ImageMagick, start at the top of the list, the convert program, and
 work your way down. Also be sure to peruse Anthony Thyssen's tutorial on how to
 use ImageMagick utilities to convert, compose, or edit images from the command-
line.
.TP
.B magick

Read images into memory, and perform operations on those images, and write
then out to either the same of some other image file format.

The "-script" option can be switch from processing command line options,
to reading options from a file or pipeline.
.TP
.B magick-script

As "magick" command but with an implied "-script" option. Allows it to be used
in special "#!/usr/bin/env magick-script" scripts that will search for the
"magick-script" command anywhere along the users command path, rather than in
a hardcorded command location.

.TP
.B convert

Backwards compatiblity for ImageMagick version 6 "convert". Essentually an
alias to a restrictive form of the "magick" command, which should be used
instead.
.TP
.B mogrify

resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample, and much more. Mogrify overwrites the original image file, whereas, convert writes to a different image file.
.TP
.B identify

describes the format and characteristics of one or more image files.
.TP
.B composite

overlaps one image over another.
.TP
.B montage

create a composite image by combining several separate images. The images are tiled on the composite image optionally adorned with a border, frame, image name, and more.
.TP
.B compare

mathematically and visually annotate the difference between an image and its reconstruction..

.TP
.B stream

is a lightweight tool to stream one or more pixel components of the image or portion of the image to your choice of storage formats. It writes the pixel components as they are read from the input image a row at a time making stream desirable when working with large images or when you require raw pixel components.

.TP
.B display

displays an image or image sequence on any X server.
.TP
.B animate

animates an image sequence on any X server.
.TP
.B import

saves any visible window on an X server and outputs it as an image file. You can capture a single window, the entire screen, or any rectangular portion of the screen.
.TP
.B conjure

interprets and executes scripts written in the Magick Scripting Language (MSL).
.PP
For more information about the ImageMagick, point your browser to file://@DOCUMENTATION_PATH@/index.html or http://imagemagick.org/.
.SH SEE ALSO
convert(1), compare(1), composite(1), conjure(1), identify(1), import(1), magick(1), magick-script(1), montage(1), display(1), animate(1), import(1), Magick++-config(1), MagickCore-config(1), MagickWand-config(1)

.SH COPYRIGHT
\fBCopyright (C) 1999-2019 ImageMagick Studio LLC. Additional copyrights and licenses apply to this software, see file://@DOCUMENTATION_PATH@/www/license.html or http://imagemagick.org/script/license.php\fP
