2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
\r
3 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
\r
4 <html version="-//W3C//DTD XHTML 1.1//EN"
\r
5 xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
\r
6 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
\r
7 xsi:schemaLocation="http://www.w3.org/1999/xhtml
\r
8 http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">
\r
10 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
\r
11 <meta name="google-site-verification" content="MxsMq6bdLOx0KSuz1MY6yG9ZTIJ7_7DVRfl5NCAT5Yg"/>
\r
12 <title>ImageMagick: MagickWand, C API for ImageMagick</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="Application-name" content="ImageMagick"/>
17 <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."/>
18 <meta name="Application-url" content="http://www.imagemagick.org"/>
19 <meta name="Generator" content="PHP"/>
20 <meta name="Keywords" content="magickwc, api, for, imagemagick, ImageMagick, PerlMagick, image processing, OpenMP, software development library, image, photo, software, Magick++, MagickWand"/>
21 <meta name="Rating" content="GENERAL"/>
22 <meta name="Robots" content="INDEX, FOLLOW"/>
23 <meta name="Generator" content="ImageMagick Studio LLC"/>
24 <meta name="Author" content="ImageMagick Studio LLC"/>
25 <meta name="Revisit-after" content="2 DAYS"/>
26 <meta name="Resource-type" content="document"/>
27 <meta name="Copyright" content="Copyright (c) 1999-2012 ImageMagick Studio LLC"/>
28 <meta name="Distribution" content="Global"/>
29 <link rel="icon" href="../images/wand.png"/>
30 <link rel="shortcut icon" href="../images/wand.ico" type="images/x-icon"/>
31 <link rel="canonical" href="http://www.imagemagick.org" />
\r
32 <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>
\r
33 <!-- Add jQuery library -->
\r
34 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
\r
36 <!-- Optionaly include easing and/or mousewheel plugins -->
\r
37 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.easing-1.3.pack.js"></script>
\r
38 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.mousewheel-3.0.6.pack.js"></script>
\r
40 <!-- Add fancyBox -->
\r
41 <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/jquery.fancybox.css?v=2.0.3" type="text/css" media="screen" />
\r
42 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.fancybox.pack.js?v=2.0.3"></script>
\r
44 <!-- Optionaly include button and/or thumbnail helpers -->
\r
45 <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-buttons.css?v=2.0.3" type="text/css" media="screen" />
\r
46 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-buttons.js?v=2.0.3"></script>
\r
48 <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-thumbs.css?v=2.0.3" type="text/css" media="screen" />
\r
49 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-thumbs.js?v=2.0.3"></script>
\r
50 <script type="text/javascript">
\r
51 $(document).ready(function() {
\r
52 $(".fancybox").fancybox();
\r
55 <!-- ImageMagick style -->
\r
56 <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" />
\r
57 <style type="text/css" media="all">
\r
58 @import url("../www/magick.css");
\r
62 <body id="www-imagemagick-org">
\r
63 <div class="titlebar">
\r
64 <div style="margin: 17px auto; float: left;">
\r
65 <script type="text/javascript">
\r
67 google_ad_client = "pub-3129977114552745";
\r
68 google_ad_slot = "5439289906";
\r
69 google_ad_width = 728;
\r
70 google_ad_height = 90;
\r
73 <script type="text/javascript"
\r
74 src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
\r
77 <a href="http://www.imagemagick.org/discourse-server/">
\r
78 <img src="../images/logo.jpg"
\r
79 alt="ImageMagick Logo"
\r
80 style="width: 123px; height: 118px; border: 0px; float: right;" /></a>
\r
81 <a href="../index.html">
\r
82 <img src="../images/sprite.jpg"
\r
83 alt="ImageMagick Sprite"
\r
84 style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
\r
87 <div class="westbar">
\r
90 <a title="About ImageMagick" href="../index.html">About ImageMagick</a>
93 <a title="Binary Releases" href="../www/binary-releases.html">Binary Releases</a>
96 <a title="Binary Release: Unix" href="../www/binary-releases.html#unix">Unix</a>
99 <a title="Binary Release: MacOS X" href="../www/binary-releases.html#macosx">Mac OS X</a>
102 <a title="Binary Release: iOS" href="../www/binary-releases.html#iOS">iOS</a>
105 <a title="Binary Release: Windows" href="../www/binary-releases.html#windows">Windows</a>
107 <div class="sep"></div>
\r
109 <a title="Command-line Tools" href="../www/command-line-tools.html">Command-line Tools</a>
112 <a title="Command-line Tools: Processing" href="../www/command-line-processing.html">Processing</a>
115 <a title="Command-line Tools: Options" href="../www/command-line-options.html">Options</a>
118 <a title="Command-line Tools: Usage" href="http://www.imagemagick.org/Usage/">Usage</a>
121 <a title="Program Interfaces" href="../www/api.html">Program Interfaces</a>
124 <a title="Program Interface: MagickWand" href="../www/magick-wand.html">MagickWand</a>
127 <a title="Program Interface: MagickCore" href="../www/magick-core.html">MagickCore</a>
130 <a title="Program Interface: PerlMagick" href="../www/perl-magick.html">PerlMagick</a>
133 <a title="Program Interface: Magick++" href="../www/magick++.html">Magick++</a>
135 <div class="sep"></div>
\r
137 <a title="Install from Source" href="../www/install-source.html">Install from Source</a>
140 <a title="Install from Source: Unix" href="../www/install-source.html#unix">Unix</a>
143 <a title="Install from Source: Windows" href="../www/install-source.html#windows">Windows</a>
146 <a title="Resources" href="../www/resources.html">Resources</a>
149 <a title="Architecture" href="../www/architecture.html">Architecture</a>
152 <a title="Download" href="../www/download.html">Download</a>
154 <div class="sep"></div>
\r
156 <a title="Search" href="../www/search.html">Search</a>
158 <div class="sep"></div>
\r
160 <a title="Site Map" href="../www/sitemap.html">Site Map</a>
163 <a title="Site Map: Links" href="../www/links.html">Links</a>
165 <div class="sep"></div>
\r
167 <a rel="follow" title="Sponsors" href="../www/sponsors.html">Sponsors:</a>
169 <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>
170 <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... -->
171 <div class="sponsbox">
172 <div class="sponsor">
173 <a rel="follow" title="Android Tablet" href="http://www.dinodirect.com/ipads-tablets/">Android Tablet</a><!-- 201204010120 mickey@163... -->
175 <div class="sponsor">
176 <a rel="follow" title="Sponsor: Web Hosting" href="http://www.micfo.com">Web Hosting</a><!-- 209901010090s golestan -->
178 <div class="sponsor">
179 <a rel="follow" title="Sponsor: Autos Part" href="http://www.pkwteile.de/autoteile">Autos Part</a><!-- 201203010270 info@pkwte... -->
181 <div class="sponsor">
182 <a rel="follow" title="Sponsor: Web Site Hosting" href="http://webhostinggeeks.com">Web Site Hosting</a><!-- 201302010900 funds@enmob... -->
184 <div class="sponsor">
185 <a rel="follow" title="Sponsor: Tenant Check" href="http://www.rentmethod.com/">Tenant Check</a><!-- 201203010090 chris@rentm... -->
187 <div class="sponsor">
188 <a rel="follow" title="Sponsor: VPS" href="http://www.interdominios.com/vps">VPS</a><!-- 201204010090 barsh@inter... -->
190 <div class="sponsor">
191 <a rel="follow" title="Sponsor: Premium Quality Stock Photos" href="http://www.f1online.pro/en/">Premium Quality Stock Photos</a><!-- 2012080100540 ... -->
193 <div class="sponsor">
194 <a rel="follow" title="Sponsor: Search engine optimisation" href="http://www.seomoves.com.au">Search engine optimisation</a><!-- 201301010090s jen@seo lowprofilelinks -->
196 <div class="sponsor">
197 <a rel="follow" title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 2012070100250 ... -->
199 <div class="sponsor">
200 <a rel="follow" title="Sponsor: Managed Server" href="http://www.robhost.de">Managed Server</a><!-- 201210010720 klikics... -->
202 <div class="sponsor">
203 <a rel="follow" title="Sponsor: Stock Photography" href="http://www.fotosearch.com/">Stock Photography</a><!-- 2012040100250 ... -->
205 <div class="sponsor">
206 <a rel="follow" title="Sponsor: Autoteile" href="http://www.q11-shop.de">Autoteile</a><!-- 201205010540 suvalj -->
208 <div class="sponsor">
209 <a rel="follow" title="Sponsor: Royalty Free Stock Images" href="http://www.canstockphoto.com/">Royalty Free Stock Images</a><!-- 2012050100360 support@can -->
211 <div class="sponsor">
212 <a rel="follow" title="Sponsor: Web Hosting Reviews" href="http://www.webhostingsecretrevealed.com">Web Hosting Secret Revealed</a><!-- 201204010540 iamchee jerry -->
214 <div class="sponsor">
215 <a rel="follow" title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201303011500 r.leo -->
217 <div class="sponsor">
218 <a rel="follow" title="Sponsor: Free Catalogs" href="http://www.who-sells-it.com/">Free Catalogs</a><!-- 20120801000600 -->
220 <div class="sponsor">
221 <a rel="follow" title="Sponsor: Bildbearbeitung" href="http://www.bildschliff.de">Bildbearbeitung</a><!-- 2012060100300 strait.de-->
227 <div class="eastbar">
\r
228 <div class="g-plusone" data-size="standard" data-count="false"></div>
\r
229 <script type="text/javascript">
\r
235 var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
\r
236 po.src = 'https://apis.google.com/js/plusone.js';
\r
237 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
\r
244 <h1>MagickWand C API</h1>
246 <div class="doc-section">
247 <p>The <a href="../www/api/MagickWand/index.html">MagickWand API</a> is the recommended interface between the C programming language and the ImageMagick image processing libraries. Unlike the <a href="../www/magick-core.html">MagickCore</a> C API, MagickWand uses only a few opaque types. Accessors are available to set or get important wand properties. A description of the MagickWand public methods are found here:</p>
250 <li><a href="../www/api/magick-wand.html">Magick Wand Methods</a></li>
251 <li><a href="../www/api/magick-property.html">Set or Get Magick Wand Properties</a></li>
252 <li><a href="../www/api/magick-image.html">Magick Wand Image Methods</a></li>
253 <li><a href="../www/api/pixel-iterator.html">Pixel Iterator Methods</a></li>
254 <li><a href="../www/api/pixel-wand.html">Pixel Wand Methods</a></li>
255 <li><a href="../www/api/drawing-wand.html">Image Vector Drawing</a></li>
256 <li><a href="../www/api/mogrify.html">Command-line Interface</a></li>
257 <li><a href="../www/api/wand-view.html">Wand View Methods</a></li>
258 <li><a href="../www/api/magick-deprecate.html">Deprecated Methods</a></li>
259 <li><a href="../www/exception.html">Error and Warning Codes</a></li>
262 <p>After you write your MagickWand program, compile it like this:</p>
264 <p class='crt'><span class="crtprompt"> $ </span><span class='crtin'>cc -o wand `pkg-config --cflags --libs MagickWand` wand.c</span></p>
265 <p>Set the <kbd>PKG_CONFIG_PATH</kbd> environment variable if ImageMagick is not in your default system path:</p>
266 <p class='crt'><span class="crtprompt"> $ </span><span class='crtin'>export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig</span></p>
267 <p>Here is a example program that utilizes the MagickWand API to get you started, <a href="../www/source/wand.c">wand.c</a>. It reads an image, creates a thumbnail, and writes the result to disk.</p>
269 <div class="viewport">
270 #include <stdio.h>
271 #include <stdlib.h>
272 #include <wand/MagickWand.h>
274 int main(int argc,char **argv)
276 #define ThrowWandException(wand) \
284 description=MagickGetException(wand,&severity); \
285 (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
286 description=(char *) MagickRelinquishMemory(description); \
298 (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]);
305 magick_wand=NewMagickWand();
306 status=MagickReadImage(magick_wand,argv[1]);
307 if (status == MagickFalse)
308 ThrowWandException(magick_wand);
310 Turn the images into a thumbnail sequence.
312 MagickResetIterator(magick_wand);
313 while (MagickNextImage(magick_wand) != MagickFalse)
314 MagickResizeImage(magick_wand,106,80,LanczosFilter,1.0);
316 Write the image then destroy it.
318 status=MagickWriteImages(magick_wand,argv[2],MagickTrue);
319 if (status == MagickFalse)
320 ThrowWandException(magick_wand);
321 magick_wand=DestroyMagickWand(magick_wand);
322 MagickWandTerminus();
327 <p>Here is another program that shows one way to get and set image pixels with the MagickWand API, <a href="../www/source/contrast.c">contrast.c</a>. It reads an image, applies sigmoidal non-linearity contrast control, and writes the result to disk.</p>
329 <div class="viewport">
330 #include <stdio.h>
331 #include <stdlib.h>
333 #include <wand/MagickWand.h>
335 int main(int argc,char **argv)
337 #define QuantumScale ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
338 #define SigmoidalContrast(x) \
339 (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503)
340 #define ThrowWandException(wand) \
348 description=MagickGetException(wand,&severity); \
349 (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
350 description=(char *) MagickRelinquishMemory(description); \
383 (void) fprintf(stdout,"Usage: %s image sigmoidal-image\n",argv[0]);
390 image_wand=NewMagickWand();
391 status=MagickReadImage(image_wand,argv[1]);
392 if (status == MagickFalse)
393 ThrowWandException(image_wand);
394 contrast_wand=CloneMagickWand(image_wand);
396 Sigmoidal non-linearity contrast control.
398 iterator=NewPixelIterator(image_wand);
399 contrast_iterator=NewPixelIterator(contrast_wand);
400 if ((iterator == (PixelIterator *) NULL) ||
401 (contrast_iterator == (PixelIterator *) NULL))
402 ThrowWandException(image_wand);
403 for (y=0; y < (long) MagickGetImageHeight(image_wand); y++)
405 pixels=PixelGetNextIteratorRow(iterator,&width);
406 contrast_pixels=PixelGetNextIteratorRow(contrast_iterator,&width);
407 if ((pixels == (PixelWand **) NULL) ||
408 (contrast_pixels == (PixelWand **) NULL))
410 for (x=0; x < (long) width; x++)
412 PixelGetMagickColor(pixels[x],&pixel);
413 pixel.red=SigmoidalContrast(pixel.red);
414 pixel.green=SigmoidalContrast(pixel.green);
415 pixel.blue=SigmoidalContrast(pixel.blue);
416 pixel.index=SigmoidalContrast(pixel.index);
417 PixelSetMagickColor(contrast_pixels[x],&pixel);
419 (void) PixelSyncIterator(contrast_iterator);
421 if (y < (long) MagickGetImageHeight(image_wand))
422 ThrowWandException(image_wand);
423 contrast_iterator=DestroyPixelIterator(contrast_iterator);
424 iterator=DestroyPixelIterator(iterator);
425 image_wand=DestroyMagickWand(image_wand);
427 Write the image then destroy it.
429 status=MagickWriteImages(contrast_wand,argv[2],MagickTrue);
430 if (status == MagickFalse)
431 ThrowWandException(image_wand);
432 contrast_wand=DestroyMagickWand(contrast_wand);
433 MagickWandTerminus();
437 <p><a id="wand-view"></a>Now lets perform the same contrast enhancement while taking advantage of our dual or quad-core processing system by running the algorithm in parallel utilizing wand views. The <a href="../www/source/wand/sigmoidal-contrast.c">sigmoidal-contrast.c</a> module reads an image, applies sigmoidal non-linearity contrast control, and writes the result to disk just like the previous contrast enhancement program, but now it does its work in parallel (assumes ImageMagick is built with OpenMP support).</p>
439 <div class="viewport">
440 #include <stdio.h>
441 #include <stdlib.h>
443 #include <wand/MagickWand.h>
445 static MagickBooleanType SigmoidalContrast(WandView *pixel_view,
446 const ssize_t y,const int id,void *context)
448 #define QuantumScale ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
449 #define SigmoidalContrast(x) \
450 (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503)
464 extent=GetWandViewExtent(contrast_view);
465 pixels=GetWandViewPixels(contrast_view);
466 for (x=0; x < (long) (extent.width-extent.height); x++)
468 PixelGetMagickColor(pixels[x],&pixel);
469 pixel.red=SigmoidalContrast(pixel.red);
470 pixel.green=SigmoidalContrast(pixel.green);
471 pixel.blue=SigmoidalContrast(pixel.blue);
472 pixel.index=SigmoidalContrast(pixel.index);
473 PixelSetMagickColor(contrast_pixels[x],&pixel);
478 int main(int argc,char **argv)
480 #define ThrowViewException(view) \
482 description=GetWandViewException(view,&severity); \
483 (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
484 description=(char *) MagickRelinquishMemory(description); \
487 #define ThrowWandException(wand) \
489 description=MagickGetException(wand,&severity); \
490 (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
491 description=(char *) MagickRelinquishMemory(description); \
515 (void) fprintf(stdout,"Usage: %s image sigmoidal-image\n",argv[0]);
522 contrast_wand=NewMagickWand();
523 status=MagickReadImage(contrast_wand,argv[1]);
524 if (status == MagickFalse)
525 ThrowWandException(contrast_wand);
527 Sigmoidal non-linearity contrast control.
529 contrast_view=NewWandView(contrast_wand);
530 if (contrast_view == (WandView *) NULL)
531 ThrowWandException(contrast_wand);
532 status=UpdateWandViewIterator(contrast_view,SigmoidalContrast,(void *) NULL);
533 if (status == MagickFalse)
534 ThrowWandException(contrast_wand);
535 contrast_view=DestroyWandView(contrast_view);
537 Write the image then destroy it.
539 status=MagickWriteImages(contrast_wand,argv[2],MagickTrue);
540 if (status == MagickFalse)
541 ThrowWandException(contrast_wand);
542 contrast_wand=DestroyMagickWand(contrast_wand);
543 MagickWandTerminus();
547 <p><a href="http://members.shaw.ca/el.supremo/MagickWand/">MagickWand Examples in C</a> illustrates how to use the ImageMagick MagickWand API. Each example is presented as a C function, complete with headers, so that it can be copied to a file and then included in your own C project.</p>
553 <span id="linkbar-west"> </span>
\r
554 <span id="linkbar-center">
\r
555 <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> •
\r
556 <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Studio</a>
\r
558 <span id="linkbar-east"> </span>
\r
560 <div class="footer">
\r
561 <span id="footer-west">© 1999-2011 ImageMagick Studio LLC</span>
\r
562 <span id="footer-east"> <a href="http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>
\r
564 <div style="clear: both; margin: 0; width: 100%; "></div>
\r
565 <script type="text/javascript">
\r
566 var _gaq = _gaq || [];
\r
567 _gaq.push(['_setAccount', 'UA-17690367-1']);
\r
568 _gaq.push(['_trackPageview']);
\r
571 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
\r
572 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
\r
573 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
\r