{ "-composite", 0L, ListOperatorOptionFlag | FireOptionFlag, MagickFalse },
{ "+compress", 0L, ImageInfoOptionFlag, MagickFalse },
{ "-compress", 1L, ImageInfoOptionFlag, MagickFalse },
- { "+concurrent", 0L, GenesisOptionFlag, MagickTrue },
- { "-concurrent", 0L, GenesisOptionFlag, MagickTrue },
- { "+contrast", 0L, SimpleOperatorOptionFlag, MagickFalse },
- { "-contrast", 0L, SimpleOperatorOptionFlag, MagickFalse },
+ { "+concurrent", 0L, GenesisOptionFlag, MagickFalse },
+ { "-concurrent", 0L, GenesisOptionFlag, MagickFalse },
+ { "+contrast", 0L, DeprecateOptionFlag, MagickTrue },
+ { "-contrast", 0L, DeprecateOptionFlag, MagickTrue },
{ "+contrast-stretch", 1L, DeprecateOptionFlag, MagickTrue },
{ "-contrast-stretch", 1L, SimpleOperatorOptionFlag, MagickFalse },
{ "+convolve", 1L, DeprecateOptionFlag, MagickTrue },
{ "-view", 1L, ImageInfoOptionFlag, MagickFalse },
{ "+vignette", 1L, DeprecateOptionFlag, MagickTrue },
{ "-vignette", 1L, SimpleOperatorOptionFlag, MagickFalse },
- { "+virtual-pixel", 0L, ImageInfoOptionFlag | SimpleOperatorOptionFlag, MagickFalse },
- { "-virtual-pixel", 1L, ImageInfoOptionFlag | SimpleOperatorOptionFlag, MagickFalse },
+ { "+virtual-pixel", 0L, ImageInfoOptionFlag, MagickFalse },
+ { "-virtual-pixel", 1L, ImageInfoOptionFlag, MagickFalse },
{ "+visual", 0L, NonMagickOptionFlag, MagickFalse },
{ "-visual", 1L, NonMagickOptionFlag, MagickFalse },
{ "+watermark", 0L, NonMagickOptionFlag, MagickFalse },
},
DistortOptions[] =
{
- { "Undefined", UndefinedDistortion, UndefinedOptionFlag, MagickTrue },
{ "Affine", AffineDistortion, UndefinedOptionFlag, MagickFalse },
{ "AffineProjection", AffineProjectionDistortion, UndefinedOptionFlag, MagickFalse },
{ "ScaleRotateTranslate", ScaleRotateTranslateDistortion, UndefinedOptionFlag, MagickFalse },
%
% DeleteImageOption() deletes an key from the image map.
%
+% Returns MagickTrue is the option is found and deleted from the Options.
+%
% The format of the DeleteImageOption method is:
%
% MagickBooleanType DeleteImageOption(ImageInfo *image_info,
(void) SetImageOption(_image_info,option+1,ArgOption(NULL));
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'b':
{
CLISettingOptionInfo(cli_wand,"undercolor",arg1);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'c':
{
"-layer" operators shoud use _image_info if defined otherwise
they should use a per-image compose setting.
*/
+ parse = ParseCommandOption(MagickComposeOptions,MagickFalse,
+ ArgOption("undefined"));
+ if (parse < 0)
+ CLIWandExceptArgBreak(OptionError,"UnrecognizedComposeOperator",
+ option,arg1);
+ _image_info->compose=(CompositeOperator) parse;
(void) SetImageOption(_image_info,option+1,ArgOption(NULL));
- _image_info->compose=(CompositeOperator) ParseCommandOption(
- MagickComposeOptions,MagickFalse,ArgOption("undefined"));
break;
}
if (LocaleCompare("compress",option+1) == 0)
Note that "undefined" is a different setting to "none".
*/
+ parse = ParseCommandOption(MagickCompressOptions,MagickFalse,
+ ArgOption("undefined"));
+ if (parse < 0)
+ CLIWandExceptArgBreak(OptionError,"UnrecognizedImageCompression",
+ option,arg1);
+ _image_info->compression=(CompressionType) parse;
(void) SetImageOption(_image_info,option+1,ArgOption(NULL));
- _image_info->compression=(CompressionType) ParseCommandOption(
- MagickCompressOptions,MagickFalse,ArgOption("undefined"));
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'd':
{
if (LocaleCompare("debug",option+1) == 0)
{
/* SyncImageSettings() used to set per-image attribute. */
- (void) SetLogEventMask(ArgOption("none"));
- _image_info->debug=IsEventLogging(); /* extract logging*/
+ arg1=ArgOption("none");
+ parse = ParseCommandOption(MagickLogEventOptions,MagickFalse,arg1);
+ if (parse < 0)
+ CLIWandExceptArgBreak(OptionError,"UnrecognizedEventType",
+ option,arg1);
+ (void) SetLogEventMask(arg1);
+ _image_info->debug=IsEventLogging(); /* extract logging*/
cli_wand->wand.debug=IsEventLogging();
break;
}
/* DefineImageOption() equals SetImageOption() but with '=' */
if (IfSetOption)
(void) DefineImageOption(_image_info,arg1);
- else
- (void) DeleteImageOption(_image_info,arg1);
+ else if ( DeleteImageOption(_image_info,arg1) == MagickFalse )
+ CLIWandExceptArgBreak(OptionError,"NoSuchOption",option,arg1);
break;
}
if (LocaleCompare("delay",option+1) == 0)
/* Only used for new images via AcquireImage()
FUTURE: Option should also be used for "-morph" (color morphing)
*/
- (void) SetImageOption(_image_info,option+1,ArgOption("0"));
+ arg1=ArgOption("0");
+ if (IsGeometry(arg1) == MagickFalse)
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
+ (void) SetImageOption(_image_info,option+1,arg1);
break;
}
if (LocaleCompare("density",option+1) == 0)
SyncImageSettings() used to set per-image attribute.
*/
+ if (IfSetOption && IsGeometry(arg1) == MagickFalse)
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
(void) SetImageOption(_image_info,option+1,ArgOption(NULL));
(void) CloneString(&_image_info->density,ArgOption(NULL));
(void) CloneString(&_draw_info->density,_image_info->density);
/* This is also a SimpleImageOperator! for 8->16 vaule trunc !!!!
SyncImageSettings() used to set per-image attribute.
*/
+ if (IfSetOption && IsGeometry(arg1) == MagickFalse)
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
_image_info->depth=IfSetOption?StringToUnsignedLong(arg1)
:MAGICKCORE_QUANTUM_DEPTH;
break;
if (LocaleCompare("direction",option+1) == 0)
{
/* Image Option is only used to set _draw_info */
- (void) SetImageOption(_image_info,option+1,ArgOption("undefined"));
- _draw_info->direction=(DirectionType) ParseCommandOption(
- MagickDirectionOptions,MagickFalse,
- ArgOption("undefined"));
+ arg1=ArgOption("undefined");
+ parse = ParseCommandOption(MagickDirectionOptions,MagickFalse,arg1);
+ if (parse < 0)
+ CLIWandExceptArgBreak(OptionError,"UnrecognizedDirectionType",
+ option,arg1);
+ _draw_info->direction=(DirectionType) parse;
+ (void) SetImageOption(_image_info,option+1,arg1);
break;
}
if (LocaleCompare("display",option+1) == 0)
if (LocaleCompare("dispose",option+1) == 0)
{
/* only used in setting new images */
+ arg1=ArgOption("undefined");
+ parse = ParseCommandOption(MagickDisposeOptions,MagickFalse,arg1);
+ if (parse < 0)
+ CLIWandExceptArgBreak(OptionError,"UnrecognizedDisposeMethod",
+ option,arg1);
(void) SetImageOption(_image_info,option+1,ArgOption("undefined"));
break;
}
_image_info->dither = _quantize_info->dither = MagickFalse;
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'e':
{
(void) CloneString(&_image_info->extract,ArgOption(NULL));
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'f':
{
(void) SetImageOption(_image_info,option+1,"0");
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'g':
{
(void) SetImageOption(_image_info,option+1,ArgOption("0.0"));
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'i':
{
_draw_info->interword_spacing=StringToDouble(ArgOption("0"),(char **) NULL);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'k':
{
_draw_info->kerning=StringToDouble(ArgOption("0"),(char **) NULL);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'l':
{
(void) SetImageOption(_image_info,option+1,ArgOption("0"));
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'm':
{
_image_info->monochrome= ArgBoolean;
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'o':
{
MagickOrientationOptions,MagickFalse,ArgOption("undefined"));
break;
}
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'p':
{
break;
}
*/
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'q':
{
warning_handler=SetWarningHandler(warning_handler);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'r':
{
_draw_info->render= ArgBooleanNot;
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 's':
{
_image_info->synchronize = ArgBoolean;
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 't':
{
MagickFalse,ArgOption("undefined"));
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'u':
{
MagickResolutionOptions,MagickFalse,ArgOption("undefined"));
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'v':
{
(void) SetImageOption(_image_info,option+1,ArgOption(NULL));
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'w':
{
(void) SetImageOption(_image_info,option+1,ArgOption("0.0"));
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
default:
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
#undef _image_info
new_image->orientation=TopLeftOrientation;
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'b':
{
_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'c':
{
_exception);
break;
}
+#if 0
+ /* this is a stupid and pretty usless operation
+ * -level 10% produces much better and more controlled result
+ */
if (LocaleCompare("contrast",option+1) == 0)
{
(void) ContrastImage(_image,normal_op,_exception);
break;
}
+#endif
if (LocaleCompare("contrast-stretch",option+1) == 0)
{
double
MagickStatusType
flags;
+ if (IsGeometry(arg1) == MagickFalse)
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
flags=ParseGeometry(arg1,&geometry_info);
black_point=geometry_info.rho;
white_point=(flags & SigmaValue) != 0 ? geometry_info.sigma :
black_point;
- if ((flags & PercentValue) != 0)
- {
+ if ((flags & PercentValue) != 0) {
black_point*=(double) _image->columns*_image->rows/100.0;
white_point*=(double) _image->columns*_image->rows/100.0;
}
kernel_info=AcquireKernelInfo(arg1);
if (kernel_info == (KernelInfo *) NULL)
- break;
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
kernel_info->bias=_image->bias;
new_image=ConvolveImage(_image,kernel_info,_exception);
kernel_info=DestroyKernelInfo(kernel_info);
if (LocaleCompare("crop",option+1) == 0)
{
/* WARNING: This can generate multiple images! */
+ if (IsGeometry(arg1) == MagickFalse)
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
new_image=CropImageToTiles(_image,arg1,_exception);
break;
}
if (LocaleCompare("cycle",option+1) == 0)
{
+ if (IsGeometry(arg1) == MagickFalse)
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
(void) CycleColormapImage(_image,(ssize_t) StringToLong(arg1),
_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'd':
{
*passkey;
passkey=FileToStringInfo(arg1,~0,_exception);
- if (passkey != (StringInfo *) NULL)
- {
- (void) PasskeyDecipherImage(_image,passkey,_exception);
- passkey=DestroyStringInfo(passkey);
- }
+ if (passkey == (StringInfo *) NULL)
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
+
+ (void) PasskeyDecipherImage(_image,passkey,_exception);
+ passkey=DestroyStringInfo(passkey);
break;
}
if (LocaleCompare("depth",option+1) == 0)
double
threshold;
- if (IfNormalOp)
+ if (IfNormalOp) {
+ if (IsGeometry(arg1) == MagickFalse)
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
threshold=StringToDoubleInterval(arg1,(double) QuantumRange+1.0);
+ }
else
threshold=40.0*QuantumRange/100.0;
new_image=DeskewImage(_image,threshold,_exception);
size_t
number_arguments;
- method=(DistortImageMethod) ParseCommandOption(MagickDistortOptions,
- MagickFalse,arg1);
+ x = ParseCommandOption(MagickDistortOptions,MagickFalse,arg1);
+ if ( x < 0 )
+ CLIWandExceptArgBreak(OptionError,"UnrecognizedDistortMethod",
+ option,arg1);
+ method = (DistortImageMethod) x;
if (method == ResizeDistortion)
{
double
** Convert that to an appropriate distortion argument array.
** FUTURE: make a separate special resize operator
*/
- (void) ParseRegionGeometry(_image,arg2,&geometry,
- _exception);
+ if (IsGeometry(arg2) == MagickFalse)
+ CLIWandExceptArgBreak(OptionError,"InvalidGeometry",
+ option,arg2);
+ (void) ParseRegionGeometry(_image,arg2,&geometry,_exception);
resize_args[0]=(double) geometry.width;
resize_args[1]=(double) geometry.height;
new_image=DistortImage(_image,method,(size_t)2,
break;
}
/* handle percent arguments */
- args=InterpretImageProperties(_image_info,_image,arg2,
- _exception);
+ args=InterpretImageProperties(_image_info,_image,arg2,_exception);
if (args == (char *) NULL)
break;
/* convert arguments into an array of doubles
arguments=(double *) AcquireQuantumMemory(number_arguments,
sizeof(*arguments));
if (arguments == (double *) NULL)
- ThrowWandFatalException(ResourceLimitFatalError,
- "MemoryAllocationFailed",_image->filename);
+ CLIWandExceptionBreak(ResourceLimitFatalError,
+ "MemoryAllocationFailed",option);
(void) ResetMagickMemory(arguments,0,number_arguments*
- sizeof(*arguments));
+ sizeof(*arguments));
p=(char *) args;
for (x=0; (x < (ssize_t) number_arguments) && (*p != '\0'); x++)
{
(void) CloneString(&_draw_info->primitive,(char *)NULL);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'e':
{
new_image=ExtentImage(_image,&geometry,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'f':
{
parameters=(double *) RelinquishMagickMemory(parameters);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'g':
{
_image->filter,_image->blur,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'h':
{
(void) SetImageArtifact(_image,option+1,arg1);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'i':
{
geometry.height,_image->interpolate,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'l':
{
(void) SetImageArtifact(_image,option+1,arg1);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'm':
{
_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'n':
{
(void) NormalizeImage(_image,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'o':
{
(void) OrderedPosterizeImage(_image,arg1,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'p':
{
profile_image=DestroyImage(profile_image);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'r':
{
new_image=RotateImage(_image,geometry_info.rho,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 's':
{
_image->interpolate,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 't':
{
(void) SetImageType(_image,_image_info->type,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'u':
{
geometry_info.sigma,geometry_info.xi,geometry_info.psi,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'v':
{
(ssize_t) ceil(geometry_info.psi-0.5),_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'w':
{
(void) WhiteThresholdImage(_image,arg1,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
default:
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
/*
Replace current image with any image that was generated
CLIListOperatorImages(cli_wand,"-evaluate-sequence","Mean",NULL);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'c':
{
source_image=DestroyImage(source_image);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'd':
{
size_t
number_duplicates;
+ if (IsGeometry(arg1) == MagickFalse)
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,
+ arg1);
number_duplicates=(size_t) StringToLong(arg1);
p=strchr(arg1,',');
if (p == (const char *) NULL)
- new_images=DuplicateImages(_images,number_duplicates,
- "-1",_exception);
+ new_images=DuplicateImages(_images,number_duplicates,"-1",
+ _exception);
else
new_images=DuplicateImages(_images,number_duplicates,p,
_exception);
new_images=(Image *)NULL;
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'e':
{
new_images=EvaluateImages(_images,method,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'f':
{
new_images=FxImage(_images,arg1,_exception);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'h':
{
hald_image=DestroyImage(hald_image);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'i':
{
_images=GetFirstImageInList(index_image);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'l':
{
(void) SetMagickResourceLimit(type,limit);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'm':
{
CLIListOperatorImages(cli_wand,"-layer",option+1,NULL);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'p':
{
arguments=(char **) RelinquishMagickMemory(arguments);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'r':
{
ReverseImageList(&_images);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 's':
{
_images=GetFirstImageInList(q);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
case 'w':
{
write_images=DestroyImageList(write_images);
break;
}
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
default:
- break;
+ CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
}
if (new_images == (Image *) NULL)
return;
#endif
#if 0
if ( ( process_flags & ProcessUnknownOptionError ) != 0 )
- MagickExceptionReturn(OptionError,"InvalidUseOfOption",option);
#endif
+ CLIWandException(OptionError,"UnrecognizedOption",option);
#undef _exception
}