ImageMagick has a number of functions that allow you to
read, manipulate, write, or display an image. These functions are
accessible through the various tools or
the object-oriented Perl interface,
PerlMagick. However, you can also access
the functions directly from your program through the Magick
Application Programmer Interface. To invoke the functions, write
your program in your favorite language while making calls to the
Magick image functions and link with libMagick.a,
libMagick.so, or Magick.dll depending on your
system.
The Magick Wand API is a new high level interface to the
ImageMagick. The Wand API is recommended over the core API below.
Magick Wand
Pixel Iterator
Pixel Wand
Image Vector Drawing
The low level core ImageMagick API, follows.
Constitute an Image
Composite an Image
Image Methods
Count the Colors in an Image
Dealing with Image
Colorspaces
Dealing with Image Profiles
Reduce the Number of Unique Colors in
an Image
Segment an Image with Thresholding Fuzzy
c-Means
Resize an Image
Transform an Image
Shear or Rotate an Image by an Arbitrary
Angle
Enhance an Image
Add an Effect
Add a Special Effect
Decorate an Image
Set Text Attributes
Annotate an Image
Paint on an Image
Draw on an Image
Create an Image Thumbnail
Compare an Image to a Reconstructed
Image
Interactively Display and Edit an
Image
Interactively Animate an Image
Sequence
Get or Set Image Pixels
Working with Image Lists
Working with Cache Views
The Pixel FIFO
Read or Write Binary Large OBjects
Read or List Image formats
Compute a Message Digest for an
Image
The Registry
Dealing with Errors
Memory Allocation
Monitor or Limit Resource
Consumption
Monitor the Progress of an Image
Operation
Get the Version and
Copyrights
Deprecated Methods
Here is a sample program to get you started. To find out about
all the functions that are available, read the source code. Each
function is delineated with a full rows of percent signs with
comments describing the parameters required for the function and
what it does. For ease in finding a function, they are sorted in
alphabetical order. Most of the image functions are found in
image.c and effects.c.
Here is a full example of a program, demo.c, that reads
a GIF image, creates a thumbnail, and writes it to disk in the MIFF
image format.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <magick/api.h>
int main(int argc,char **argv)
{
ExceptionInfo
exception;
Image
*image,
*images,
*resize_image,
*thumbnails;
ImageInfo
*image_info;
/*
Initialize the image info structure and read an image.
*/
InitializeMagick(*argv);
GetExceptionInfo(&exception);
image_info=CloneImageInfo((ImageInfo *) NULL);
(void) strcpy(image_info->filename,"image.gif");
images=ReadImage(image_info,&exception);
if (exception.severity != UndefinedException)
CatchException(&exception);
if (images == (Image *) NULL)
exit(1);
/*
Turn the images into a thumbnail sequence.
*/
thumbnails=NewImageList();
while ((image=RemoveFirstImageFromList(&images)) != (Image *) NULL)
{
resize_image=ResizeImage(image,106,80,LanczosFilter,1.0,&exception);
if (resize_image == (Image *) NULL)
MagickError(exception.severity,exception.reason,exception.description);
(void) AppendImageToList(&thumbnails,resize_image);
DestroyImage(image);
}
/*
Write the image as MIFF and destroy it.
*/
(void) strcpy(thumbnails->filename,"image.miff");
WriteImage(image_info,thumbnails);
DestroyImageList(thumbnails);
DestroyImageInfo(image_info);
DestroyExceptionInfo(&exception);
DestroyMagick();
return(0);
}
Now we need to compile. On Unix, the command would look something
like this:
setenv LD_LIBRARY_PATH /usr/local/lib
gcc `Magick-config --cflags --cppflags` demo.c `Magick-config --ldflags --libs`
Another example is smile.c. Compile and
excute it to display a smiley face on your X server.
Now lets port the above program to use the Magick Wand API:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <wand/magick_wand.h>
int main(int argc,char **argv)
{
#define ThrowWandException(wand) \
{ \
char \
*description; \
\
ExceptionType \
severity; \
\
description=MagickGetException(wand,&severity); \
(void) fprintf(stderr,"%s %s %ld %s\n",GetMagickModule(),description); \
MagickRelinquishMemory(description); \
exit(-1); \
}
MagickBooleanType
status;
MagickWand
*magick_wand;
/*
Read an image.
*/
magick_wand=NewMagickWand();
status=MagickReadImage(magick_wand,"image.gif");
if (status == MagickFalse)
ThrowWandException(magick_wand);
/*
Turn the images into a thumbnail sequence.
*/
MagickResetIterator(magick_wand);
while (MagickNextImage(magick_wand) != MagickFalse)
MagickResizeImage(magick_wand,106,80,LanczosFilter,1.0);
/*
Write the image as MIFF and destroy it.
*/
status=MagickWriteImages(magick_wand,"image.miff",True);
if (status == MagickFalse)
ThrowWandException(magick_wand);
return(0);
}
To compile, type:
cc `Wand-config --cflags --cppflags` demo.c `Wand-config --ldflags --libs`
For C++,
use:
c++ `Magick++-config --cxxflags --cppflags` demo.cpp `Magick++-config --ldflags --libs`
|