]> granicus.if.org Git - imagemagick/blob - www/api/layer.html
(no commit message)
[imagemagick] / www / api / layer.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\r
2     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
4 <head>\r
5   <meta http-equiv="Content-Type" value="application/xhtml+xml" />\r
6   <meta name="verify-v1" content="g222frIIxcQTrvDR3NBRUSKP3AnMNoqxOkIniCEkV7U=" />\r
7   <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf" />\r
8   <style type="text/css" media="screen,projection"><!--\r
9     @import url("../../www/magick.css");\r
10   --></style>\r
11   <link rel="shortcut icon" href="../../images/wand.ico"  type="images/vnd.microsoft.icon"/>
12   <title>ImageMagick: MagickCore, C API for ImageMagick: Dealing with Image Layers</title>
13   <meta http-equiv="Content-Language" content="en-US"/>
14   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
15   <meta http-equiv="Reply-to" content="magick-users@imagemagick.org"/>
16   <meta name="Generator" content="PHP"/>
17   <meta name="Keywords" content="magickcore, c, api, for, imagemagick:, dealing, with, image, layers, ImageMagick, ImageMagic, MagickCore, MagickWand, PerlMagick, Magick++, RMagick, PythonMagick, JMagick, TclMagick, Image, Magick, Magic, Wand, ImageMagickObject, Swiss, Army, Knife, Image, Processing"/>
18   <meta name="Description" content="ImageMagick® is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats (about 100) including GIF, JPEG, JPEG-2000, PNG, PDF, PhotoCD, TIFF, and DPX. Use ImageMagick to translate, flip, mirror, rotate, scale, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.  ImageMagick is free software delivered as a ready-to-run binary distribution or as source code that you can freely use, copy, modify, and distribute. Its license is compatible with the GPL. It runs on all major operating systems.  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."/>
19   <meta name="Rating" content="GENERAL"/>
20   <meta name="Robots" content="INDEX, FOLLOW"/>
21   <meta name="Generator" content="ImageMagick Studio LLC"/>
22   <meta name="Author" content="ImageMagick Studio LLC"/>
23   <meta name="Revisit-after" content="2 DAYS"/>
24   <meta name="Resource-type" content="document"/>
25   <meta name="Copyright" content="Copyright (c) 1999-2010 ImageMagick Studio LLC"/>
26   <meta name="Distribution" content="Global"/>
27 </head>\r
28 \r
29 <body id="www-imagemagick-org">\r
30 <div class="titlebar">\r
31 <a href="../../index.html">\r
32   <img src="../../images/script.png" alt="[ImageMagick]"\r
33   style="width: 350px; height: 60px; margin: 28px auto; float: left;" /></a>\r
34 <a href="http://www.networkredux.com">\r
35   <img src="../../images/networkredux.png" alt="[sponsor]"\r
36   style="margin: 45px auto; border: 0px; float: left;" /></a>\r
37 <a href="http://www.imagemagick.org/discourse-server/">\r
38   <img src="../../images/logo.jpg" alt=""\r
39   style="width: 114px; height: 118px; border: 0px; float: right;" /></a>\r
40 <a href="../../index.html">\r
41   <img src="../../images/sprite.jpg" alt=""\r
42   style="width: 114px; height: 118px; border: 0px; float: right;" /></a>\r
43 </div>\r
44 \r
45 <div class="eastbar">\r
46 \r
47 <div class="menu">
48   <a href="../../index.html">About ImageMagick</a>
49 </div>
50 <div class="sep"></div>\r
51 <div class="menu">
52   <a href="../../www/command-line-tools.html">Command-line Tools</a>
53 </div>
54 <div class="sub">
55     <a href="../../www/command-line-processing.html">Processing</a>
56 </div>
57 <div class="sub">
58     <a href="../../www/command-line-options.html">Options</a>
59 </div>
60 <div class="sub">
61     <a href="http://www.imagemagick.org/Usage/">Usage</a>
62 </div>
63 <div class="menu">
64   <a href="../../www/api.html">Program Interfaces</a>
65 </div>
66 <div class="sub">
67     <a href="../../www/magick-wand.html">MagickWand</a>
68 </div>
69 <div class="sub">
70     <a href="../../www/magick-core.html">MagickCore</a>
71 </div>
72 <div class="sub">
73     <a href="../../www/perl-magick.html">PerlMagick</a>
74 </div>
75 <div class="sub">
76     <a href="../../Magick++/">Magick++</a>
77 </div>
78 <div class="menu">
79   <a href="../../www/architecture.html">Architecture</a>
80 </div>
81 <div class="sep"></div>\r
82 <div  class="menu">
83    <a href="../../www/install-source.html">Install from Source</a>
84 </div>
85 <div class="sub">
86     <a href="../../www/install-source.html#unix">Unix</a>
87 </div>
88 <div class="sub">
89     <a href="../../www/install-source.html#windows">Windows</a>
90  </div>
91 <div class="menu">
92   <a href="../../www/binary-releases.html">Binary Releases</a>
93 </div>
94 <div class="sub">
95     <a href="../../www/binary-releases.html#unix">Unix</a>
96 </div>
97 <div class="sub">
98     <a href="../../www/binary-releases.html#macosx">Mac OS X</a>
99 </div>
100 <div class="sub">
101     <a href="../../www/binary-releases.html#windows">Windows</a>
102 </div>
103 <div class="menu">
104   <a href="../../www/resources.html">Resources</a>
105 </div>
106 <div class="sep"></div>\r
107 <div class="menu">
108   <a href="../../www/download.html">Download</a>
109 </div>
110 <div class="sep"></div>\r
111 <div class="menu">
112   <a href="../http://www.imagemagick.org/script/search.php">Search</a>
113 </div>
114 <div class="sep"></div>\r
115 <div class="menu">
116   <a href="../../www/sitemap.html">Site Map</a>
117 </div>
118 <div  class="sub">
119     <a href="../../www/links.html">Links</a>
120 </div>
121 <div class="sep"></div>\r
122 <div  class="menu">
123   <a href="../../www/sponsors.html">Sponsors:</a>
124
125 <div class="sponsbox">
126 <div  class="sponsor">
127    <a href="http://www.hygi.de">Reinigungsmittel</a><!-- 201002000400+ -->
128 </div>
129 <div  class="sponsor">
130   <a href="http://www.tomsgutscheine.de">Tom's Gutscheine</a><!-- 201005010360 invendio.de-->
131 </div>
132 <div  class="sponsor">
133   <a href="http://www.online-kredit-index.de">Kredit</a><!-- 201006010120 Buchhorn -->
134 </div>
135 <div  class="sponsor">
136   <a href="http://www.blumenversender.com">Blumenversand</a><!-- 201005010120 -->
137 </div>
138 <div  class="sponsor">
139   <a href="http://www.print24.de/">Druckerei</a><!-- 201009010720 -->
140 </div>
141 <div  class="sponsor">
142    <a href="http://www.goyax.de">Börse</a><!-- 201004010240 Gewiese digital-finance.de -->
143 </div>
144 <div  class="sponsor">
145    <a href="http://www.allesdruck.de">Druckerei Online</a><!-- 201012011200 allesdruck.de-->
146 </div>
147 <div  class="sponsor">
148   <a href="http://www.who-sells-it.com/">Free Catalogs</a><!-- 201002010000 -->
149 </div>
150 </div>
151 </div>
152 \r
153 \r
154 </div>\r
155 \r
156 <div class="main">\r
157 \r
158 <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>
159
160 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
161 _8c.html" target="source" name="CoalesceImages">CoalesceImages</a></h2>
162 <div class="doc-section">
163
164 <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></ol>
165
166 <p>The format of the CoalesceImages method is:</p>
167
168 <pre class="code">
169   Image *CoalesceImages(Image *image,ExceptionInfo *exception)
170 </pre>
171
172 <p>A description of each parameter follows:</p></ol>
173
174 <h5>image</h5>
175 <ol><p>the image sequence.</p></ol>
176
177 <h5>exception</h5>
178 <ol><p>return any errors or warnings in this structure.</p></ol>
179
180  </div>
181 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
182 _8c.html" target="source" name="DisposeImages">DisposeImages</a></h2>
183 <div class="doc-section">
184
185 <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></ol>
186
187 <p>The format of the DisposeImages method is:</p>
188
189 <pre class="code">
190   Image *DisposeImages(Image *image,ExceptionInfo *exception)
191 </pre>
192
193 <p>A description of each parameter follows:</p></ol>
194
195 <h5>image</h5>
196 <ol><p>the image sequence.</p></ol>
197
198 <h5>exception</h5>
199 <ol><p>return any errors or warnings in this structure.</p></ol>
200
201  </div>
202 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
203 _8c.html" target="source" name="CompareImageLayers">CompareImageLayers</a></h2>
204 <div class="doc-section">
205
206 <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></ol>
207
208 <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></ol>
209
210 <p>No GIF dispose methods are applied, so GIF animations must be coalesced before applying this image operator to find differences to them.</p></ol>
211
212 <p>The format of the CompareImageLayers method is:</p>
213
214 <pre class="code">
215   Image *CompareImageLayers(const Image *images,
216     const ImageLayerMethod method,ExceptionInfo *exception)
217 </pre>
218
219 <p>A description of each parameter follows:</p></ol>
220
221 <h5>image</h5>
222 <ol><p>the image.</p></ol>
223
224 <h5>method</h5>
225 <ol><p>the layers type to compare images with. Must be one of... CompareAnyLayer, CompareClearLayer, CompareOverlayLayer.</p></ol>
226
227 <h5>exception</h5>
228 <ol><p>return any errors or warnings in this structure.</p></ol>
229
230  </div>
231 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
232 _8c.html" target="source" name="DeconstructImages">DeconstructImages</a></h2>
233 <div class="doc-section">
234
235 <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></ol>
236
237 <p>This function is deprecated in favor of the more universal CompareImageLayers() function.</p></ol>
238
239 <p>The format of the DeconstructImages method is:</p>
240
241 <pre class="code">
242   Image *DeconstructImages(const Image *images, ExceptionInfo *exception)
243 </pre>
244
245 <p>A description of each parameter follows:</p></ol>
246
247 <h5>image</h5>
248 <ol><p>the image.</p></ol>
249
250 <h5>exception</h5>
251 <ol><p>return any errors or warnings in this structure.</p></ol>
252
253  </div>
254 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
255 _8c.html" target="source" name="OptimizeImageLayers">OptimizeImageLayers</a></h2>
256 <div class="doc-section">
257
258 <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></ol>
259
260 <p>The format of the OptimizeImageLayers method is:</p>
261
262 <pre class="code">
263   Image *OptimizeImageLayers(const Image *image,
264            ExceptionInfo *exception)
265 </pre>
266
267 <p>A description of each parameter follows:</p></ol>
268
269 <h5>image</h5>
270 <ol><p>the image.</p></ol>
271
272 <h5>exception</h5>
273 <ol><p>return any errors or warnings in this structure.</p></ol>
274
275  </div>
276 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
277 _8c.html" target="source" name="OptimizeImagePlusLayers">OptimizeImagePlusLayers</a></h2>
278 <div class="doc-section">
279
280 <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></ol>
281
282 <p>The format of the OptimizePlusImageLayers method is:</p>
283
284 <pre class="code">
285   Image *OptimizePlusImageLayers(const Image *image,
286            ExceptionInfo *exception)
287 </pre>
288
289 <p>A description of each parameter follows:</p></ol>
290
291 <h5>image</h5>
292 <ol><p>the image.</p></ol>
293
294 <h5>exception</h5>
295 <ol><p>return any errors or warnings in this structure.</p></ol>
296
297  </div>
298 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
299 _8c.html" target="source" name="OptimizeImageTransparency">OptimizeImageTransparency</a></h2>
300 <div class="doc-section">
301
302 <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></ol>
303
304 <p>WARNING: This modifies the current images directly, rather than generate a new image sequence.</p></ol>
305
306 <p>The format of the OptimizeImageTransperency method is:</p>
307
308 <pre class="code">
309   void OptimizeImageTransperency(Image *image,ExceptionInfo *exception)
310 </pre>
311
312 <p>A description of each parameter follows:</p></ol>
313
314 <h5>image</h5>
315 <ol><p>the image sequence</p></ol>
316
317 <h5>exception</h5>
318 <ol><p>return any errors or warnings in this structure.</p></ol>
319
320  </div>
321 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
322 _8c.html" target="source" name="RemoveDuplicateLayers">RemoveDuplicateLayers</a></h2>
323 <div class="doc-section">
324
325 <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></ol>
326
327 <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></ol>
328
329 <p>The format of the RemoveDuplicateLayers method is:</p>
330
331 <pre class="code">
332   void RemoveDuplicateLayers(Image **image, ExceptionInfo *exception)
333 </pre>
334
335 <p>A description of each parameter follows:</p></ol>
336
337 <h5>images</h5>
338 <ol><p>the image list</p></ol>
339
340 <h5>exception</h5>
341 <ol><p>return any errors or warnings in this structure.</p></ol>
342
343  </div>
344 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
345 _8c.html" target="source" name="RemoveZeroDelayLayers">RemoveZeroDelayLayers</a></h2>
346 <div class="doc-section">
347
348 <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></ol>
349
350 <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></ol>
351
352 <p>No warning will be given if no image was removed because all images had an appropriate non-zero time delay set.</p></ol>
353
354 <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></ol>
355
356 <p>The format of the RemoveZeroDelayLayers method is:</p>
357
358 <pre class="code">
359   void RemoveZeroDelayLayers(Image **image, ExceptionInfo *exception)
360 </pre>
361
362 <p>A description of each parameter follows:</p></ol>
363
364 <h5>images</h5>
365 <ol><p>the image list</p></ol>
366
367 <h5>exception</h5>
368 <ol><p>return any errors or warnings in this structure.</p></ol>
369
370  </div>
371 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
372 _8c.html" target="source" name="CompositeLayers">CompositeLayers</a></h2>
373 <div class="doc-section">
374
375 <p>CompositeLayers() compose first image sequence (source) over the second image sequence (destination), using the given compose method and offsets.</p></ol>
376
377 <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></ol>
378
379 <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></ol>
380
381 <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></ol>
382
383 <p>The destination list will be expanded as needed to match number of source image overlaid (from current position to end of list).</p></ol>
384
385 <p>The format of the CompositeLayers method is:</p>
386
387 <pre class="code">
388   void CompositeLayers(Image *destination,
389       const CompositeOperator compose, Image *source,
390       const long x_offset, const long y_offset,
391       ExceptionInfo *exception);
392 </pre>
393
394 <p>A description of each parameter follows:</p></ol>
395
396 <h5>destination</h5>
397 <ol><p>the destination images and results</p></ol>
398
399 <h5>source</h5>
400 <ol><p>source image(s) for the layer composition</p></ol>
401
402 <h5>compose, x_offset, y_offset</h5>
403 <ol><p>arguments passed on to CompositeImages()</p></ol>
404
405 <h5>exception</h5>
406 <ol><p>return any errors or warnings in this structure.</p></ol>
407
408  </div>
409 <h2><a href="http://www.imagemagick.org/api/MagickCore/layer
410 _8c.html" target="source" name="MergeImageLayers">MergeImageLayers</a></h2>
411 <div class="doc-section">
412
413 <p>MergeImageLayers() composes all the image layers from the current given image onward to produce a single image of the merged layers.</p></ol>
414
415 <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></ol>
416
417 <p>The format of the MergeImageLayers is:</p>
418
419 <pre class="text">
420   Image *MergeImageLayers(const Image *image,
421     const ImageLayerMethod method, ExceptionInfo *exception)
422 </pre>
423
424 <p>A description of each parameter follows:</p></ol>
425
426 <h5>image</h5>
427 <ol><p>the image list to be composited together</p></ol>
428
429 <h5>method</h5>
430 <ol><p>the method of selecting the size of the initial canvas.</p></ol>
431
432 <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></ol>
433
434 <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></ol>
435
436 <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></ol>
437
438 <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></ol>
439
440 <p>WARNING: a new image is not returned, the original image sequence page data is modified instead.</p></ol>
441
442 <h5>exception</h5>
443 <ol><p>return any errors or warnings in this structure.</p></ol>
444
445  </div>
446 \r
447 </div>\r
448 \r
449 <div id="linkbar">\r
450  <!--    <span id="linkbar-west">&nbsp;</span>  -->\r
451     <span id="linkbar-center">\r
452       <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> &bull;\r
453     <a href="http://studio.webbyland.com/ImageMagick/MagickStudio/scripts/MagickStudio.cgi">Studio</a>\r
454     </span>\r
455     <span id="linkbar-east">&nbsp;</span>\r
456   </div>\r
457   <div class="footer">\r
458     <span id="footer-west">&copy; 1999-2010 ImageMagick Studio LLC</span>\r
459     <span id="footer-east"> <a href="../http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>\r
460   </div>\r
461   <div style="clear: both; margin: 0; width: 100%; "></div>\r
462 </body>\r
463 </html>\r