]> granicus.if.org Git - imagemagick/blob - www/magick-core.html
(no commit message)
[imagemagick] / www / magick-core.html
1 \r
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
9 <head>\r
10   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>\r
11   <meta name="verify-v1" content="g222frIIxcQTrvDR3NBRUSKP3AnMNoqxOkIniCEkV7U="/>\r
12   <title>ImageMagick: MagickCore, Low-level 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."/>
18   <meta name="Application-url" content="http://www.imagemagick.org"/>
19   <meta name="Generator" content="PHP"/>
20   <meta name="Keywords" content="magickcore, low-level, c, api, for, imagemagick, ImageMagick, ImageMagic, MagickCore, MagickWand, PerlMagick, Magick++, RMagick, PythonMagick, JMagick, TclMagick, Image, Magick, Magic, Wand, ImageMagickObject, Swiss, Army, Knife, Image, Processing"/>
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-2011 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="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>\r
32   <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" />\r
33   <style type="text/css" media="all">\r
34     @import url("../www/magick.css");\r
35   </style>\r
36   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>\r
37   <script type="text/javascript" src="../fancybox/jquery.fancybox-1.3.4.pack.js"></script>\r
38   <link rel="stylesheet" type="text/css" href="../fancybox/jquery.fancybox-1.3.4.css" media="screen" />\r
39   <script type="text/javascript">\r
40     $(document).ready(function() {\r
41       $("a[href$=.jpg],a[href$=.png],a[href$=.gif]").fancybox({\r
42         'transitionIn'  : 'elastic',\r
43         'transitionOut' : 'elastic',\r
44         'overlayShow'   : false,\r
45         'opacity'       : true\r
46       });\r
47     });\r
48   </script>\r
49 </head>\r
50 \r
51 <body id="www-imagemagick-org">\r
52 <div class="titlebar">\r
53 <a href="../index.html">\r
54   <img src="../images/script.png" alt="[ImageMagick]"\r
55   style="width: 350px; height: 60px; margin: 28px auto; float: left;" /></a>\r
56 <a href="http://www.networkredux.com">\r
57   <img src="../images/networkredux.png" alt="[sponsor]"\r
58   style="margin-top: 42px; border: 0px; float: left;" /></a>\r
59 <a href="http://www.imagemagick.org/discourse-server/">\r
60   <img src="../images/logo.jpg"\r
61   alt="ImageMagick Logo"\r
62   style="width: 123px; height: 118px; border: 0px; float: right;" /></a>\r
63 <a href="../index.html">\r
64   <img src="../images/sprite.jpg"\r
65   alt="ImageMagick Sprite"\r
66   style="width: 114px; height: 118px; border: 0px; float: right;" /></a>\r
67 </div>\r
68 \r
69 <div class="westbar">\r
70 \r
71 <div class="menu">
72   <a title="About ImageMagick" href="../index.html">About ImageMagick</a>
73 </div>
74 <div class="sep"></div>\r
75 <div class="menu">
76   <a title="Binary Releases" href="../www/binary-releases.html">Binary Releases</a>
77 </div>
78 <div class="sub">
79     <a title="Binary Release: Unix" href="../www/binary-releases.html#unix">Unix</a>
80 </div>
81 <div class="sub">
82     <a title="Binary Release: MacOS X" href="../www/binary-releases.html#macosx">Mac OS X</a>
83 </div>
84 <div class="sub">
85     <a title="Binary Release: Windows" href="../www/binary-releases.html#windows">Windows</a>
86 </div>
87 <div class="sep"></div>\r
88 <div class="menu">
89   <a title="Command-line Tools" href="../www/command-line-tools.html">Command-line Tools</a>
90 </div>
91 <div class="sub">
92     <a title="Command-line Tools: Processing" href="../www/command-line-processing.html">Processing</a>
93 </div>
94 <div class="sub">
95     <a title="Command-line Tools: Options" href="../www/command-line-options.html">Options</a>
96 </div>
97 <div class="sub">
98     <a title="Command-line Tools: Usage" href="http://www.imagemagick.org/Usage/">Usage</a>
99 </div>
100 <div class="menu">
101   <a title="Program Interfaces" href="../www/api.html">Program Interfaces</a>
102 </div>
103 <div class="sub">
104     <a title="Program Interface: MagickWand" href="../www/magick-wand.html">MagickWand</a>
105 </div>
106 <div class="sub">
107     <a title="Program Interface: MagickCore" href="../www/magick-core.html">MagickCore</a>
108 </div>
109 <div class="sub">
110     <a title="Program Interface: PerlMagick" href="../www/perl-magick.html">PerlMagick</a>
111 </div>
112 <div class="sub">
113     <a title="Program Interface: Magick++" href="../www/magick++.html">Magick++</a>
114 </div>
115 <div class="sep"></div>\r
116 <div  class="menu">
117    <a title="Install from Source" href="../www/install-source.html">Install from Source</a>
118 </div>
119 <div class="sub">
120     <a title="Install from Source: Unix" href="../www/install-source.html#unix">Unix</a>
121 </div>
122 <div class="sub">
123     <a title="Install from Source: Windows" href="../www/install-source.html#windows">Windows</a>
124  </div>
125 <div class="menu">
126   <a title="Resources" href="../www/resources.html">Resources</a>
127 </div>
128 <div class="menu">
129   <a title="Architecture" href="../www/architecture.html">Architecture</a>
130 </div>
131 <div class="menu">
132   <a title="Download" href="../www/download.html">Download</a>
133 </div>
134 <div class="sep"></div>\r
135 <div class="menu">
136   <a title="Search" href="../www/search.html">Search</a>
137 </div>
138 <div class="sep"></div>\r
139 <div class="menu">
140   <a title="Site Map" href="../www/sitemap.html">Site Map</a>
141 </div>
142 <div  class="sub">
143   <a title="Site Map: Links" href="../www/links.html">Links</a>
144 </div>
145 <div class="sep"></div>\r
146 <div  class="menu">
147   <a title="Sponsors" href="../www/sponsors.html">Sponsors:</a>
148
149 <div class="sponsbox">
150 <div  class="sponsor">
151   <a title="Sponsor: Best Web Hosting" href="http://webhostinggeeks.com">Best Web Hosting</a><!-- 201110010720 -->
152 </div>
153 <div  class="sponsor">
154   <a title="Sponsor: Web Hosting Ratings" href="http://webhostingrating.com">Web Hosting Ratings</a><!-- 201110010720 -->
155 </div>
156 <div  class="sponsor">
157   <a title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201107010240 r.leo -->
158 </div>
159 <div class="sponsor">
160   <a title="Sponsor: Web Hosting" href="http://www.bodhost.com/hosting.shtml">Web Hosting</a><!-- 201104010090 -->
161 </div>
162 <div  class="sponsor">
163   <a title="Sponsor: Image Converter" href="http://www.batchphoto.com">Image Converter</a><!-- 201103010900 Bits Coffee-->
164 </div>
165 <div  class="sponsor">
166   <a title="Sponsor: Flyer drucken" href="http://www.online-druck.biz">Flyer drucken</a><!-- 201109010900 Floeter-->
167 </div>
168 <div  class="sponsor">
169   <a title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 201110010720 -->
170 </div>
171 <div  class="sponsor">
172    <a title="Sponsor: Fernsehdienst Berlin" href="http://www.atlas-multimedia.de">Fernsehdienst Berlin</a><!-- 2011050100025 atlas.multimedia-->
173 </div>
174 </div>
175 </div>
176 </div>\r
177 \r
178 <div class="eastbar">\r
179   <script type="text/javascript">\r
180   <!--\r
181     google_ad_client = "pub-3129977114552745";\r
182     google_ad_slot = "0574824969";\r
183     google_ad_width = 160;\r
184     google_ad_height = 600;\r
185   //-->\r
186   </script>\r
187   <script type="text/javascript"\r
188     src="http://pagead2.googlesyndication.com/pagead/show_ads.js">\r
189   </script>\r
190 </div>\r
191 \r
192 <div class="main">\r
193 \r
194 <h1>MagickCore C API</h1>
195
196 <div class="doc-section">
197
198 <p>The <a href="../www/api/MagickCore/index.html">MagickCore API</a> is a low-level interface between the C programming language and the ImageMagick image processing libraries and is recommended for wizard-level programmers only.  Unlike the <a href="../www/magick-wand.html">MagickWand</a> C API which uses only a few opaque types and accessors, with MagickCore you almost exlusively access the structure members directly.  A description of the MagickCore public methods are found here:</p>
199
200 <ul>
201   <li><a href="../www/api/magick.html">Initialize or Destroy the ImageMagick Environment</a></li>
202   <li><a href="../www/api/constitute.html">Constitute an Image</a></li>
203   <li><a href="../www/api/composite.html">Composite an Image</a></li>
204   <li><a href="../www/api/image.html">Image Methods</a></li>
205   <li><a href="../www/api/color.html">Count the Colors in an Image</a></li>
206   <li><a href="../www/api/colormap.html">Colormap Methods</a></li>
207   <li><a href="../www/api/distort.html">Image Distortions</a></li>
208   <li><a href="../www/api/layer.html">Dealing with Image Layers</a></li>
209   <li><a href="../www/api/profile.html">Dealing with Image Profiles</a></li>
210   <li><a href="../www/api/quantize.html">Reduce the Number of Unique Colors in an Image</a></li>
211   <li><a href="../www/api/histogram.html">Image Histograms</a></li>
212   <li><a href="../www/api/segment.html">Segment an Image with Thresholding Fuzzy c-Means</a></li>
213   <li><a href="../www/api/resize.html">Resize an Image</a></li>
214   <li><a href="../www/api/transform.html">Transform an Image</a></li>
215   <li><a href="../www/api/shear.html">Shear or Rotate an Image by an Arbitrary Angle</a></li>
216   <li><a href="../www/api/enhance.html">Enhance an Image</a></li>
217   <li><a href="../www/api/effect.html">Add an Effect</a></li>
218   <li><a href="../www/api/morphology.html">Morphological Erosions, Dilations, Openings, and Closings</a></li>
219   <li><a href="../www/api/fx.html">Add a Special Effect</a></li>
220   <li><a href="../www/api/decorate.html">Decorate an Image</a></li>
221   <li><a href="../www/api/attribute.html">Get/Set an Image Attribute</a></li>
222   <li><a href="../www/api/property.html">Get/Set Image Properties</a></li>
223   <li><a href="../www/api/statistic.html">Get Image Statistics</a></li>
224   <li><a href="../www/api/feature.html">Get Image Features</a></li>
225   <li><a href="../www/api/annotate.html">Annotate an Image</a></li>
226   <li><a href="../www/api/paint.html">Paint on an Image</a></li>
227   <li><a href="../www/api/draw.html">Draw on an Image</a></li>
228   <li><a href="../www/api/montage.html">Create an Image Thumbnail</a></li>
229   <li><a href="../www/api/fourier.html">Compute the discrete Fourier transform (DFT)</a></li>
230   <li><a href="../www/api/compare.html">Compare an Image to a Reconstructed Image</a></li>
231   <li><a href="../www/api/display.html">Interactively Display and Edit an Image</a></li>
232   <li><a href="../www/api/animate.html">Interactively Animate an Image Sequence</a></li>
233   <li><a href="../www/api/cipher.html">Convert to and from Cipher Pixels</a></li>
234   <li><a href="../www/api/list.html">Working with Image Lists</a></li>
235   <li><a href="../www/api/image-view.html">Image View Methods</a></li>
236   <li><a href="../www/api/cache.html">Get or Set Image Pixels</a></li>
237   <li><a href="../www/api/cache-view.html">Working with Cache Views</a></li>
238   <li><a href="../www/api/stream.html">The Pixel FIFO</a></li>
239   <li><a href="../www/api/blob.html">Read or Write Binary Large OBjects</a></li>
240   <li><a href="../www/api/module.html">Loadable Modules</a></li>
241   <li><a href="../www/api/signature.html">Compute a Message Digest for an Image</a></li>
242   <li><a href="../www/api/registry.html">The Image Registry</a></li>
243   <li><a href="../www/api/exception.html">Dealing with Exceptions</a></li>
244   <li><a href="../www/api/memory.html">Memory Allocation</a></li>
245   <li><a href="../www/api/resource.html">Monitor or Limit Resource Consumption</a></li>
246   <li><a href="../www/api/monitor.html">Monitor the Progress of an Image Operation</a></li>
247   <li><a href="../www/api/version.html">Get the Version and Copyrights</a></li>
248   <li><a href="../www/api/deprecate.html">Deprecated Methods</a></li>
249   <li><a href="../www/exception.html">Error and Warning Codes</a></li>
250 </ul>
251
252 <p>After you write your MagickCore program, compile it like this:</p>
253
254 <p class='crt'><span class="crtprompt"> $magick&gt; </span><span class='crtin'>cc `MagickCore-config --cflags --cppflags` -O2 core.c  \ <br/> `MagickCore-config --ldflags --libs`</span></p>
255 <p>Here is a example program that utilizes the MagickCore API to get you started, <a href="../www/source/core.c">core.c</a>. It reads a GIF image, creates a thumbnail, and writes it to disk in the PNG image format.</p>
256
257 <div class="viewport">
258 <pre class="code">
259   #include &lt;stdio.h>
260   #include &lt;stdlib.h>
261   #include &lt;string.h>
262   #include &lt;time.h>
263   #include &lt;magick/MagickCore.h>
264
265   int main(int argc,char **argv)
266   {
267     ExceptionInfo
268       *exception;
269
270     Image
271       *image,
272       *images,
273       *resize_image,
274       *thumbnails;
275
276     ImageInfo
277       *image_info;
278
279     if (argc != 3)
280       {
281         (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]);
282         exit(0);
283       }
284     /*
285       Initialize the image info structure and read an image.
286     */
287     MagickCoreGenesis(*argv,MagickTrue);
288     exception=AcquireExceptionInfo();
289     image_info=CloneImageInfo((ImageInfo *) NULL);
290     (void) strcpy(image_info-&gt;filename,argv[1]);
291     images=ReadImage(image_info,exception);
292     if (exception-&gt;severity != UndefinedException)
293       CatchException(exception);
294     if (images == (Image *) NULL)
295       exit(1);
296     /*
297       Convert the image to a thumbnail.
298     */
299     thumbnails=NewImageList();
300     while ((image=RemoveFirstImageFromList(&amp;images)) != (Image *) NULL)
301     {
302       resize_image=ResizeImage(image,106,80,LanczosFilter,1.0,exception);
303       if (resize_image == (Image *) NULL)
304         MagickError(exception-&gt;severity,exception-&gt;reason,exception-&gt;description);
305       (void) AppendImageToList(&amp;thumbnails,resize_image);
306       DestroyImage(image);
307     }
308     /*
309       Write the image thumbnail.
310     */
311     (void) strcpy(thumbnails-&gt;filename,argv[2]);
312     WriteImage(image_info,thumbnails);
313     /*
314       Destroy the image thumbnail and exit.
315     */
316     thumbnails=DestroyImageList(thumbnails);
317     image_info=DestroyImageInfo(image_info);
318     exception=DestroyExceptionInfo(exception);
319     MagickCoreTerminus();
320     return(0);
321   }
322 </pre>
323 </div>
324 <p><a id="image-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/core/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>
325
326 <div class="viewport">
327 <pre class="code">
328 #include &lt;stdio.h>
329 #include &lt;stdlib.h>
330 #include &lt;math.h>
331 #include &lt;magick/MagickCore.h>
332
333 static MagickBooleanType SigmoidalContrast(ImageView *contrast_view,
334   const ssize_t y,const int id,void *context)
335 {
336 #define QuantumScale  ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
337 #define SigmoidalContrast(x) \
338   (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503)
339
340   RectangleInfo
341     extent;
342
343   register IndexPacket
344     *indexes;
345
346   register PixelPacket
347     *pixels;
348
349   register ssize_t
350     x;
351
352   extent=GetImageViewExtent(contrast_view);
353   pixels=GetImageViewAuthenticPixels(contrast_view);
354   for (x=0; x &lt; (ssize_t) (extent.width-extent.x); x++)
355   {
356     pixels[x].red=RoundToQuantum(SigmoidalContrast(pixels[x].red));
357     pixels[x].green=RoundToQuantum(SigmoidalContrast(pixels[x].green));
358     pixels[x].blue=RoundToQuantum(SigmoidalContrast(pixels[x].blue));
359     pixels[x].opacity=RoundToQuantum(SigmoidalContrast(pixels[x].opacity));
360   }
361   indexes=GetImageViewAuthenticIndexes(contrast_view);
362   if (indexes != (IndexPacket *) NULL)
363     for (x=0; x &lt; (ssize_t) (extent.width-extent.x); x++)
364       indexes[x]=(IndexPacket) RoundToQuantum(SigmoidalContrast(indexes[x]));
365   return(MagickTrue);
366 }
367
368 int main(int argc,char **argv)
369 {
370 #define ThrowImageException(image) \
371 { \
372  \
373   CatchException(exception); \
374   if (contrast_image != (Image *) NULL) \
375     contrast_image=DestroyImage(contrast_image); \
376   exit(-1); \
377 }
378 #define ThrowViewException(view) \
379 { \
380   char \
381     *description; \
382  \
383   ExceptionType \
384     severity; \
385  \
386   description=GetImageViewException(view,&amp;severity); \
387   (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
388   description=DestroyString(description); \
389   exit(-1); \
390 }
391
392   ExceptionInfo
393     *exception;
394
395   Image
396     *contrast_image;
397
398   ImageInfo
399     *image_info;
400
401   ImageView
402     *contrast_view;
403
404   MagickBooleanType
405     status;
406
407   if (argc != 3)
408     {
409       (void) fprintf(stdout,"Usage: %s image sigmoidal-image\n",argv[0]);
410       exit(0);
411     }
412   /*
413     Read an image.
414   */
415   MagickCoreGenesis(*argv,MagickTrue);
416   image_info=AcquireImageInfo();
417   (void) CopyMagickString(image_info->filename,argv[1],MaxTextExtent);
418   exception=AcquireExceptionInfo();
419   contrast_image=ReadImage(image_info,exception);
420   if (contrast_image == (Image *) NULL)
421     ThrowImageException(contrast_image);
422   /*
423     Sigmoidal non-linearity contrast control.
424   */
425   contrast_view=NewImageView(contrast_image);
426   if (contrast_view == (ImageView *) NULL)
427     ThrowImageException(contrast_image);
428   status=UpdateImageViewIterator(contrast_view,SigmoidalContrast,(void *) NULL);
429   if (status == MagickFalse)
430     ThrowImageException(contrast_image);
431   contrast_view=DestroyImageView(contrast_view);
432   /*
433     Write the image then destroy it.
434   */
435   status=WriteImages(image_info,contrast_image,argv[2],exception);
436   if (status == MagickFalse)
437     ThrowImageException(contrast_image);
438   contrast_image=DestroyImage(contrast_image);
439   exception=DestroyExceptionInfo(exception);
440   image_info=DestroyImageInfo(image_info);
441   MagickCoreTerminus();
442   return(0);
443 }
444 </pre>
445 </div>
446 </div>
447 \r
448 </div>\r
449 \r
450 <div id="linkbar">\r
451     <span id="linkbar-west">&nbsp;</span>\r
452     <span id="linkbar-center">\r
453       <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> &bull;\r
454       <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Studio</a>\r
455     </span>\r
456     <span id="linkbar-east">&nbsp;</span>\r
457   </div>\r
458   <div class="footer">\r
459     <span id="footer-west">&copy; 1999-2011 ImageMagick Studio LLC</span>\r
460     <span id="footer-east"> <a href="http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>\r
461   </div>\r
462   <div style="clear: both; margin: 0; width: 100%; "></div>\r
463   <script type="text/javascript">\r
464     var _gaq = _gaq || [];\r
465     _gaq.push(['_setAccount', 'UA-17690367-1']);\r
466     _gaq.push(['_trackPageview']);\r
467 \r
468     (function() {\r
469       var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\r
470       ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\r
471       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\r
472     })();\r
473   </script>\r
474 </body>\r
475 </html>\r