% MagickWand Methods to Create Image Thumbnails %
% %
% Software Design %
-% John Cristy %
+% Cristy %
% July 1992 %
% %
% %
-% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2015 ImageMagick Studio LLC, a non-profit organization %
% dedicated to making software imaging solutions freely available. %
% %
% You may not use this file except in compliance with the License. You may %
{
"-adaptive-sharpen geometry",
" adaptively sharpen pixels; increase effect near edges",
- " annotate geometry text",
+ "-annotate geometry text",
" annotate the image with text",
"-auto-orient automagically orient image",
"-blur geometry reduce image noise and reduce detail levels",
"-border geometry surround image with a border of color",
+ "-channel mask set the image channel mask",
"-crop geometry preferred size and location of the cropped image",
"-extent geometry set the image size",
"-flatten flatten a sequence of images",
"-repage geometry size and location of an image canvas (operator)",
"-resize geometry resize the image",
"-rotate degrees apply Paeth rotation to the image",
+ "-scale geometry scale the image",
"-strip strip image of all profiles and comments",
"-transform affine transform image",
"-transpose flip image vertically and rotate 90 degrees",
"-blue-primary point chromaticity blue primary point",
"-bordercolor color border color",
"-caption string assign a caption to an image",
- "-channel type apply option to select image channels",
"-colors value preferred number of colors in the image",
"-colorspace type alternate image colorsapce",
"-comment string annotate image with comment",
"-kerning value set the space between two letters",
"-label string assign a label to an image",
"-limit type value pixel cache resource limit",
+ "-matte store matte channel if the image has one",
"-mattecolor color frame color",
"-mode type framing style",
"-monitor monitor progress",
- "-origin geometry image origin",
"-page geometry size and location of an image canvas (setting)",
"-pointsize value font point size",
"-profile filename add, delete, or apply an image profile",
"-shadow add a shadow beneath a tile to simulate depth",
"-size geometry width and height of image",
"-stroke color color to use when stroking a graphic primitive",
+ "-support factor resize support: > 1.0 is blurry, < 1.0 is sharp",
"-synchronize synchronize image to storage device",
"-taint declare the image as modified",
"-texture filename name of texture to tile onto the image background",
*stack_operators[]=
{
"-clone indexes clone an image",
+ "-delete indexes delete the image from the image sequence",
"-duplicate count,indexes",
" duplicate an image one or more times",
+ "-insert index insert last image into the image sequence",
+ "-reverse reverse image sequence",
+ "-swap indexes swap two images in the image sequence",
(char *) NULL
};
- (void) printf("Version: %s\n",GetMagickVersion((size_t *) NULL));
- (void) printf("Copyright: %s\n",GetMagickCopyright());
- (void) printf("Features: %s\n\n",GetMagickFeatures());
+ ListMagickVersion(stdout);
(void) printf("Usage: %s [options ...] file [ [options ...] file ...] file\n",
GetClientName());
(void) printf("\nImage Settings:\n");
(void) printf(
"-borderwidth, -font, -mattecolor, or -title\n");
(void) printf(
- "\nBy default, the image format of `file' is determined by its magic\n");
+ "\nBy default, the image format of 'file' is determined by its magic\n");
(void) printf(
"number. To specify a particular image format, precede the filename\n");
(void) printf(
#define ThrowMontageInvalidArgumentException(option,argument) \
{ \
(void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
- "InvalidArgument","`%s': %s",option,argument); \
+ "InvalidArgument","'%s': %s",option,argument); \
DestroyMontage(); \
return(MagickFalse); \
}
if ((LocaleCompare("version",option+1) == 0) ||
(LocaleCompare("-version",option+1) == 0))
{
- (void) FormatLocaleFile(stdout,"Version: %s\n",
- GetMagickVersion((size_t *) NULL));
- (void) FormatLocaleFile(stdout,"Copyright: %s\n",
- GetMagickCopyright());
- (void) FormatLocaleFile(stdout,"Features: %s\n\n",
- GetMagickFeatures());
+ ListMagickVersion(stdout);
return(MagickFalse);
}
}
filename=argv[i];
if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
filename=argv[++i];
- (void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
- if (first_scene != last_scene)
+ (void) CloneString(&image_info->font,montage_info->font);
+ if (first_scene == last_scene)
+ images=ReadImages(image_info,filename,exception);
+ else
{
char
- filename[MaxTextExtent];
+ filename[MagickPathExtent];
/*
Form filename for multi-part images.
(void) InterpretImageFilename(image_info,(Image *) NULL,
image_info->filename,(int) scene,filename,exception);
if (LocaleCompare(filename,image_info->filename) == 0)
- (void) FormatLocaleString(filename,MaxTextExtent,"%s.%.20g",
+ (void) FormatLocaleString(filename,MagickPathExtent,"%s.%.20g",
image_info->filename,(double) scene);
- (void) CopyMagickString(image_info->filename,filename,
- MaxTextExtent);
+ images=ReadImages(image_info,filename,exception);
}
- (void) CloneString(&image_info->font,montage_info->font);
- images=ReadImages(image_info,exception);
status&=(images != (Image *) NULL) &&
(exception->severity < ErrorException);
if (images == (Image *) NULL)
if (LocaleCompare("adaptive-sharpen",option+1) == 0)
{
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
i++;
if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
- type=ParseCommandOption(MagickAlphaOptions,MagickFalse,argv[i]);
+ type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,argv[i]);
if (type < 0)
- ThrowMontageException(OptionError,"UnrecognizedAlphaChannelType",
+ ThrowMontageException(OptionError,"UnrecognizedAlphaChannelOption",
argv[i]);
break;
}
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
i++;
break;
{
if (k == 0)
{
- (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
+ (void) CopyMagickString(argv[i]+1,"sans",MagickPathExtent);
montage_info->border_width=0;
}
if (*option == '+')
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
channel=ParseChannelOption(argv[i]);
if (channel < 0)
if (LocaleCompare("clone",option+1) == 0)
{
Image
- *clone_images;
-
- clone_images=image;
+ *clone_images,
+ *clone_list;
+
+ clone_list=CloneImageList(image,exception);
if (k != 0)
- clone_images=image_stack[k-1].image;
- if (clone_images == (Image *) NULL)
+ clone_list=CloneImageList(image_stack[k-1].image,exception);
+ if (clone_list == (Image *) NULL)
ThrowMontageException(ImageError,"ImageSequenceRequired",option);
FireImageStack(MagickTrue,MagickTrue,MagickTrue);
if (*option == '+')
- clone_images=CloneImages(clone_images,"-1",exception);
+ clone_images=CloneImages(clone_list,"-1",exception);
else
- {
+ {
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
- clone_images=CloneImages(clone_images,argv[i],exception);
+ clone_images=CloneImages(clone_list,argv[i],exception);
}
if (clone_images == (Image *) NULL)
ThrowMontageException(OptionError,"NoSuchImage",option);
AppendImageStack(clone_images);
+ clone_list=DestroyImageList(clone_list);
break;
}
if (LocaleCompare("coalesce",option+1) == 0)
}
break;
}
+ if (LocaleCompare("delete",option+1) == 0)
+ {
+ if (*option == '+')
+ break;
+ i++;
+ if (i == (ssize_t) argc)
+ ThrowMontageException(OptionError,"MissingArgument",option);
+ if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
+ ThrowMontageInvalidArgumentException(option,argv[i]);
+ break;
+ }
if (LocaleCompare("density",option+1) == 0)
{
if (*option == '+')
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
{
if (k == 0)
{
- (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
+ (void) CopyMagickString(argv[i]+1,"sans",MagickPathExtent);
(void) CloneString(&montage_info->frame,(char *) NULL);
}
if (*option == '+')
{
if (LocaleCompare("identify",option+1) == 0)
break;
+ if (LocaleCompare("insert",option+1) == 0)
+ {
+ if (*option == '+')
+ break;
+ i++;
+ if (i == (ssize_t) argc)
+ ThrowMontageException(OptionError,"MissingArgument",option);
+ if (IsGeometry(argv[i]) == MagickFalse)
+ ThrowMontageInvalidArgumentException(option,argv[i]);
+ break;
+ }
if (LocaleCompare("interlace",option+1) == 0)
{
ssize_t
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
i++;
if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
- value=InterpretLocaleValue(argv[i],&p);
+ value=StringToDouble(argv[i],&p);
(void) value;
if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
ThrowMontageInvalidArgumentException(option,argv[i]);
status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
argv+j,exception);
DestroyMontage();
- return(status != 0 ? MagickFalse : MagickTrue);
+ return(status == 0 ? MagickTrue : MagickFalse);
}
if (LocaleCompare("log",option+1) == 0)
{
MontageMode
mode;
- (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
+ (void) CopyMagickString(argv[i]+1,"sans",MagickPathExtent);
if (*option == '+')
break;
i++;
break;
ThrowMontageException(OptionError,"UnrecognizedOption",option)
}
- case 'o':
- {
- if (LocaleCompare("origin",option+1) == 0)
- {
- if (*option == '+')
- break;
- i++;
- if (i == (ssize_t) argc)
- ThrowMontageException(OptionError,"MissingArgument",option);
- if (IsGeometry(argv[i]) == MagickFalse)
- ThrowMontageInvalidArgumentException(option,argv[i]);
- break;
- }
- ThrowMontageException(OptionError,"UnrecognizedOption",option)
- }
case 'p':
{
if (LocaleCompare("page",option+1) == 0)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
- montage_info->pointsize=InterpretLocaleValue(argv[i],
- (char **) NULL);
+ montage_info->pointsize=StringToDouble(argv[i],(char **) NULL);
break;
}
if (LocaleCompare("polaroid",option+1) == 0)
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
if (LocaleCompare("profile",option+1) == 0)
{
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
break;
}
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
colorspace=ParseCommandOption(MagickColorspaceOptions,
MagickFalse,argv[i]);
respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
break;
}
+ if (LocaleCompare("reverse",option+1) == 0)
+ break;
if (LocaleCompare("rotate",option+1) == 0)
{
i++;
ThrowMontageInvalidArgumentException(option,argv[i]);
break;
}
- if (LocaleCompare("seed",option+1) == 0)
+ if (LocaleCompare("scale",option+1) == 0)
{
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
(void) sscanf(argv[i],"%ld-%ld",&first_scene,&last_scene);
break;
}
+ if (LocaleCompare("seed",option+1) == 0)
+ {
+ if (*option == '+')
+ break;
+ i++;
+ if (i == (ssize_t) argc)
+ ThrowMontageException(OptionError,"MissingArgument",option);
+ if (IsGeometry(argv[i]) == MagickFalse)
+ ThrowMontageInvalidArgumentException(option,argv[i]);
+ break;
+ }
if (LocaleCompare("set",option+1) == 0)
{
i++;
{
if (k == 0)
{
- (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
+ (void) CopyMagickString(argv[i]+1,"sans",MagickPathExtent);
montage_info->shadow=(*option == '-') ? MagickTrue :
MagickFalse;
break;
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
i++; /* deprecated */
break;
}
+ if (LocaleCompare("swap",option+1) == 0)
+ {
+ if (*option == '+')
+ break;
+ i++;
+ if (i == (ssize_t) argc)
+ ThrowMontageException(OptionError,"MissingArgument",option);
+ if (IsGeometry(argv[i]) == MagickFalse)
+ ThrowMontageInvalidArgumentException(option,argv[i]);
+ break;
+ }
if (LocaleCompare("synchronize",option+1) == 0)
break;
ThrowMontageException(OptionError,"UnrecognizedOption",option)
{
if (k == 0)
{
- (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
+ (void) CopyMagickString(argv[i]+1,"sans",MagickPathExtent);
(void) CloneString(&montage_info->tile,(char *) NULL);
}
if (*option == '+')
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
break;
}
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
units=ParseCommandOption(MagickResolutionOptions,MagickFalse,
argv[i]);
if (*option == '+')
break;
i++;
- if (i == (ssize_t) (argc-1))
+ if (i == (ssize_t) argc)
ThrowMontageException(OptionError,"MissingArgument",option);
if (IsGeometry(argv[i]) == MagickFalse)
ThrowMontageInvalidArgumentException(option,argv[i]);
if ((LocaleCompare("version",option+1) == 0) ||
(LocaleCompare("-version",option+1) == 0))
{
- (void) FormatLocaleFile(stdout,"Version: %s\n",
- GetMagickVersion((size_t *) NULL));
- (void) FormatLocaleFile(stdout,"Copyright: %s\n",
- GetMagickCopyright());
- (void) FormatLocaleFile(stdout,"Features: %s\n\n",
- GetMagickFeatures());
+ ListMagickVersion(stdout);
break;
}
if (LocaleCompare("virtual-pixel",option+1) == 0)
FinalizeImageSettings(image_info,image,MagickTrue);
if (image == (Image *) NULL)
ThrowMontageException(OptionError,"MissingAnImageFilename",argv[argc-1]);
- (void) CopyMagickString(montage_info->filename,argv[argc-1],MaxTextExtent);
+ (void) CopyMagickString(montage_info->filename,argv[argc-1],MagickPathExtent);
montage_image=MontageImageList(image_info,montage_info,image,exception);
if (montage_image == (Image *) NULL)
status=MagickFalse;
/*
Write image.
*/
- (void) CopyMagickString(image_info->filename,argv[argc-1],MaxTextExtent);
+ (void) CopyMagickString(image_info->filename,argv[argc-1],MagickPathExtent);
(void) CopyMagickString(montage_image->magick_filename,argv[argc-1],
- MaxTextExtent);
+ MagickPathExtent);
if (*montage_image->magick == '\0')
(void) CopyMagickString(montage_image->magick,image->magick,
- MaxTextExtent);
+ MagickPathExtent);
status&=WriteImages(image_info,montage_image,argv[argc-1],exception);
if (metadata != (char **) NULL)
{
ThrowMontageException(ResourceLimitError,"MemoryAllocationFailed",
GetExceptionMessage(errno));
(void) ConcatenateString(&(*metadata),text);
- (void) ConcatenateString(&(*metadata),"\n");
text=DestroyString(text);
}
}