



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8"  />
  <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no"  />
  <title>Porting to ImageMagick Version 7 @ ImageMagick</title>
  <meta name="application-name" content="ImageMagick" />
  <meta name="description" content="Use ImageMagick® to create, edit, compose, or convert bitmap images. You can resize your image, crop it, change its shades and colors, add captions, among other operations." />
  <meta name="application-url" content="https://imagemagick.org" />
  <meta name="generator" content="PHP" />
  <meta name="keywords" content="porting, to, imagemagick, version, 7, ImageMagick, PerlMagick, image processing, image, photo, software, Magick++, OpenMP, convert" />
  <meta name="rating" content="GENERAL" />
  <meta name="robots" content="INDEX, FOLLOW" />
  <meta name="generator" content="ImageMagick Studio LLC" />
  <meta name="author" content="ImageMagick Studio LLC" />
  <meta name="revisit-after" content="2 DAYS" />
  <meta name="resource-type" content="document" />
  <meta name="copyright" content="Copyright (c) 1999-2019 ImageMagick Studio LLC" />
  <meta name="distribution" content="Global" />
  <meta name="magick-serial" content="P131-S030410-R485315270133-P82224-A6668-G1245-1" />
  <meta name="google-site-verification" content="_bMOCDpkx9ZAzBwb2kF3PRHbfUUdFj2uO8Jd1AXArz4" />
  <link href="porting.html" rel="canonical" />
  <link href="../images/wand.png" rel="icon" />
  <link href="../images/wand.ico" rel="shortcut icon" />
  <link href="assets/magick.css" rel="stylesheet" />
</head>
<body>
  <header>
  <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
    <a class="navbar-brand" href="../"><img class="d-block" id="icon" alt="ImageMagick" width="32" height="32" src="../images/wand.ico"/></a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsMagick" aria-controls="navbarsMagick" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>

    <div class="navbar-collapse collapse" id="navbarsMagick" style="">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item ">
        <a class="nav-link" href="api/quantize.html">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item ">
        <a class="nav-link" href="../www/download.html">Download</a>
      </li>
      <li class="nav-item ">
        <a class="nav-link" href="../www/command-line-tools.html">Tools</a>
      </li>
      <li class="nav-item ">
        <a class="nav-link" href="../www/command-line-processing.html">Command-line</a>
      </li>
      <li class="nav-item ">
        <a class="nav-link" href="../www/resources.html">Resources</a>
      </li>
      <li class="nav-item ">
        <a class="nav-link" href="../www/develop.html">Develop</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" target="_blank" href="https://imagemagick.org/discourse-server/">Community</a>
      </li>
    </ul>
    <form class="form-inline my-2 my-lg-0" action="https://imagemagick.org/script/search.php">
      <input class="form-control mr-sm-2" type="text" name="q" placeholder="Search" aria-label="Search">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit" name="sa">Search</button>
    </form>
    </div>
  </nav>
  <div class="container">
   <script async="async" src="https://localhost/pagead/js/adsbygoogle.js"></script>    <ins class="adsbygoogle"
         style="display:block"
         data-ad-client="ca-pub-3129977114552745"
         data-ad-slot="6345125851"
         data-ad-format="auto"></ins>
    <script>
      (adsbygoogle = window.adsbygoogle || []).push({});
    </script>

  </div>
  </header>
  <main class="container">
    <div class="magick-template">
<div class="magick-header">

<p class="text-center"><a href="porting.html#imv7">ImageMagick Version 7</a> • <a href="porting.html#hdri">High Dynamic Range Imaging</a> • <a href="porting.html#channels">Pixel Channels</a> • <a href="porting.html#alpha">Alpha</a> • <a href="porting.html#grayscale">Grayscale</a> • <a href="porting.html#mask">Masks</a> • <a href="porting.html#core">MagickCore API</a> • <a href="porting.html#headers">Header Files</a>  • <a href="porting.html#deprecate">Deprecated Features Removed</a> • <a href="porting.html#cli">Command-line Interface</a> • <a href="porting.html#summary">Version 7 Change Summary</a> </p>

<p class="lead magick-description">The design of ImageMagick is an evolutionary process, with the design and implementation efforts serving to influence and guide further progress in the other.  With ImageMagick version 7 we improved the design based on lessons learned from the version 6 implementation.  ImageMagick was originally designed to display RGB images to an X Windows server.  Over time we extended support to RGBA images and then to the CMYK and CMYKA image format.  With ImageMagick version 7, we extend support to arbitrary colorspaces with an arbitrary number of pixel channels.  In addition, ImageMagick 7 stores pixel channels as floats permitting out of band values (e.g. negative) and reduces rounding error.  There are numerous other design enhancements described within.</p>

<p>To support variable pixel channels in the MagickCore API, pixel handling has changed when getting or setting the pixel channels.  You can access channels as an array, <var>pixel[i]</var>, or use an accessor method such as GetPixelRed() or SetPixelRed().  There are some modest changes to the MagickCore and MagickWand API's.   The Magick++ and PerlMagick API's have not changed and matches that of the ImageMagick version 6.</p>

