示例#1
0
static MagickBooleanType WriteXTRNImage(const ImageInfo *image_info,Image *image)
{
  Image *
    p;

  ImageInfo
    *clone_info;

  int
    scene;

  MagickBooleanType
    status;

  void
    *param1,
    *param2,
    *param3;

  param1 = param2 = param3 = (void *) NULL;
  if (LocaleCompare(image_info->magick,"XTRNFILE") == 0)
    {
      clone_info=CloneImageInfo(image_info);
      status=WriteImage(image_info,image);
      if (status == MagickFalse)
        CatchImageException(image);
      clone_info=DestroyImageInfo(clone_info);
    }
  else if (LocaleCompare(image_info->magick,"XTRNIMAGE") == 0)
    {
      Image
        **image_ptr;

      ImageInfo
        **image_info_ptr;

      clone_info=CloneImageInfo(image_info);
      if (clone_info->filename[0])
        {
          (void) sscanf(clone_info->filename,"%lx,%lx",&param1,&param2);
          image_info_ptr=(ImageInfo **) param1;
          image_ptr=(Image **) param2;
          if ((image_info_ptr != (ImageInfo **) NULL) &&
              (image_ptr != (Image **) NULL))
            {
              *image_ptr=CloneImage(image,0,0,MagickFalse,&(image->exception));
              *image_info_ptr=clone_info;
            }
        }
    }
  else if (LocaleCompare(image_info->magick,"XTRNBLOB") == 0)
    {
      char
        **blob_data;

      ExceptionInfo
        exception;

      size_t
        *blob_length;

      char
        filename[MaxTextExtent];

      clone_info=CloneImageInfo(image_info);
      if (clone_info->filename[0])
        {
          (void) sscanf(clone_info->filename,"%lx,%lx,%s",
            &param1,&param2,&filename);

          blob_data=(char **) param1;
          blob_length=(size_t *) param2;

          scene = 0;
          (void) CopyMagickString(clone_info->filename,filename,MaxTextExtent);
          for (p=image; p != (Image *) NULL; p=GetNextImageInList(p))
          {
            (void) CopyMagickString(p->filename,filename,MaxTextExtent);
            p->scene=scene++;
          }
          SetImageInfo(clone_info,MagickTrue,&image->exception);
          (void) CopyMagickString(image->magick,clone_info->magick,
            MaxTextExtent);
          GetExceptionInfo(&exception);
          if (*blob_length == 0)
            *blob_length=8192;
          *blob_data=(char *) ImageToBlob(clone_info,image,blob_length,
            &exception);
          if (*blob_data == NULL)
            status=MagickFalse;
          if (status == MagickFalse)
            CatchImageException(image);
        }
      clone_info=DestroyImageInfo(clone_info);
    }
  else if (LocaleCompare(image_info->magick,"XTRNSTREAM") == 0)
    {
      size_t
        (*fifo)(const Image *,const void *,const size_t);

      char
        filename[MaxTextExtent];

      clone_info=CloneImageInfo(image_info);
      if (clone_info->filename[0])
        {
          (void) sscanf(clone_info->filename,"%lx,%lx,%s",
            &param1,&param2,&filename);

          fifo=(size_t (*)(const Image *,const void *,const size_t)) param1;
          image->client_data=param2;

          scene=0;
          (void) CopyMagickString(clone_info->filename,filename,MaxTextExtent);
          for (p=image; p != (Image *) NULL; p=GetNextImageInList(p))
          {
            (void) CopyMagickString(p->filename,filename,MaxTextExtent);
            p->scene=scene++;
          }
          SetImageInfo(clone_info,MagickTrue,&image->exception);
          (void) CopyMagickString(image->magick,clone_info->magick,
            MaxTextExtent);
          status=WriteStream(clone_info,image,fifo);
          if (status == MagickFalse)
            CatchImageException(image);
        }
      clone_info=DestroyImageInfo(clone_info);
    }
  else if (LocaleCompare(image_info->magick,"XTRNARRAY") == 0)
    {
      char
        filename[MaxTextExtent];

      clone_info=CloneImageInfo(image_info);
      if (clone_info->filename[0])
        {
          (void) sscanf(clone_info->filename,"%lx,%s",
            &param1,&filename);

          image->client_data=param1;

          scene = 0;
          (void) CopyMagickString(clone_info->filename,filename,MaxTextExtent);
          for (p=image; p != (Image *) NULL; p=GetNextImageInList(p))
          {
            (void) CopyMagickString(p->filename,filename,MaxTextExtent);
            p->scene=scene++;
          }
          SetImageInfo(clone_info,MagickTrue,&image->exception);
          (void) CopyMagickString(image->magick,clone_info->magick,
            MaxTextExtent);
          status=WriteStream(clone_info,image,SafeArrayFifo);
          if (status == MagickFalse)
            CatchImageException(image);
        }
      clone_info=DestroyImageInfo(clone_info);
    }
  return(MagickTrue);
}
示例#2
0
static MagickBooleanType WriteXTRNImage(const ImageInfo *image_info,
  Image *image,ExceptionInfo *exception)
{
  Image *
    p;

  ImageInfo
    *clone_info;

  int
    scene;

  MagickBooleanType
    status;

  void
    *param1,
    *param2,
    *param3;

  param1 = param2 = param3 = (void *) NULL;
  status=MagickTrue;
  if (LocaleCompare(image_info->magick,"XTRNFILE") == 0)
    {
      clone_info=CloneImageInfo(image_info);
      *clone_info->magick='\0';
      status=WriteImage(clone_info,image,exception);
      if (status == MagickFalse)
        CatchImageException(image);
      clone_info=DestroyImageInfo(clone_info);
    }
  else if (LocaleCompare(image_info->magick,"XTRNIMAGE") == 0)
    {
      Image
        **image_ptr;

      ImageInfo
        **image_info_ptr;

      clone_info=CloneImageInfo(image_info);
      if (clone_info->filename[0])
        {
          (void) sscanf(clone_info->filename,"%lx,%lx",&param1,&param2);
          image_info_ptr=(ImageInfo **) param1;
          image_ptr=(Image **) param2;
          if ((image_info_ptr != (ImageInfo **) NULL) &&
              (image_ptr != (Image **) NULL))
            {
              *image_ptr=CloneImage(image,0,0,MagickFalse,exception);
              *image_info_ptr=clone_info;
            }
        }
    }
  else if (LocaleCompare(image_info->magick,"XTRNBLOB") == 0)
    {
      char
        **blob_data;

      size_t
        *blob_length;

      char
        filename[MagickPathExtent];

      clone_info=CloneImageInfo(image_info);
      if (clone_info->filename[0])
        {
          (void) sscanf(clone_info->filename,"%lx,%lx,%2048s",
            &param1,&param2,filename);

          blob_data=(char **) param1;
          blob_length=(size_t *) param2;
          scene = 0;
          (void) CopyMagickString(clone_info->filename,filename,
            MagickPathExtent);
          for (p=image; p != (Image *) NULL; p=GetNextImageInList(p))
          {
            (void) CopyMagickString(p->filename,filename,MagickPathExtent);
            p->scene=scene++;
          }
          SetImageInfo(clone_info,1,exception);
          (void) CopyMagickString(image->magick,clone_info->magick,
            MagickPathExtent);
          if (*blob_length == 0)
            *blob_length=8192;
          *blob_data=(char *) ImageToBlob(clone_info,image,blob_length,
            exception);
          if (*blob_data == NULL)
            status=MagickFalse;
          if (status == MagickFalse)
            CatchImageException(image);
        }
      clone_info=DestroyImageInfo(clone_info);
    }
  else if (LocaleCompare(image_info->magick,"XTRNARRAY") == 0)
    {
      char
        filename[MagickPathExtent];

      size_t
        blob_length;

      unsigned char
        *blob_data;

      clone_info=CloneImageInfo(image_info);
      if (*clone_info->filename != '\0')
        {
          (void) sscanf(clone_info->filename,"%lx,%2048s",&param1,filename);
          image->client_data=param1;
          scene=0;
          (void) CopyMagickString(clone_info->filename,filename,
            MagickPathExtent);
          for (p=image; p != (Image *) NULL; p=GetNextImageInList(p))
          {
            (void) CopyMagickString(p->filename,filename,MagickPathExtent);
            p->scene=scene++;
          }
          SetImageInfo(clone_info,1,exception);
          (void) CopyMagickString(image->magick,clone_info->magick,
            MagickPathExtent);
          blob_data=ImageToBlob(clone_info,image,&blob_length,
            exception);
          if (blob_data == (unsigned char *) NULL)
            status=MagickFalse;
          else
            SafeArrayFifo(image,blob_data,blob_length);
          if (status == MagickFalse)
            CatchImageException(image);
        }
      clone_info=DestroyImageInfo(clone_info);
    }
  return(MagickTrue);
}
示例#3
0
static unsigned int WriteXTRNImage(const ImageInfo *image_info,Image *image)
{
  Image *
    p;

  ImageInfo
    *clone_info;

  int
    scene;

  void
    *param1,
    *param2,
    *param3;

  unsigned int
    status;

  param1 = param2 = param3 = (void *) NULL;
  if (LocaleCompare(image_info->magick,"XTRNFILE") == 0)
    {
      clone_info=CloneImageInfo(image_info);
      status=WriteImage(image_info,image);
      if (status == False)
        CatchImageException(image);
      DestroyImageInfo(clone_info);
    }
  else if (LocaleCompare(image_info->magick,"XTRNIMAGE") == 0)
    {
      Image
        **image_ptr;

      ImageInfo
        **image_info_ptr;

      clone_info=CloneImageInfo(image_info);
      if (clone_info->filename[0])
        {
          (void) sscanf(clone_info->filename,"%lx,%lx",&param1,&param2);
          image_info_ptr=(ImageInfo **) param1;
          image_ptr=(Image **) param2;
          if ((image_info_ptr != (ImageInfo **) NULL) &&
              (image_ptr != (Image **) NULL))
            {
              *image_ptr=CloneImage(image,0,0,False,&(image->exception));
              *image_info_ptr=clone_info;
            }
        }
    }
  else if (LocaleCompare(image_info->magick,"XTRNBLOB") == 0)
    {
      char
        **blob_data;

      ExceptionInfo
        exception;

      size_t
        *blob_length;

      char
        filename[MaxTextExtent];

      clone_info=CloneImageInfo(image_info);
      if (clone_info->filename[0])
        {
          (void) sscanf(clone_info->filename,"%lx,%lx,%s",
			&param1,&param2,&filename);

          blob_data=(char **) param1;
          blob_length=(size_t *) param2;

          scene = 0;
          (void) strcpy(clone_info->filename, filename);
          for (p=image; p != (Image *) NULL; p=p->next)
	    {
	      (void) strcpy(p->filename, filename);
	      p->scene=scene++;
	    }
          SetImageInfo(clone_info,SETMAGICK_WRITE,&image->exception);
          (void) strcpy(image->magick,clone_info->magick);
          GetExceptionInfo(&exception);
          if (*blob_length == 0)
            *blob_length=8192;
          *blob_data=(char *) ImageToBlob(clone_info,image,blob_length,&exception);
          if (*blob_data == NULL)
            status=False;
          if (status == False)
            CatchImageException(image);
        }
      DestroyImageInfo(clone_info);
    }
  else if (LocaleCompare(image_info->magick,"XTRNARRAY") == 0)
    {
      char
        *blob_data;

      ExceptionInfo
        exception;

      size_t
        blob_length;

      char
        filename[MaxTextExtent];

      clone_info=CloneImageInfo(image_info);
      if (clone_info->filename[0])
        {
          (void) sscanf(clone_info->filename,"%lx,%s",
			&param1,&filename);

          image->client_data=param1;

          scene = 0;
	  blob_length = 0;
          (void) strcpy(clone_info->filename, filename);
          for (p=image; p != (Image *) NULL; p=p->next)
	    {
	      (void) strcpy(p->filename, filename);
	      p->scene=scene++;
	    }
          SetImageInfo(clone_info,SETMAGICK_WRITE,&image->exception);
          (void) strcpy(image->magick,clone_info->magick);
          GetExceptionInfo(&exception);
          blob_data=(char *) ImageToBlob(clone_info,image,&blob_length,&exception);
          if (blob_data == NULL)
            status=False;
          else
            SafeArrayFifo(image,blob_data,blob_length);

          if (status == False)
            CatchImageException(image);
        }
      DestroyImageInfo(clone_info);
    }
  return(True);
}
示例#4
0
int main(int argc, char **argv)
{
	ExceptionInfo exception;
	ImageInfo *image_info;
	Image *image;
	char *ext;
	char image_name[NAME_MAX + 1];
	char deepzoom_directory[NAME_MAX + 1];
	char dzi[NAME_MAX];
	int opt;

	while ((opt = getopt(argc, argv, "t:o:h")) != -1) {
		switch (opt) {
		case 't':
			tile_sz = atoi(optarg);
			break;
		case 'o':
			overlap = atoi(optarg);
			break;
		case 'h':
			print_usage();
			exit(EXIT_SUCCESS);
		}
	}

	if (optind < argc) {
		snprintf(image_name, sizeof(image_name), "%s", argv[optind]);
	} else {
		print_usage();
		exit(EXIT_FAILURE);
	}

	InitializeMagick(NULL);
	GetExceptionInfo(&exception);
	image_info = CloneImageInfo((ImageInfo *)NULL);
	snprintf(image_info->filename, sizeof(image_info->filename), "%s",
		image_name);
	image = ReadImage(image_info, &exception);
	if (exception.severity != UndefinedException)
		CatchImageException(image);

	ext = rindex(image_name, '.');
	snprintf(deepzoom_directory, strlen(image_name) - strlen(ext) + 1,
		"%s", image_name);
	strcpy(dzi, deepzoom_directory);
	strncat(deepzoom_directory, "_files",
		NAME_MAX - strlen(deepzoom_directory));
	printf("Creating directory: %s\n", deepzoom_directory);
	mkdir(deepzoom_directory, 0777);
	chdir(deepzoom_directory);
	create_levels(image, ext + 1, image->columns, image->rows);
	chdir("..");

	strncat(dzi, ".dzi", NAME_MAX - strlen(dzi));
	printf("Writing DZI: %s\n", dzi);
	write_dzi(dzi, ext + 1, image->columns, image->rows);

	DestroyImage(image);
	DestroyImageInfo(image_info);
	DestroyExceptionInfo(&exception);
	DestroyMagick();

	exit(EXIT_SUCCESS);
}