.TH ImageMagick 1 "2020-04-25" "ImageMagick"

.SH NAME
ImageMagick \- 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.
It can also be accessed from programs written in your favorite language using
the corresponding interface: 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.
It 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.  We continue to maintain the legacy release of
ImageMagick, version 6, at https://legacy.imagemagick.org.

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.

ImageMagick is a suite of command-line utilities for manipulating images.  You
may have edited images at one time or another using programs such as GIMP or
Photoshop, which expose their functionality mainly through a graphical user
interface. However, a GUI program is not always the right tool. 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, a
command-line utility is more suitable.

The remaining of this manpage is a list of the available command-line utilities
and their short descriptions.  For further documentation conserning a
particular command and its options, consult the corresponding manpage. If you
are just getting aquainted with ImageMagick, start at the top of that list, the
magick(1) program, and work your way down. Also, make sure to check out 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, perform operations on those images, and write them out
to either the same or some other image file format.  The "-script" option can
be used to switch from processing command line options, to reading options from
a file or pipeline.

.TP
.B magick-script
This command is similar to magick(1) but with an implied "-script" option.  It
is useful in special "#!/usr/bin/env magick-script" scripts that search for the
magick-script(1) command anywhere along the users PATH, rather than in a
hardcorded command location.

.TP
.B convert
Available for Backward compatiblity with ImageMagick's version 6 convert(1).
Essentially, it is just an alias to a restrictive form of the magick(1)
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. This command overwrites the original image file, whereas
convert(1) writes to a different image file.

.TP
.B identify
Describe the format and characteristics of one or more image files.

.TP
.B composite
Overlap one image over another.

.TP
.B montage
Create a composite image by combining several separate ones. 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
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(1) desirable when working
with large images, or when you require raw pixel components.

.TP
.B display
Display an image or image sequence on any X server.

.TP
.B animate
Animate an image sequence on any X server.

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

.TP
.B conjure
Interpret and execute scripts written in the Magick Scripting Language (MSL).

.PP
For more information about the ImageMagick, point your browser to
file:///usr/local/share/doc/ImageMagick-7/index.html or
https://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-2020 ImageMagick Studio LLC. Additional copyrights and
licenses apply to this software, see
file:///usr/local/share/doc/ImageMagick-7/www/license.html or
https://imagemagick.org/script/license.php\fP