<p>The shell API (command line) of ImageMagick version 7 has undergone
a major overhaul, with specific emphasis on the ability to read 'options' not
only from the command line, but also from scripts, and file streams. This
allows for the use of 'co-processing' programming techniques or performing
image handling using 'deamon/server backends', and even multi-machine
distributed processing.</p>

<p>With the shell API overhaul other improvements were made, including:
better reporting of which option failed, the consolidation and deprecation of
options, and more global use of 'image properties' (more commonly known as
'percent escapes' in option arguments. </p>

<p>ImageMagick version 7 is available now as a <a href="../download">production</a> release.</p>

<p>Now that ImageMagick version 7 is released, we continue to support and enhance version 6 for a minimum of 10 years.</p>

<h2><a class="anchor" id="hdri"></a>High Dynamic Range Imaging</h2>
<p>ImageMagick version 7 enables <a href="../www/high-dynamic-range.html">high dynamic range imaging</a> (HDRI) by default.  HDRI accurately represents the wide range of intensity levels found in real scenes ranging from the brightest direct sunlight to the deepest darkest shadows.  In addition, image processing results are more accurate.  The disadvantage is it requires more memory and may result in slower processing times.  If you see differences in the results of your version 6 command-line with version 7, it is likely due to HDRI.  You may need to add <code>-clamp</code> to your command-line to constrain pixels to the 0 .. QuantumRange range, or disable HDRI when you build ImageMagick version 7.  To disable HDRI (recommended for smart phone builds such as iOS or production sites where performance is a premium), simply add <code>--disable-hdri</code> to the configure script command line when building ImageMagick.</p>

<h2><a class="anchor" id="channels"></a>Pixel Channels</h2>
<p>A pixel is comprised of one or more color values, or <var>channels</var> (e.g. red pixel channel).</p>
<p>Prior versions of ImageMagick (4-6), support 4 to 5 pixel channels (RGBA or CMYKA).  The first 4 channels are accessed with the PixelPacket data structure.   The structure includes 4 members of type Quantum (typically 16-bits) of red, green, blue, and opacity.  The black channel or colormap indexes are supported by a separate method and structure, IndexPacket.  As an example, here is a code snippet from ImageMagick version 6 that negates the color components (but not the alpha component) of the image pixels:</p>

<pre class="pre-scrollable"><code>for (y=0; y &lt; (ssize_t) image->rows; y++)
{
  register IndexPacket
    *indexes;

  register PixelPacket
    *q;

  q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception);
  if (q == (PixelPacket *) NULL)
    {
      status=MagickFalse;
      continue;
    }
  indexes=GetCacheViewAuthenticIndexQueue(image_view);
  for (x=0; x &lt; (ssize_t) image->columns; x++)
  {
    if ((channel &amp; RedChannel) != 0)
      q->red=(Quantum) QuantumRange-q->red;
    if ((channel &amp; GreenChannel) != 0)
      q->green=(Quantum) QuantumRange-q->green;
    if ((channel &amp; BlueChannel) != 0)
      q->blue=(Quantum) QuantumRange-q->blue;
    if (((channel &amp; IndexChannel) != 0) &amp;&amp;
        (image->colorspace == CMYKColorspace))
      indexes[x]=(IndexPacket) QuantumRange-indexes[x];
    q++;
  }
  if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
    status=MagickFalse;
}</code></pre>

<p>ImageMagick version 7 supports any number of channels from 1 to 32 (and beyond) and simplifies access with a single method that returns an array of pixel channels of type Quantum.   Source code that compiles against prior versions of ImageMagick requires refactoring to work with ImageMagick version 7.  We illustrate with an example.  Let's naively refactor the version 6 code snippet from above so it works with the ImageMagick version 7 API:</p>

<pre class="pre-scrollable"><code>for (y=0; y &lt; (ssize_t) image->rows; y++)
{
  register Quantum
    *q;

  q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception);
  if (q == (Quantum *) NULL)
    {
      status=MagickFalse;
      continue;
    }
  for (x=0; x &lt; (ssize_t) image->columns; x++)
  {
    if ((GetPixelRedTraits(image) &amp; UpdatePixelTrait) != 0)
      SetPixelRed(image,QuantumRange-GetPixelRed(image,q),q);
    if ((GetPixelGreenTraits(image) &amp; UpdatePixelTrait) != 0)
      SetPixelGreen(image,QuantumRange-GetPixelGreen(image,q),q);
    if ((GetPixelBlueTraits(image) &amp; UpdatePixelTrait) != 0)
      SetPixelBlue(image,QuantumRange-GetPixelBlue(image,q),q);
    if ((GetPixelBlackTraits(image) &amp; UpdatePixelTrait) != 0)
      SetPixelBlack(image,QuantumRange-GetPixelBlack(image,q),q);
    if ((GetPixelAlphaTraits(image) &amp; UpdatePixelTrait) != 0)
      SetPixelAlpha(image,QuantumRange-GetPixelAlpha(image,q),q);
    q+=GetPixelChannels(image);
  }
  if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
    status=MagickFalse;
}</code></pre>

<p>Let's do that again but take full advantage of the new variable pixel channel support:</p>

