[ImageMagick] [sponsor]

The MagickCore API 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 MagickWand 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:

After you write your MagickCore program, compile it like this:

  cc `MagickCore-config --cflags --cppflags` core.c `MagickCore-config --ldflags --libs`

Here is a example program that utilizes the MagickCore API to get you started, core.c. It reads a GIF image, creates a thumbnail, and writes it to disk in the PNG image format.

  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <time.h>
  #include <magick/MagickCore.h>
  
  int main(int argc,char **argv)
  {
    ExceptionInfo
      *exception;
  
    Image
      *image,
      *images,
      *resize_image,
      *thumbnails;
  
    ImageInfo
      *image_info;
  
    if (argc != 3)
      {
        (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]);
        exit(0);
      }
    /*
      Initialize the image info structure and read an image.
    */
    MagickCoreGenesis(*argv,MagickTrue);
    exception=AcquireExceptionInfo();
    image_info=CloneImageInfo((ImageInfo *) NULL);
    (void) strcpy(image_info->filename,argv[1]);
    images=ReadImage(image_info,exception);
    if (exception->severity != UndefinedException)
      CatchException(exception);
    if (images == (Image *) NULL)
      exit(1);
    /*
      Convert the image to a thumbnail.
    */
    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 thumbnail.
    */
    (void) strcpy(thumbnails->filename,argv[2]);
    WriteImage(image_info,thumbnails);
    /*
      Destroy the image thumbnail and exit.
    */
    thumbnails=DestroyImageList(thumbnails);
    image_info=DestroyImageInfo(image_info);
    exception=DestroyExceptionInfo(exception);
    MagickCoreTerminus();
    return(0);
  }