blob: be50bc3731e0075f4a605f01ab7c5ebe7678b316 [file] [log] [blame]
cristydcca3fa2010-12-29 21:50:07 +00001<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
cristy2bd2a982011-02-15 00:52:58 +00003<html version="-//W3C//DTD XHTML 1.1//EN"
4 xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xsi:schemaLocation="http://www.w3.org/1999/xhtml
7 http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">
cristy3eaa0ef2010-03-06 20:35:26 +00008<head>
cristy3c98a4f2010-08-13 20:09:41 +00009 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
cristy1efc1ab2011-08-01 14:47:02 +000010 <meta name="google-site-verification" content="MxsMq6bdLOx0KSuz1MY6yG9ZTIJ7_7DVRfl5NCAT5Yg"/>
cristyffb69ed2010-12-25 00:06:48 +000011 <title>ImageMagick: MagickCore, C API for ImageMagick: Dealing with Image Layers</title>
cristy3ed852e2009-09-05 21:47:34 +000012 <meta http-equiv="Content-Language" content="en-US"/>
13 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
14 <meta http-equiv="Reply-to" content="magick-users@imagemagick.org"/>
cristy3c98a4f2010-08-13 20:09:41 +000015 <meta name="Application-name" content="ImageMagick"/>
cristye6e84152011-06-06 14:16:49 +000016 <meta name="Description" content="Use ImageMagick to convert, edit, or compose bitmap images in a variety of formats. In addition resize, rotate, shear, distort and transform images automagically."/>
cristy3c98a4f2010-08-13 20:09:41 +000017 <meta name="Application-url" content="http://www.imagemagick.org"/>
cristy3ed852e2009-09-05 21:47:34 +000018 <meta name="Generator" content="PHP"/>
cristyeed6cb62012-01-28 19:38:34 +000019 <meta name="Keywords" content="magickcore, c, api, for, imagemagick:, dealing, with, image, layers, ImageMagick, PerlMagick, image processing, OpenMP, software development library, image, photo, software, Magick++, MagickWand"/>
cristy3ed852e2009-09-05 21:47:34 +000020 <meta name="Rating" content="GENERAL"/>
21 <meta name="Robots" content="INDEX, FOLLOW"/>
22 <meta name="Generator" content="ImageMagick Studio LLC"/>
23 <meta name="Author" content="ImageMagick Studio LLC"/>
24 <meta name="Revisit-after" content="2 DAYS"/>
25 <meta name="Resource-type" content="document"/>
cristy1454be72011-12-19 01:52:48 +000026 <meta name="Copyright" content="Copyright (c) 1999-2012 ImageMagick Studio LLC"/>
cristy3ed852e2009-09-05 21:47:34 +000027 <meta name="Distribution" content="Global"/>
cristydcca3fa2010-12-29 21:50:07 +000028 <link rel="icon" href="../../images/wand.png"/>
cristy3c98a4f2010-08-13 20:09:41 +000029 <link rel="shortcut icon" href="../../images/wand.ico" type="images/x-icon"/>
cristy29c5c992011-06-25 13:58:49 +000030 <link rel="canonical" href="http://www.imagemagick.org" />
cristy3c98a4f2010-08-13 20:09:41 +000031 <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>
cristyeed6cb62012-01-28 19:38:34 +000032 <!-- Add jQuery library -->
33 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
34
35 <!-- Optionaly include easing and/or mousewheel plugins -->
36 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.easing-1.3.pack.js"></script>
37 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.mousewheel-3.0.6.pack.js"></script>
38
39 <!-- Add fancyBox -->
40 <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/jquery.fancybox.css?v=2.0.3" type="text/css" media="screen" />
41 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.fancybox.pack.js?v=2.0.3"></script>
42
43 <!-- Optionaly include button and/or thumbnail helpers -->
44 <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-buttons.css?v=2.0.3" type="text/css" media="screen" />
45 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-buttons.js?v=2.0.3"></script>
46
47 <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-thumbs.css?v=2.0.3" type="text/css" media="screen" />
48 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-thumbs.js?v=2.0.3"></script>
49 <script type="text/javascript">
50 $(document).ready(function() {
51 $(".fancybox").fancybox();
52 });
53 </script>
54 <!-- ImageMagick style -->
cristy7a40ba82011-01-08 20:31:18 +000055 <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" />
cristy3c98a4f2010-08-13 20:09:41 +000056 <style type="text/css" media="all">
57 @import url("../../www/magick.css");
58 </style>
cristy3eaa0ef2010-03-06 20:35:26 +000059</head>
60
61<body id="www-imagemagick-org">
62<div class="titlebar">
cristyb52981c2011-03-19 17:09:31 +000063<div style="margin: 17px auto; float: left;">
64 <script type="text/javascript">
65 <!--
66 google_ad_client = "pub-3129977114552745";
67 google_ad_slot = "5439289906";
68 google_ad_width = 728;
69 google_ad_height = 90;
70 //-->
71 </script>
72 <script type="text/javascript"
73 src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
74 </script>
75</div>
cristy3eaa0ef2010-03-06 20:35:26 +000076<a href="http://www.imagemagick.org/discourse-server/">
cristyaf8d6652011-02-04 21:57:45 +000077 <img src="../../images/logo.jpg"
78 alt="ImageMagick Logo"
cristy178edaf2011-01-23 03:42:39 +000079 style="width: 123px; height: 118px; border: 0px; float: right;" /></a>
cristy3eaa0ef2010-03-06 20:35:26 +000080<a href="../../index.html">
cristyaf8d6652011-02-04 21:57:45 +000081 <img src="../../images/sprite.jpg"
82 alt="ImageMagick Sprite"
cristy3eaa0ef2010-03-06 20:35:26 +000083 style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
84</div>
85
cristyce69bb02010-07-27 19:49:46 +000086<div class="westbar">
cristy3eaa0ef2010-03-06 20:35:26 +000087
cristy3ed852e2009-09-05 21:47:34 +000088<div class="menu">
cristy83a272e2010-05-07 20:40:35 +000089 <a title="About ImageMagick" href="../../index.html">About ImageMagick</a>
cristy3ed852e2009-09-05 21:47:34 +000090</div>
cristy3ed852e2009-09-05 21:47:34 +000091<div class="menu">
cristybb503372010-05-27 20:51:26 +000092 <a title="Binary Releases" href="../../www/binary-releases.html">Binary Releases</a>
93</div>
94<div class="sub">
95 <a title="Binary Release: Unix" href="../../www/binary-releases.html#unix">Unix</a>
96</div>
97<div class="sub">
98 <a title="Binary Release: MacOS X" href="../../www/binary-releases.html#macosx">Mac OS X</a>
99</div>
100<div class="sub">
cristye6e84152011-06-06 14:16:49 +0000101 <a title="Binary Release: iOS" href="../../www/binary-releases.html#iOS">iOS</a>
cristyda16f162011-02-19 23:52:17 +0000102</div>
103<div class="sub">
cristybb503372010-05-27 20:51:26 +0000104 <a title="Binary Release: Windows" href="../../www/binary-releases.html#windows">Windows</a>
105</div>
106<div class="sep"></div>
107<div class="menu">
cristy83a272e2010-05-07 20:40:35 +0000108 <a title="Command-line Tools" href="../../www/command-line-tools.html">Command-line Tools</a>
cristy3ed852e2009-09-05 21:47:34 +0000109</div>
110<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000111 <a title="Command-line Tools: Processing" href="../../www/command-line-processing.html">Processing</a>
cristy3ed852e2009-09-05 21:47:34 +0000112</div>
113<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000114 <a title="Command-line Tools: Options" href="../../www/command-line-options.html">Options</a>
cristy3ed852e2009-09-05 21:47:34 +0000115</div>
116<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000117 <a title="Command-line Tools: Usage" href="http://www.imagemagick.org/Usage/">Usage</a>
cristy3ed852e2009-09-05 21:47:34 +0000118</div>
119<div class="menu">
cristy83a272e2010-05-07 20:40:35 +0000120 <a title="Program Interfaces" href="../../www/api.html">Program Interfaces</a>
cristy3ed852e2009-09-05 21:47:34 +0000121</div>
122<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000123 <a title="Program Interface: MagickWand" href="../../www/magick-wand.html">MagickWand</a>
cristy3ed852e2009-09-05 21:47:34 +0000124</div>
125<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000126 <a title="Program Interface: MagickCore" href="../../www/magick-core.html">MagickCore</a>
cristy3ed852e2009-09-05 21:47:34 +0000127</div>
128<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000129 <a title="Program Interface: PerlMagick" href="../../www/perl-magick.html">PerlMagick</a>
cristy3ed852e2009-09-05 21:47:34 +0000130</div>
131<div class="sub">
cristydcca3fa2010-12-29 21:50:07 +0000132 <a title="Program Interface: Magick++" href="../../www/magick++.html">Magick++</a>
cristy3ed852e2009-09-05 21:47:34 +0000133</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000134<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +0000135<div class="menu">
cristy83a272e2010-05-07 20:40:35 +0000136 <a title="Install from Source" href="../../www/install-source.html">Install from Source</a>
cristy3ed852e2009-09-05 21:47:34 +0000137</div>
138<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000139 <a title="Install from Source: Unix" href="../../www/install-source.html#unix">Unix</a>
cristy3ed852e2009-09-05 21:47:34 +0000140</div>
141<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000142 <a title="Install from Source: Windows" href="../../www/install-source.html#windows">Windows</a>
cristy3ed852e2009-09-05 21:47:34 +0000143 </div>
144<div class="menu">
cristy83a272e2010-05-07 20:40:35 +0000145 <a title="Resources" href="../../www/resources.html">Resources</a>
cristy3ed852e2009-09-05 21:47:34 +0000146</div>
cristybb503372010-05-27 20:51:26 +0000147<div class="menu">
148 <a title="Architecture" href="../../www/architecture.html">Architecture</a>
149</div>
cristy3ed852e2009-09-05 21:47:34 +0000150<div class="menu">
cristy83a272e2010-05-07 20:40:35 +0000151 <a title="Download" href="../../www/download.html">Download</a>
cristy3ed852e2009-09-05 21:47:34 +0000152</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000153<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +0000154<div class="menu">
cristy52923442011-01-15 22:54:31 +0000155 <a title="Search" href="../../www/search.html">Search</a>
cristy3ed852e2009-09-05 21:47:34 +0000156</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000157<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +0000158<div class="menu">
cristyffb69ed2010-12-25 00:06:48 +0000159 <a title="Site Map" href="../../www/sitemap.html">Site Map</a>
cristy3ed852e2009-09-05 21:47:34 +0000160</div>
161<div class="sub">
cristyffb69ed2010-12-25 00:06:48 +0000162 <a title="Site Map: Links" href="../../www/links.html">Links</a>
cristy3ed852e2009-09-05 21:47:34 +0000163</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000164<div class="sep"></div>
cristyeed6cb62012-01-28 19:38:34 +0000165<div class="menu">
cristy10549a12011-05-15 19:04:46 +0000166 <a rel="follow" title="Sponsors" href="../../www/sponsors.html">Sponsors:</a>
cristy3ed852e2009-09-05 21:47:34 +0000167
cristyeed6cb62012-01-28 19:38:34 +0000168 <a href="http://www.networkredux.com"> <img src="../../images/networkredux.png" width="140" height="31" alt="[sponsor]" style="margin-top: 4px; margin-left: 4px; border: 0px; float: left;" /></a>
169 <a href="http://www.dinodirect.com/ipads-tablets/"> <img src="../../images/dino-direct.jpg" width="140" height="90" alt="[sponsor]" style="margin-top: 4px; margin-left: 4px; border: 0px; float: left;" /></a><!-- 201204010120 mickey@163... -->
cristy3ed852e2009-09-05 21:47:34 +0000170<div class="sponsbox">
cristyeed6cb62012-01-28 19:38:34 +0000171<div class="sponsor">
172 <a rel="follow" title="Android Tablet" href="http://www.dinodirect.com/ipads-tablets/">Android Tablet</a><!-- 201204010120 mickey@163... -->
cristy81492d62011-06-07 16:41:42 +0000173</div>
cristyeed6cb62012-01-28 19:38:34 +0000174<div class="sponsor">
cristyaf894d72011-08-06 23:03:10 +0000175 <a rel="follow" title="Sponsor: Web Hosting" href="http://www.micfo.com">Web Hosting</a><!-- 209901010090s golestan -->
cristy1efc1ab2011-08-01 14:47:02 +0000176</div>
cristyeed6cb62012-01-28 19:38:34 +0000177<div class="sponsor">
178 <a rel="follow" title="Sponsor: Autos Part" href="http://www.pkwteile.de/autoteile">Autos Part</a><!-- 201203010270 info@pkwte... -->
cristy84134182011-06-15 22:59:00 +0000179</div>
cristyeed6cb62012-01-28 19:38:34 +0000180<div class="sponsor">
181 <a rel="follow" title="Sponsor: Web Site Hosting" href="http://webhostinggeeks.com">Web Site Hosting</a><!-- 201302010900 funds@enmob... -->
cristy81492d62011-06-07 16:41:42 +0000182</div>
cristyeed6cb62012-01-28 19:38:34 +0000183<div class="sponsor">
184 <a rel="follow" title="Sponsor: Tenant Check" href="http://www.rentmethod.com/">Tenant Check</a><!-- 201203010090 chris@rentm... -->
cristyba1758d2011-06-03 01:29:12 +0000185</div>
cristyeed6cb62012-01-28 19:38:34 +0000186<div class="sponsor">
187 <a rel="follow" title="Sponsor: VPS" href="http://www.interdominios.com/vps">VPS</a><!-- 201204010090 barsh@inter... -->
cristyaf894d72011-08-06 23:03:10 +0000188</div>
cristyeed6cb62012-01-28 19:38:34 +0000189<div class="sponsor">
190 <a rel="follow" title="Sponsor: Premium Quality Stock Photos" href="http://www.f1online.pro/en/">Premium Quality Stock Photos</a><!-- 2012080100540 ... -->
191</div>
192<div class="sponsor">
193 <a rel="follow" title="Sponsor: Search engine optimisation" href="http://www.seomoves.com.au">Search engine optimisation</a><!-- 201301010090s jen@seo lowprofilelinks -->
194</div>
195<div class="sponsor">
196 <a rel="follow" title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 2012070100250 ... -->
197</div>
198<div class="sponsor">
199 <a rel="follow" title="Sponsor: Managed Server" href="http://www.robhost.de">Managed Server</a><!-- 201210010720 klikics... -->
200</div>
201<div class="sponsor">
202 <a rel="follow" title="Sponsor: Stock Photography" href="http://www.fotosearch.com/">Stock Photography</a><!-- 2012040100250 ... -->
203</div>
204<div class="sponsor">
205 <a rel="follow" title="Sponsor: Autoteile" href="http://www.q11-shop.de">Autoteile</a><!-- 201205010540 suvalj -->
206</div>
207<div class="sponsor">
208 <a rel="follow" title="Sponsor: Royalty Free Stock Images" href="http://www.canstockphoto.com/">Royalty Free Stock Images</a><!-- 2012050100360 support@can -->
209</div>
210<div class="sponsor">
cristyba1758d2011-06-03 01:29:12 +0000211 <a rel="follow" title="Sponsor: Web Hosting Reviews" href="http://www.webhostingsecretrevealed.com">Web Hosting Secret Revealed</a><!-- 201204010540 iamchee jerry -->
212</div>
cristyeed6cb62012-01-28 19:38:34 +0000213<div class="sponsor">
cristy10549a12011-05-15 19:04:46 +0000214 <a rel="follow" title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201303011500 r.leo -->
cristy4c54bbb2011-03-17 13:53:13 +0000215</div>
cristyeed6cb62012-01-28 19:38:34 +0000216<div class="sponsor">
217 <a rel="follow" title="Sponsor: Notebook Reparatur" href="http://www.notebook-reparaturen-berlin.de">Notebook Reparatur</a><!-- 2012050100300 atlas.multimedia-->
cristy4bf6e232011-05-21 01:43:33 +0000218</div>
cristyeed6cb62012-01-28 19:38:34 +0000219<div class="sponsor">
220 <a rel="follow" title="Sponsor: Web Hosting" href="http://www.hostucan.com">Web Hosting</a><!-- 2012030100300 accounting@webhostingclue -->
cristyec6b4752011-01-08 03:16:23 +0000221</div>
cristy3ed852e2009-09-05 21:47:34 +0000222</div>
223</div>
cristyce69bb02010-07-27 19:49:46 +0000224</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000225
cristyce69bb02010-07-27 19:49:46 +0000226<div class="eastbar">
cristy29c5c992011-06-25 13:58:49 +0000227 <div class="g-plusone" data-size="standard" data-count="false"></div>
cristyeed6cb62012-01-28 19:38:34 +0000228 <script type="text/javascript">
229 window.___gcfg = {
230 lang: 'en-US'
231 };
232
233 (function() {
234 var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
235 po.src = 'https://apis.google.com/js/plusone.js';
236 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
237 })();
238 </script>
cristy29c5c992011-06-25 13:58:49 +0000239</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000240
241<div class="main">
242
cristy20398432011-08-11 01:31:50 +0000243<h1>Module layer Methods</h1>
244<p class="navigation-index">[<a href="#CoalesceImages">CoalesceImages</a> &bull; <a href="#DisposeImages">DisposeImages</a> &bull; <a href="#CompareImageLayers">CompareImageLayers</a> &bull; <a href="#DeconstructImages">DeconstructImages</a> &bull; <a href="#OptimizeImageLayers">OptimizeImageLayers</a> &bull; <a href="#OptimizeImagePlusLayers">OptimizeImagePlusLayers</a> &bull; <a href="#OptimizeImageTransparency">OptimizeImageTransparency</a> &bull; <a href="#RemoveDuplicateLayers">RemoveDuplicateLayers</a> &bull; <a href="#RemoveZeroDelayLayers">RemoveZeroDelayLayers</a> &bull; <a href="#CompositeLayers">CompositeLayers</a> &bull; <a href="#MergeImageLayers">MergeImageLayers</a>]</p>
cristy6f77f692011-02-15 15:31:39 +0000245
cristy20398432011-08-11 01:31:50 +0000246<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="CoalesceImages">CoalesceImages</a></h2>
247<div class="doc-section">
248
249<p>CoalesceImages() composites a set of images while respecting any page offsets and disposal methods. GIF, MIFF, and MNG animation sequences typically start with an image background and each subsequent image varies in size and offset. A new image sequence is returned with all images the same size as the first images virtual canvas and composited with the next image in the sequence.</p>
250
251<p>The format of the CoalesceImages method is:</p>
252
253<pre class="code">
254 Image *CoalesceImages(Image *image,ExceptionInfo *exception)
255</pre>
256
257<p>A description of each parameter follows:</p>
258
259<h5>image</h5>
260<p>the image sequence.</p>
261
262<h5>exception</h5>
263<p>return any errors or warnings in this structure.</p>
264
265 </div>
266<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="DisposeImages">DisposeImages</a></h2>
267<div class="doc-section">
268
269<p>DisposeImages() returns the coalesced frames of a GIF animation as it would appear after the GIF dispose method of that frame has been applied. That is it returned the appearance of each frame before the next is overlaid.</p>
270
271<p>The format of the DisposeImages method is:</p>
272
273<pre class="code">
274 Image *DisposeImages(Image *image,ExceptionInfo *exception)
275</pre>
276
277<p>A description of each parameter follows:</p>
278
279<h5>image</h5>
280<p>the image sequence.</p>
281
282<h5>exception</h5>
283<p>return any errors or warnings in this structure.</p>
284
285 </div>
286<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="CompareImageLayers">CompareImageLayers</a></h2>
287<div class="doc-section">
288
289<p>CompareImageLayers() compares each image with the next in a sequence and returns the minimum bounding region of all the pixel differences (of the ImageLayerMethod specified) it discovers.</p>
290
291<p>Images do NOT have to be the same size, though it is best that all the images are 'coalesced' (images are all the same size, on a flattened canvas, so as to represent exactly how an specific frame should look).</p>
292
293<p>No GIF dispose methods are applied, so GIF animations must be coalesced before applying this image operator to find differences to them.</p>
294
295<p>The format of the CompareImageLayers method is:</p>
296
297<pre class="code">
298 Image *CompareImageLayers(const Image *images,
299 const ImageLayerMethod method,ExceptionInfo *exception)
300</pre>
301
302<p>A description of each parameter follows:</p>
303
304<h5>image</h5>
305<p>the image.</p>
306
307<h5>method</h5>
308<p>the layers type to compare images with. Must be one of... CompareAnyLayer, CompareClearLayer, CompareOverlayLayer.</p>
309
310<h5>exception</h5>
311<p>return any errors or warnings in this structure.</p>
312
313 </div>
314<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="DeconstructImages">DeconstructImages</a></h2>
315<div class="doc-section">
316
317<p>DeconstructImages() compares each image with the next in a sequence and returns the minimum bounding region of all differences from the first image.</p>
318
319<p>This function is deprecated in favor of the more universal CompareImageLayers() function.</p>
320
321<p>The format of the DeconstructImages method is:</p>
322
323<pre class="code">
324 Image *DeconstructImages(const Image *images, ExceptionInfo *exception)
325</pre>
326
327<p>A description of each parameter follows:</p>
328
329<h5>image</h5>
330<p>the image.</p>
331
332<h5>exception</h5>
333<p>return any errors or warnings in this structure.</p>
334
335 </div>
336<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="OptimizeImageLayers">OptimizeImageLayers</a></h2>
337<div class="doc-section">
338
339<p>OptimizeImageLayers() compares each image the GIF disposed forms of the previous image in the sequence. From this it attempts to select the smallest cropped image to replace each frame, while preserving the results of the GIF animation.</p>
340
341<p>The format of the OptimizeImageLayers method is:</p>
342
343<pre class="code">
344 Image *OptimizeImageLayers(const Image *image,
345 ExceptionInfo *exception)
346</pre>
347
348<p>A description of each parameter follows:</p>
349
350<h5>image</h5>
351<p>the image.</p>
352
353<h5>exception</h5>
354<p>return any errors or warnings in this structure.</p>
355
356 </div>
357<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="OptimizeImagePlusLayers">OptimizeImagePlusLayers</a></h2>
358<div class="doc-section">
359
360<p>OptimizeImagePlusLayers() is exactly as OptimizeImageLayers(), but may also add or even remove extra frames in the animation, if it improves the total number of pixels in the resulting GIF animation.</p>
361
362<p>The format of the OptimizePlusImageLayers method is:</p>
363
364<pre class="code">
365 Image *OptimizePlusImageLayers(const Image *image,
366 ExceptionInfo *exception)
367</pre>
368
369<p>A description of each parameter follows:</p>
370
371<h5>image</h5>
372<p>the image.</p>
373
374<h5>exception</h5>
375<p>return any errors or warnings in this structure.</p>
376
377 </div>
378<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="OptimizeImageTransparency">OptimizeImageTransparency</a></h2>
379<div class="doc-section">
380
381<p>OptimizeImageTransparency() takes a frame optimized GIF animation, and compares the overlayed pixels against the disposal image resulting from all the previous frames in the animation. Any pixel that does not change the disposal image (and thus does not effect the outcome of an overlay) is made transparent.</p>
382
383<p>WARNING: This modifies the current images directly, rather than generate a new image sequence.</p>
384
385<p>The format of the OptimizeImageTransperency method is:</p>
386
387<pre class="code">
388 void OptimizeImageTransperency(Image *image,ExceptionInfo *exception)
389</pre>
390
391<p>A description of each parameter follows:</p>
392
393<h5>image</h5>
394<p>the image sequence</p>
395
396<h5>exception</h5>
397<p>return any errors or warnings in this structure.</p>
398
399 </div>
400<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="RemoveDuplicateLayers">RemoveDuplicateLayers</a></h2>
401<div class="doc-section">
402
403<p>RemoveDuplicateLayers() removes any image that is exactly the same as the next image in the given image list. Image size and virtual canvas offset must also match, though not the virtual canvas size itself.</p>
404
405<p>No check is made with regards to image disposal setting, though it is the dispose setting of later image that is kept. Also any time delays are also added together. As such coalesced image animations should still produce the same result, though with duplicte frames merged into a single frame.</p>
406
407<p>The format of the RemoveDuplicateLayers method is:</p>
408
409<pre class="code">
410 void RemoveDuplicateLayers(Image **image, ExceptionInfo *exception)
411</pre>
412
413<p>A description of each parameter follows:</p>
414
415<h5>images</h5>
416<p>the image list</p>
417
418<h5>exception</h5>
419<p>return any errors or warnings in this structure.</p>
420
421 </div>
422<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="RemoveZeroDelayLayers">RemoveZeroDelayLayers</a></h2>
423<div class="doc-section">
424
425<p>RemoveZeroDelayLayers() removes any image that as a zero delay time. Such images generally represent intermediate or partial updates in GIF animations used for file optimization. They are not ment to be displayed to users of the animation. Viewable images in an animation should have a time delay of 3 or more centi-seconds (hundredths of a second).</p>
426
427<p>However if all the frames have a zero time delay, then either the animation is as yet incomplete, or it is not a GIF animation. This a non-sensible situation, so no image will be removed and a 'Zero Time Animation' warning (exception) given.</p>
428
429<p>No warning will be given if no image was removed because all images had an appropriate non-zero time delay set.</p>
430
431<p>Due to the special requirements of GIF disposal handling, GIF animations should be coalesced first, before calling this function, though that is not a requirement.</p>
432
433<p>The format of the RemoveZeroDelayLayers method is:</p>
434
435<pre class="code">
436 void RemoveZeroDelayLayers(Image **image, ExceptionInfo *exception)
437</pre>
438
439<p>A description of each parameter follows:</p>
440
441<h5>images</h5>
442<p>the image list</p>
443
444<h5>exception</h5>
445<p>return any errors or warnings in this structure.</p>
446
447 </div>
448<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="CompositeLayers">CompositeLayers</a></h2>
449<div class="doc-section">
450
451<p>CompositeLayers() compose first image sequence (source) over the second image sequence (destination), using the given compose method and offsets.</p>
452
453<p>The pointers to the image list does not have to be the start of that image list, but may start somewhere in the middle. Each layer from the two image lists are composted together until the end of one of the image lists is reached. The offset of each composition is also adjusted to match the virtual canvas offsets of each layer. As such the given offset is relative to the virtual canvas, and not the actual image.</p>
454
455<p>No GIF disposal handling is performed, so GIF animations should be coalesced before use. However this not a requirement, and individual layer images may have any size or offset, for special compositions.</p>
456
457<p>Special case:- If one of the image sequences is just a single image that image is repeatally composed with all the images in the other image list. Either the source or destination lists may be the single image, for this situation.</p>
458
459<p>The destination list will be expanded as needed to match number of source image overlaid (from current position to end of list).</p>
460
461<p>The format of the CompositeLayers method is:</p>
462
463<pre class="code">
464 void CompositeLayers(Image *destination,
465 const CompositeOperator compose, Image *source,
466 const ssize_t x_offset, const ssize_t y_offset,
467 ExceptionInfo *exception);
468</pre>
469
470<p>A description of each parameter follows:</p>
471
472<h5>destination</h5>
473<p>the destination images and results</p>
474
475<h5>source</h5>
476<p>source image(s) for the layer composition</p>
477
478<h5>compose, x_offset, y_offset</h5>
479<p>arguments passed on to CompositeImages()</p>
480
481<h5>exception</h5>
482<p>return any errors or warnings in this structure.</p>
483
484 </div>
485<h2><a href="http://www.imagemagick.org/api/MagickCore/layer_8c.html" id="MergeImageLayers">MergeImageLayers</a></h2>
486<div class="doc-section">
487
488<p>MergeImageLayers() composes all the image layers from the current given image onward to produce a single image of the merged layers.</p>
489
490<p>The inital canvas's size depends on the given ImageLayerMethod, and is initialized using the first images background color. The images are then compositied onto that image in sequence using the given composition that has been assigned to each individual image.</p>
491
492<p>The format of the MergeImageLayers is:</p>
493
494<pre class="text">
495 Image *MergeImageLayers(const Image *image,
496 const ImageLayerMethod method, ExceptionInfo *exception)
497</pre>
498
499<p>A description of each parameter follows:</p>
500
501<h5>image</h5>
502<p>the image list to be composited together</p>
503
504<h5>method</h5>
505<p>the method of selecting the size of the initial canvas.</p>
506
507<p>MergeLayer: Merge all layers onto a canvas just large enough to hold all the actual images. The virtual canvas of the first image is preserved but otherwise ignored.</p>
508
509<p>FlattenLayer: Use the virtual canvas size of first image. Images which fall outside this canvas is clipped. This can be used to 'fill out' a given virtual canvas.</p>
510
511<p>MosaicLayer: Start with the virtual canvas of the first image, enlarging left and right edges to contain all images. Images with negative offsets will be clipped.</p>
512
513<p>TrimBoundsLayer: Determine the overall bounds of all the image layers just as in "MergeLayer", then adjust the the canvas and offsets to be relative to those bounds, without overlaying the images.</p>
514
515<p>WARNING: a new image is not returned, the original image sequence page data is modified instead.</p>
516
517<h5>exception</h5>
518<p>return any errors or warnings in this structure.</p>
519
520 </div>
cristy3eaa0ef2010-03-06 20:35:26 +0000521
522</div>
523
524<div id="linkbar">
cristyce69bb02010-07-27 19:49:46 +0000525 <span id="linkbar-west">&nbsp;</span>
cristy3eaa0ef2010-03-06 20:35:26 +0000526 <span id="linkbar-center">
527 <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> &bull;
cristya8902942010-07-30 00:49:52 +0000528 <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Studio</a>
cristy3eaa0ef2010-03-06 20:35:26 +0000529 </span>
530 <span id="linkbar-east">&nbsp;</span>
531 </div>
532 <div class="footer">
cristyeed6cb62012-01-28 19:38:34 +0000533 <span id="footer-west">&copy; 1999-2011 ImageMagick Studio LLC</span>
cristy3eaa0ef2010-03-06 20:35:26 +0000534 <span id="footer-east"> <a href="../http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>
535 </div>
536 <div style="clear: both; margin: 0; width: 100%; "></div>
cristya8902942010-07-30 00:49:52 +0000537 <script type="text/javascript">
538 var _gaq = _gaq || [];
539 _gaq.push(['_setAccount', 'UA-17690367-1']);
540 _gaq.push(['_trackPageview']);
541
542 (function() {
543 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
544 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
545 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
546 })();
547 </script>
cristy3eaa0ef2010-03-06 20:35:26 +0000548</body>
549</html>