<pre class="pre-scrollable"><code>for (y=0; y &lt; (ssize_t) image->rows; y++)
{
  register Quantum
    *q;

  q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception);
  if (q == (Quantum *) NULL)
    {
      status=MagickFalse;
      continue;
    }
  for (x = 0; x &lt; (ssize_t) image->columns; x++)
  {
    register ssize_t
      i;

    if (GetPixelWriteMask(image,q) &lt;= (QuantumRange/2))
      {
        q+=GetPixelChannels(image);
        continue;
      }
    for (i=0; i &lt; (ssize_t) GetPixelChannels(image); i++)
    {
      PixelChannel channel = GetPixelChannelChannel(image,i);
      PixelTrait traits = GetPixelChannelTraits(image,channel);
      if ((traits &amp; UpdatePixelTrait) == 0)
        continue;
      q[i]=QuantumRange-q[i];
    }
    q+=GetPixelChannels(image);
  }
  if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
    status=MagickFalse;
}</code></pre>

<p>Note, how we use GetPixelChannels() to advance to the next set of pixel channels.</p>

<p>The colormap indexes and black pixel channel (for the CMYK colorspace) are no longer stored in the index channel, previously accessed with GetAuthenticIndexQueue() and GetCacheViewAuthenticIndexQueue().  Instead they are now a first class pixel channel and accessed as a member of the pixel array (e.g. <code>pixel[4]</code>) or with the convenience pixel accessor methods GetPixelIndex(), SetPixelIndex(), GetPixelBlack(), and SetPixelBlack().</p>

<p>As a consequence of using an array structure for variable pixel channels, auto-vectorization compilers have additional opportunities to speed up pixel loops.</p>

<h5>Pixel Accessors</h5>
<p>You can access pixel channel as array elements (e.g. <code>pixel[1]</code>) or use convenience accessors to get or set pixel channels:</p>

<pre class="highlight"><code>GetPixela()                  SetPixela()
GetPixelAlpha()              SetPixelAlpha()
GetPixelb()                  SetPixelb()
GetPixelBlack()              SetPixelBlack()
GetPixelBlue()               SetPixelBlue()
GetPixelCb()                 SetPixelCb()
GetPixelCr()                 SetPixelCr()
GetPixelCyan()               SetPixelCyan()
GetPixelGray()               SetPixelGray()
GetPixelGreen()              SetPixelGreen()
GetPixelIndex()              SetPixelIndex()
GetPixelL()                  SetPixelL()
GetPixelMagenta()            SetPixelMagenta()
GetPixelReadMask()           SetPixelReadMask()
GetPixelWriteMask()          SetPixelWriteMask()
GetPixelMetacontentExtent()  SetPixelMetacontentExtent()
GetPixelOpacity()            SetPixelOpacity()
GetPixelRed()                SetPixelRed()
GetPixelYellow()             SetPixelYellow()
GetPixelY()                  SetPixelY()</code></pre>

<p>You can find these accessors defined in the header file, <code>MagickCore/pixel-accessor.h</code></p>

<h5>Pixel Traits</h5>
<p>Each pixel channel includes one or more of these traits:</p>
<dl class="row">
<dt class="col-md-4">Undefined</dt>
<dd class="col-md-8">no traits associated with this pixel channel</dd>
<dt class="col-md-4">Copy</dt>
<dd class="col-md-8">do not update this pixel channel, just copy it</dd>
<dt class="col-md-4">Update</dt>
<dd class="col-md-8">update this pixel channel</dd>
<dt class="col-md-4">Blend</dt>
<dd class="col-md-8">blend this pixel channel with the alpha mask if it's enabled</dd>
</dl>
<p>We provide these methods to set and get pixel traits:</p>
<pre class="highlight"><code>GetPixelAlphaTraits()    SetPixelAlphaTraits()
GetPixelBlackTraits()    SetPixelBlackTraits()
GetPixelBlueTraits()     SetPixelBlueTraits()
GetPixelCbTraits()       SetPixelCbTraits()
GetPixelChannelTraits()  SetPixelChannelTraits()
GetPixelCrTraits()       SetPixelCrTraits()
GetPixelGrayTraits()     SetPixelGrayTraits()
GetPixelGreenTraits()    SetPixelGreenTraits()
GetPixelIndexTraits()    SetPixelIndexTraits()
GetPixelMagentaTraits()  SetPixelMagentaTraits()
GetPixelRedTraits()      SetPixelRedTraits()
GetPixelYellowTraits()   SetPixelYellowTraits()
GetPixelYTraits()        SetPixelYTraits()</code></pre>
<p>For convenience you can set the active trait for a set of pixel channels with a channel mask and this method:</p>
<pre class="highlight"><code>SetImageChannelMask()
</code></pre>

<p>Previously MagickCore methods had channel analogs, for example, NegateImage() and NegateImageChannels().  The channel analog methods are no longer necessary because the pixel channel traits specify whether to act on a particular pixel channel or whether to blend with the alpha mask.  For example, instead of</p>
<pre class="highlight"><code>NegateImageChannel(image,channel);</code></pre>
<p>we use:</p>
<pre class="highlight"><code>channel_mask=SetImageChannelMask(image,channel);
NegateImage(image,exception);
(void) SetImageChannelMask(image,channel_mask);</code></pre>

<h5>Pixel User Channels</h5>
<p>In version 7, we introduce pixel user channels.  Traditionally we utilize 4 channels, red, green, blue, and alpha.   For CMYK we also have a black channel.  User channels are designed to contain whatever additional channel information that makes sense for your application.  Some examples include extra channels in TIFF or PSD images or perhaps you require a channel with infrared information for the pixel.  You can associate traits with the user channels so that they when they are acted upon by an image processing algorithm (e.g. blur) the pixels are copied, acted upon by the algorithm, or even blended with the alpha channel if that makes sense.</p>
<h5>Pixel Metacontent</h5>
<p>In version 7, we introduce pixel metacontent.  Metacontent is content about content. So rather than being the content itself, it's something that describes or is associated with the content.  Here the content is a pixel.  The pixel metacontent is for your exclusive use (internally the data is just copied, it is not modified) and is accessed with these MagickCore API methods:</p>
<pre class="highlight"><code>SetImageMetacontentExtent()
GetImageMetacontentExtent()
GetVirtualMetacontent()
GetAuthenticMetacontent()
GetCacheViewAuthenticMetacontent()
GetCacheViewVirtualMetacontent()</code></pre>

<h2><a class="anchor" id="alpha"></a>Alpha</h2>
<p>We support alpha now, previously opacity.  With alpha, a value of <kbd>0</kbd> means that the pixel does not have any coverage information and is transparent; i.e. there was no color contribution from any geometry because the geometry did not overlap this pixel. A value of <code>QuantumRange</code> means that the pixel is opaque because the geometry completely overlapped the pixel. As a consequence, in version 7, the PixelInfo structure member alpha has replaced the previous opacity member.  Another consequence is the alpha part of a sRGB value in hexadecimal notation is now reversed (e.g. #0000 is fully transparent).</p>
<h2><a class="anchor" id="colorspace"></a>Colorspace</h2>
<p>The <code>Rec601Luma</code> and <code>Rec709Luma</code> colorspaces are no longer supported.  Instead, specify the <code>gray</code> colorspace and choose from these intensity options:</p>
<pre class="highlight"><code>Rec601Luma
Rec601Luminance
Rec709Luma
Rec709Luminance</code></pre>
<p>For example,</p>
<pre class="highlight"><code>convert myImage.png -intensity Rec709Luminance -colorspace gray myImage.jpg</code></pre>

<h2><a class="anchor" id="grayscale"></a>Grayscale</h2>
<p>Previously, grayscale images were Rec601Luminance and consumed 4 channels: red, green, blue, and alpha.  With version 7, grayscale consumes only 1 channel requiring far less resources as a result.</p>

<h2><a class="anchor" id="mask"></a>Masks</h2>
<p>Version 7 supports masks for most image operators.  White pixels in a read mask ignores corresponding pixel in an image whereas white pixels in a write mask protects the corresponding pixel in the image.  From the command-line, you can associate a mask with an image with the <code>-read-mask</code> and <code>-write-mask</code> options.  This polarity is matches the masks in version 6 of ImageMagick for ease of porting your workflow.  For convenience, we continue to support the <code>-mask</code> option in version 7 to match the behavior of version 6.</p>
<p>In this example, we compute the distortion of a masked reconstructed image:</p>
<pre class="highlight"><code>compare -metric rmse -read-mask hat_mask.png hat.png wizard.png difference.png</code></pre>
<p>Here we protect certain pixels from change:</p>
<pre class="highlight"><code>convert rose: -write-mask rose_bg_mask.png -modulate 110,100,33.3  +mask rose_blue.png</code></pre>

<p>A mask associated with an image persists until it is modified or removed.  This may produce unexpected results for complex command-lines.  Here we only want to clip when applying the alpha option, not the resize:</p>
<pre class="highlight">
convert -density 300 -colorspace srgb image.eps -alpha transparent -clip -alpha opaque +clip -resize 1000x1000 -strip image.png
</pre>

<h2><a class="anchor" id="core"></a>MagickCore API</h2>
<p>Here are a list of changes to the MagickCore API:</p>
<ul>
<li>Almost all image processing algorithms are now channel aware.</li>
<li>The MagickCore API adds an <code>ExceptionInfo</code> argument to those methods that lacked it in version 6, e.g. <code>NegateImage(image,MagickTrue,exception</code>);</li>
<li>All method channel analogs have been removed (e.g. BlurImageChannel()), they are no longer necessary, use pixel traits instead.</li>
<li>Public and private API calls are now declared with the GCC visibility attribute.  The MagickCore and MagickWand dynamic libraries now only export public struct and function declarations.</li>
<li>The InterpolatePixelMethod enum is now PixelInterpolateMethod.</li>
<li>The IntegerPixel storage type is removed (use LongPixel instead) and LongLongPixel is added</li>
<li>Image signatures have changed to account for variable pixel channels.</li>
<li>All color packet structures, PixelPacket, LongPacket, and DoublePacket, are consolidated to a single color structure, PixelInfo.</li>
<li>The ChannelMoments structure member <code>I</code> is now <code>invariant</code>.  <code>I</code> conflicts with the <code>complex.h</code> header.</li>
<li>We added a length parameter to FormatMagickSize() to permit variable length buffers.</li>
</ul>
<h2><a class="anchor" id="core"></a>MagickWand API</h2>
<p>Here are a list of changes to the MagickWand API:</p>
<ul>
<li>Almost all image processing algorithms are now channel aware.</li>
<li>The DrawMatte() method is now called DrawAlpha().</li>
<li>The MagickSetImageBias() and MagickSetImageClipMask() methods are no longer supported.</li>
</ul>
<h2><a class="anchor" id="core"></a>Magick++ API</h2>
<p>Here are a list of changes to the Magick++ API:</p>
<ul>
<li>Almost all image processing algorithms are now channel aware.</li>
<li>Use this construct, for example, to avoid operating on the alpha channel:
<pre class="highlight"><code>image.negateChannel(Magick::ChannelType(Magick::CompositeChannels ^ Magick::AlphaChannel));
</code></pre>
</li>
</ul>
<h2><a class="anchor" id="headers"></a>Header Files</h2>
<p>Prior versions of ImageMagick (4-6) reference the ImageMagick header files as <code>magick/</code> and <code>wand/</code>.  ImageMagick 7 instead uses <code>MagickCore/</code> and <code>MagickWand/</code> respectively.  For example,</p>
<pre class="highlight"><code><code>#include &lt;MagickCore/MagickCore.h>
#include &lt;MagickWand/MagickWand.h></code></code></pre>

<h2><a class="anchor" id="deprecate"></a>Deprecated Features Removed</h2>
<p>All deprecated features from ImageMagick version 6 are removed in version 7.  These include the <code>Magick-config</code> and <code>Wand-config</code> configuration utilities.  Instead use:</p>

<pre class="highlight"><code>MagickCore-config
MagickWand-config</code></pre>
<p>The FilterImage() method has been removed.  Use ConvolveImage() instead.</p>

<p>In addition, all deprecated <a href="http://magick.imagemagick.org/api/deprecate.html">MagickCore</a> and <a href="http://magick.imagemagick.org/api/magick-deprecate.html">MagickWand</a> methods are no longer available in version 7.</p>

<p>The Bessel filter was removed as it is an alias for Jinc.  Use -filter Jinc instead.</p>


<h2><a class="anchor" id="cli"></a>Shell API or Command-line Interface</h2>

<p>As mentioned the primary focus of the changes to the Shell API or Command
Line Interface is the abstraction so that not only can <var>options</var> be
read from command line arguments, but also from a file (script) or from a file
stream (interactive commands, or co-processing). </p>

<p>To do this the CLI parser needed to be re-written, so as to always perform
all options, in a strict, do-it-as-you-see it order. Previously in IMv6
options were performed in groups (known as 'FireOptions), this awkwardness is
now gone.  However the strict order means that you can no longer give operations
before providing an image for the operations to work on.  To do so will now
produce an error. </p>

<p>Error reporting is now reporting exactly which option (by argument count on
command line, or line,column in scripts) caused the 'exception'.  This is not
complete as yet but getting better. Also not complete is 'regard-warnings'
handling or its replacement, which will allow you to ignore reported errors
and continue processing (as appropriate due to error) in co-processes or
interactive usage. </p>

<p>The parenthesis options used to 'push' the current image list, and image
settings (EG: '<code>(</code>' and '<code>)</code>' ) on to a stack now has
a completely separate image settings stack. That is parenthesis 'push/pull'
image lists, and curly braces (EG: '<code>{</code>' and '<code>}</code>' ) will
'push/pull' image settings. </p>

<p>Of course due to the previously reported changes to the underlying channel
handling will result be many side effects to almost all options. Here are some
specific </p>

<p>Most algorithms update the red, green, blue, black (for CMYK), and alpha
channels.  Most operators will blend alpha the other color channels, but other
operators (and situations) may require this blending to be disabled, and is
currently done by removing alpha from the active channels via
<code>-channel</code> option.  (e.g. <code>convert castle.gif -channel RGB
-negate castle.png</code>). </p>

<p>Reading gray-scale images generate an image with only one channel. If
that image is to then accept color the <code>-colorspace</code> setting needs to
be applied to expand the one channel into separate RGB (or other) channels.
</p>
<p>Previously, command-line arguments were limited to 4096 characters, with ImageMagick version 7 the limit has increased to 131072 characters.</p>

<h3>Command Changes</h3>
<p>Here are a list of changes to the ImageMagick commands:</p>
<dl class="row">
<dt class="col-md-4">magick</dt>
<dd class="col-md-8">The "<code>magick</code>" command is the new primary command of the Shell
    API, replacing the old "<code>convert</code>" command. This allows you to
    create a 'magick script' of the form  "<code>#!/path/to/command/magick
    -script</code>", or pipe options into a command "<code>magick -script
    -</code>, as abackground process. </dd>

<dt class="col-md-4">magick-script</dt>
<dd class="col-md-8">This the same as "<code>magick</code>", (only command name is different)
    but which has an implicit "<code>-script</code>" option.  This allows you to
    use it in an "<code>env</code>" style script form.  That is a magick script
    starts with the 'she-bang' line of "<code>#!/usr/bin/env
    magick-script</code>" allowing the script interpreter to be found anywhere
    on the users command "<code>PATH</code>".  This is required to get around
    a "one argument she-bang bug" that is common on most UNIX systems
    (including Linux, but not MacOSX).</dd>
<dt class="col-md-4">animate, compare, composite, conjure, convert, display, identify, import, mogrify, montage, stream</dt>
<dd class="col-md-8">To reduce the footprint of the command-line utilities, these utilities are symbolic links to the <code>magick</code> utility.  You can also invoke them from the <code>magick</code> utility, for example, use <code>magick convert logo: logo.png</code> to invoke the <code>convert</code> utility.
</dd></dl>

<h3>Behavioral Changes</h3>
<p>Image settings are applied to each image on the command line.  To associate a setting with a particular image, use parenthesis to remove ambiguity.  In this example we assign a unique page offset to each image:</p>
<pre class="highlight"><code>convert \( -page +10+20 first.png \) \( -page +100+200 second.png \) ...</code></pre>

<p>By default, image operations such as convolution blends alpha with each channel.  To convolve each channel independently, deactivate the alpha channel as follows:</p>
<pre class="highlight"><code>convert ... -alpha discrete -blur 0x1 ...</code></pre>
<p>To remove the alpha values from your image, use <code>-alpha off</code>. If you want to instead persist the alpha channel but not blend the alpha pixels for certain image processing operations, use <code>-alpha deactivate</code> instead.</p>
<p>Some options have changed in ImageMagick version 7.  These include:</p>
<dl>
<dt class="col-md-4">-channel</dt>
<dd class="col-md-8">the default is to update the RGBA channels, previously, in IMv6, the default was RGB.  If you get results that differ from IMv6, you may need to specify <code>-channel RGB</code> on your command line (e.g. -channel RGB -negate).</dd>
<dt class="col-md-4">+combine</dt>
<dd class="col-md-8">This option now requires an argument, the image colorspace (e.g. +combine sRGB).</dd>
<dt class="col-md-4">-format</dt>
<dd class="col-md-8">The %Z image property is no longer supported.</dd>
<dt class="col-md-4">-gamma</dt>
<dd class="col-md-8">Multiple gamma arguments (e.g. <code>-gamma 1,2,3</code>) are no longer supported, instead use <code>-channel</code> (e.g. <code>-channel blue -gamma 2)</code>.</dd>
<dt class="col-md-4">-region</dt>
<dd class="col-md-8">This option set a write mask for the region you define.  In IMv6, a separate image was clone instead, operated on, and the results were composited to the source image.  In addition, the draw transformations are relative to the upper left corner of the image, previously in IMv6 they were relative to the region.</dd>
</dl>

<p>Use <code>-define morphology:showKernel=1</code> to post the morphology or convolution kernel.  Previously it was <code>-define showKernel=1</code>.</p>

<h3>New Options</h3>
<p>ImageMagick version 7 supports these new options, though most are limited
to the "<code>magick</code>" command, or to use in "<code>magick</code>"
scripts.</p>

<dl class="row">
<dt class="col-md-4">{ ... }</dt>
<dd class="col-md-8">Save (and restore) the current image settings (internally known as the
    "image_info" structure).  This is automatically done with parenthesis (EG:
    '<code>(</code>' and '<code>)</code>') is "<code>-regard-parenthesis</code>" has
    been set, just as in IMv6.  Caution is advised to prevent un-balanced
    braces errors.</dd>

<dt class="col-md-4">--</dt>
<dd class="col-md-8">End of options, to be used in IMv7 "<code>mogrify</code>" command to
    explicitly separate the operations to be applied and the images that
    are to be processed 'in-place'.  (not yet implemented).  However if
    not provided, "<code>-read</code>" can still be used to differentiate
    secondary image reads (for use in things like alpha composition) from
    the 'in-place' image being processed.  In other commands (such as "magick") it is equivalent to a explicit "<code>-read</code>" (see below) of the next option as a image (as it was in IMv6).  </dd>

<dt class="col-md-4">-alpha discrete</dt>
<dd class="col-md-8">treat the alpha channel independently (do not blend).</dd>

<dt class="col-md-4">-channel-fx <var>expression</var> </dt>
<dd class="col-md-8">
<p>exchange, extract, or copy one or more image channels.</p>

<p>The expression consists of one or more channels, either mnemonic or numeric (e.g. red or 0, green or 1, etc.), separated by certain operation symbols as follows:</p>

<pre class="highlight"><code>&lt;=&gt;  exchange two channels (e.g. red&lt;=&gt;blue)
=&gt;   copy one channel to another channel (e.g. red=&gt;green)
=    assign a constant value to a channel (e.g. red=50%)
,    write new image with channels in the specified order (e.g. red, green)
;    add a new output image for the next set of channel operations (e.g. red; green; blue)
|    move to the next input image for the source of channel data (e.g. | gray=>alpha)</code></pre>

<p>For example, to create 3 grayscale images from the red, green, and blue channels of an image, use:</p>

<pre class="highlight"><code>-channel-fx "red; green; blue"</code></pre>

<p>A channel without an operation symbol implies separate (i.e, semicolon).</p>

<p>Here we take an sRGB image and a grayscale image and inject the grayscale image into the alpha channel:</p>
<pre class="highlight"><code>convert wizard.png mask.pgm -channel-fx '| gray=>alpha' wizard-alpha.png</code></pre>
<p>Use a similar command to define a read mask:</p>
<pre class="highlight"><code>convert wizard.png mask.pgm -channel-fx '| gray=>read-mask' wizard-mask.png</code></pre>

<p>Add <code>-debug pixel</code> prior to the <code>-channel-fx</code> option to track the channel morphology.</p>

</dd>

<dt class="col-md-4">-exit</dt>
<dd class="col-md-8">Stop processing at this point. No further options will be processed after
    this option. Can be used in a script to force the "<code>magick</code>"
    command to exit, without actually closing the pipeline that it is
    processing options from.  May also be used as a 'final' option on the "<code>magick</code>" command
    line, instead of a implicit output image, to completely prevent any image
    write. ASIDE: even the "<code>NULL:</code>" coder requires at least one
    image, for it to 'not write'! This option does not require any images at
    all. </dd>

<dt class="col-md-4">-read {image}</dt>
<dd class="col-md-8">Explicit read of an image, rather than an implicit read.  This allows you
    to read from filenames that start with an 'option' character, and which
    otherwise could be mistaken as an option (unknown or otherwise). This will
    eventually be used in "<code>mogrify</code>" to allow the reading of
    secondary images, and allow the use of image list operations within that
    command. </dd>

<dt class="col-md-4">-read-mask</dt>
<dd class="col-md-8">prevent updates to image pixels specified by the mask</dd>

<dt class="col-md-4">-region</dt>
<dd class="col-md-8">supported in ImageMagick 7.0.2-6 and above</dd>

<dt class="col-md-4">-script {file}</dt>
<dd class="col-md-8">In "<code>magick</code>", stop the processing of command line arguments as
    image operations, and read all further options from the given file or
    pipeline.</dd>
<dt class="col-md-4">-write-mask</dt>
<dd class="col-md-8">prevent pixels from being written.</dd>

</dl>

<h3>Changed Options</h3>
<p>These options are known to have changed, in some way.</p>
<dl class="row">
<dt class="col-md-4">-bias</dt>
<dd class="col-md-8">The option is no longer recognized.  Use <code>-define convolve:bias=<var>value</var></code> instead.</dd>
<dt class="col-md-4">-draw</dt>
<dd class="col-md-8">The <code>matte</code> primitive is now <code>alpha</code> (e.g. <code>-draw 'alpha 0,0 floodfill'</code>).</dd>
<dt class="col-md-4">-negate</dt>
<dd class="col-md-8">currently negates all channels, including alpha if present.  As such you may need to use the -channel option to prevent alpha negation (e.g. -channel RGB -negate).  </dd>
<dt class="col-md-4">-preview</dt>
<dd class="col-md-8">this option is now an image operator.  The PREVIEW image format has been removed.</dd>
</dl>

<h3>Deprecated warning given, but will work (for now)</h3>
<dl class="row">
<dt class="col-md-4">-affine</dt>
<dd class="col-md-8">Replaced by <code>-draw "affine ..."</code>. (see transform)</dd>
<dt class="col-md-4">-average</dt>
<dd class="col-md-8">Replaced by <code>-evaluate-sequence Mean</code>.</dd>
<dt class="col-md-4">-box</dt>
<dd class="col-md-8">Replaced by <code>-undercolor</code>.</dd>
<dt class="col-md-4">-deconstruct</dt>
<dd class="col-md-8">Replaced by <code>-layers CompareAny</code>.</dd>
<dt class="col-md-4">-gaussian</dt>
<dd class="col-md-8">Replaced by <code>-gaussian-blur</code>.</dd>
<dt class="col-md-4">-/+map</dt>
<dd class="col-md-8">Replaced by <code>-/+remap</code>.</dd>
<dt class="col-md-4">-/+mask</dt>
<dd class="col-md-8">Replaced by <code>-/+read-mask</code>, <code>-/+write-mask</code>.</dd>
<dt class="col-md-4">-/+matte</dt>
<dd class="col-md-8">Replaced by <code>-alpha Set/Off</code>.</dd>
<dt class="col-md-4">-transform</dt>
<dd class="col-md-8">Replaced by <code>-distort Affine "..."</code>.</dd>
</dl>

<h3>Deprecated warning given, and ignored (for now)</h3>
<p>Almost 'plus' (+) option that did not do anything has been marked as
deprecated, and does nothing. It does not even have associated code.  For
example "+annotate", "+resize", "+clut", and "+draw" .</p>

<dl class="row">
<dt class="col-md-4">-affinity</dt>
<dd class="col-md-8">Replaced by <code>-remap</code>.</dd>
<dt class="col-md-4">-maximum</dt>
<dd class="col-md-8">Replaced by <code>-evaluate-sequence Max</code>.</dd>
<dt class="col-md-4">-median</dt>
<dd class="col-md-8">Replaced by <code>-evaluate-sequence Median</code>.</dd>
<dt class="col-md-4">-minimum</dt>
<dd class="col-md-8">Replaced by <code>-evaluate-sequence Min</code>.</dd>
<dt class="col-md-4">-recolor</dt>
<dd class="col-md-8">Replaced by <code>-color-matrix</code>.</dd>
</dl>

<h3>Removed / Replaced Options ("no such option" error and abort)</h3>

<dl class="row">
<dt class="col-md-4">-interpolate filter</dt>
<dd class="col-md-8">remove slow and useless interpolation method</dd>
<dt class="col-md-4">-origin</dt>
<dd class="col-md-8">old option, unknown meaning.</dd>
<dt class="col-md-4">-pen</dt>
<dd class="col-md-8">Replaced by <code>-fill</code>.</dd>
<dt class="col-md-4">-passphrase</dt>
<dd class="col-md-8">old option, unknown meaning</dd>
</dl>
<h2><a class="anchor" id="summary"></a>Version 7 Change Summary</h2>
<p>Changes from ImageMagick version 6 to version 7 are summarized here:</p>
<h5>High Dynamic Range Imaging</h5>
<ul>
<li>ImageMagick version 7 enables HDRI by default.  Expect more accurate image processing results with higher memory requirements and possible slower processing times.  You can disable this feature for resource constrained system such as a cell phone with a slight loss of accuracy for certain algorithms (e.g. resizing).</li>
</ul>
<h5>Pixels</h5>
<ul>
<li>Pixels are no longer addressed with PixelPacket structure members (e.g. red, green, blue, opacity) but as an array of channels (e.g. pixel[PixelRedChannel]).</li>
<li>Use convenience macros to access pixel channels (e.g. GetPixelRed(), SetPixelRed()).</li>
<li>The black channel for the CMYK colorspace is no longer stored in the index channel, previously accessed with GetAuthenticIndexQueue() and GetCacheViewAuthenticIndexQueue().  Instead it is now a pixel channel and accessed with the convenience pixel macros GetPixelBlack() and SetPixelBlack().</li>
<li>The index channel for colormapped images is no longer stored in the index channel, previously accessed with GetAuthenticIndexQueue() and GetCacheViewAuthenticIndexQueue().  Instead it is now a pixel channel and accessed with the convenience pixel macros GetPixelIndex() and SetPixelIndex().</li>
<li>Use GetPixelChannels() to advance to the next set of pixel channels.</li>
<li>Use the <var>metacontent</var> channel  to associate metacontent with each pixel.</li>
<li>All color packet structures, PixelPacket, LongPacket, and DoublePacket, are consolidated to a single color structure, PixelInfo.</li>
</ul>
<h5>Alpha</h5>
<ul>
<li>We support alpha rather than opacity (0 transparent; QuantumRange opaque).</li>
<li>Use GetPixelAlpha() or SetPixelAlpha() to get or set the alpha pixel channel value.</li>
</ul>
<h5>Grayscale</h5>
<ul>
<li>Grayscale images consume one pixel channel in ImageMagick version 7.  To process RGB, set the colorspace to RGB (e.g. -colorspace sRGB).</li>
</ul>
<h5>Masks</h5>
<ul>
<li>ImageMagick version 6 only supports read mask in limited circumstances.  Version 7 supports both a read and write mask.  The read mask is honored by most image-processing algorithms.</li>
</ul>
<h5>MagickCore API</h5>
<ul>
<li>Almost all image processing algorithms are now channel aware.</li>
<li>MagickCore, version 7, adds an ExceptionInfo argument to those methods that lacked it in version 6, e.g. <code>NegateImage(image,MagickTrue,exception);</code></li>
<li>All method channel analogs have been removed (e.g. BlurImageChannel()), they are no longer necessary, use pixel traits instead.</li>
<li>Public and private API calls are now declared with the GCC visibility attribute.  The MagickCore and MagickWand dynamic libraries now only export public struct and function declarations.</li>
<li>The InterpolatePixelMethod enum is now PixelInterpolateMethod.</li>
<li>To account for variable pixel channels, images may now return a different signature.</li>
</ul>
<h5>Deprecated Methods</h5>
<ul>
<li>All ImageMagick version 6 MagickCore and MagickWand deprecated methods are removed and no longer available in ImageMagick version 7.</li>
<li>All MagickCore channel method analogs are removed (e.g. NegateImageChannels()).  For version 7, use pixel traits instead.</li>
<li>The FilterImage() method has been removed.  Use ConvolveImage() instead.</li>
</ul>
</div>
    </div>
  </main><!-- /.container -->
  <footer class="magick-footer">
    <p><a href="../www/security-policy.html">Security</a> •
    <a href="../www/architecture.html">Architecture</a> •
    <a href="../www/links.html">Related</a> •
     <a href="../www/sitemap.html">Sitemap</a>
       
    <a href="porting.html#"><img class="d-inline" id="wand" alt="And Now a Touch of Magick" width="16" height="16" src="../images/wand.ico"/></a>
       
    <a href="http://pgp.mit.edu/pks/lookup?op=get&amp;search=0x89AB63D48277377A">Public Key</a> •
    <a href="../www/support.html">Donate</a> •
    <a href="../www/https://imagemagick.org/script/contact.php">Contact Us</a>
    <br/>
    <small>© 1999-2019 ImageMagick Studio LLC</small></p>
  </footer>

  <!-- Javascript assets -->
  <script src="assets/magick.js" crossorigin="anonymous"></script>
  <script>window.jQuery || document.write('<script src="https://localhost/ajax/libs/jquery/3.3.1/jquery.min.js"><\/script>')</script>
</body>
</html>
