blob: 232bec7772c8d62650d5f9cbfbe46d5051841488 [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3% %
4% %
5% %
6% CCCC OOO N N V V EEEEE RRRR TTTTT %
7% C O O NN N V V E R R T %
8% C O O N N N V V EEE RRRR T %
9% C O O N NN V V E R R T %
10% CCCC OOO N N V EEEEE R R T %
11% %
12% %
13% Convert an image from one format to another. %
14% %
15% Software Design %
cristyde984cd2013-12-01 14:49:27 +000016% Cristy %
cristy3ed852e2009-09-05 21:47:34 +000017% April 1992 %
18% %
19% %
cristyb56bb242014-11-25 17:12:48 +000020% Copyright 1999-2015 ImageMagick Studio LLC, a non-profit organization %
cristy3ed852e2009-09-05 21:47:34 +000021% dedicated to making software imaging solutions freely available. %
22% %
23% You may not use this file except in compliance with the License. You may %
24% obtain a copy of the License at %
25% %
26% http://www.imagemagick.org/script/license.php %
27% %
28% Unless required by applicable law or agreed to in writing, software %
29% distributed under the License is distributed on an "AS IS" BASIS, %
30% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
31% See the License for the specific language governing permissions and %
32% limitations under the License. %
33% %
34%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35%
36% Use the convert program to convert between image formats as well as resize
37% an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample,
38% and much more.
39%
40*/
41
42/*
43 Include declarations.
44*/
cristy4c08aed2011-07-01 19:47:50 +000045#include "MagickWand/studio.h"
46#include "MagickWand/MagickWand.h"
47#include "MagickWand/mogrify-private.h"
48#include "MagickCore/string-private.h"
cristy18c6c272011-09-23 14:40:37 +000049#include "MagickCore/utility-private.h"
cristy3ed852e2009-09-05 21:47:34 +000050/*
51 Define declarations.
52*/
53#define ThrowFileException(exception,severity,tag,context) \
54{ \
cristy4c08aed2011-07-01 19:47:50 +000055 char \
56 *message; \
57 \
58 message=GetExceptionMessage(errno); \
cristy3ed852e2009-09-05 21:47:34 +000059 (void) ThrowMagickException(exception,GetMagickModule(),severity, \
anthonye5b39652012-04-21 05:37:29 +000060 tag == (const char *) NULL ? "unknown" : tag,"'%s': %s",context,message); \
cristy4c08aed2011-07-01 19:47:50 +000061 message=DestroyString(message); \
cristy3ed852e2009-09-05 21:47:34 +000062}
63
64/*
65%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
66% %
67% %
68% %
69+ C o n v e r t I m a g e C o m m a n d %
70% %
71% %
72% %
73%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
74%
75% ConvertImageCommand() reads one or more images, applies one or more image
76% processing operations, and writes out the image in the same or differing
77% format.
78%
79% The format of the ConvertImageCommand method is:
80%
81% MagickBooleanType ConvertImageCommand(ImageInfo *image_info,int argc,
82% char **argv,char **metadata,ExceptionInfo *exception)
83%
84% A description of each parameter follows:
85%
86% o image_info: the image info.
87%
88% o argc: the number of elements in the argument vector.
89%
90% o argv: A text array containing the command line arguments.
91%
92% o metadata: any metadata is returned here.
93%
94% o exception: return any errors or warnings in this structure.
95%
96*/
97
98static MagickBooleanType ConcatenateImages(int argc,char **argv,
99 ExceptionInfo *exception)
100{
101 FILE
102 *input,
103 *output;
104
105 int
106 c;
107
cristybb503372010-05-27 20:51:26 +0000108 register ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000109 i;
110
111 /*
112 Open output file.
113 */
cristy18c6c272011-09-23 14:40:37 +0000114 output=fopen_utf8(argv[argc-1],"wb");
cristy3ed852e2009-09-05 21:47:34 +0000115 if (output == (FILE *) NULL)
116 {
117 ThrowFileException(exception,FileOpenError,"UnableToOpenFile",
118 argv[argc-1]);
119 return(MagickFalse);
120 }
cristybb503372010-05-27 20:51:26 +0000121 for (i=2; i < (ssize_t) (argc-1); i++)
cristy3ed852e2009-09-05 21:47:34 +0000122 {
cristy18c6c272011-09-23 14:40:37 +0000123 input=fopen_utf8(argv[i],"rb");
cristy3ed852e2009-09-05 21:47:34 +0000124 if (input == (FILE *) NULL)
cristyf2a82ee2014-05-26 17:49:54 +0000125 {
126 ThrowFileException(exception,FileOpenError,"UnableToOpenFile",argv[i]);
127 continue;
128 }
cristy3ed852e2009-09-05 21:47:34 +0000129 for (c=fgetc(input); c != EOF; c=fgetc(input))
130 (void) fputc((char) c,output);
131 (void) fclose(input);
cristy18c6c272011-09-23 14:40:37 +0000132 (void) remove_utf8(argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000133 }
134 (void) fclose(output);
135 return(MagickTrue);
136}
137
138static MagickBooleanType ConvertUsage(void)
139{
140 static const char
cristy87c02f42012-02-24 00:19:10 +0000141 *channel_operators[]=
142 {
cristy5f257b22012-03-07 00:27:29 +0000143 "-channel-fx expression",
cristyd04e7bf2012-03-03 19:19:12 +0000144 " exchange, extract, or transfer one or more image channels",
cristydfdb19e2012-03-21 22:22:24 +0000145 "-separate separate an image channel into a grayscale image",
cristy87c02f42012-02-24 00:19:10 +0000146 (char *) NULL
147 },
cristy3ed852e2009-09-05 21:47:34 +0000148 *miscellaneous[]=
149 {
150 "-debug events display copious debugging information",
cristy93053632013-01-06 23:55:19 +0000151 "-distribute-cache port",
cristyd79e2362013-01-06 23:01:40 +0000152 " distributed pixel cache spanning one or more servers",
cristy3ed852e2009-09-05 21:47:34 +0000153 "-help print program options",
154 "-list type print a list of supported option arguments",
155 "-log format format of debugging information",
156 "-version print version information",
157 (char *) NULL
158 },
159 *operators[]=
160 {
161 "-adaptive-blur geometry",
162 " adaptively blur pixels; decrease effect near edges",
163 "-adaptive-resize geometry",
164 " adaptively resize image using 'mesh' interpolation",
165 "-adaptive-sharpen geometry",
166 " adaptively sharpen pixels; increase effect near edges",
167 "-alpha option on, activate, off, deactivate, set, opaque, copy",
168 " transparent, extract, background, or shape",
169 "-annotate geometry text",
170 " annotate the image with text",
171 "-auto-gamma automagically adjust gamma level of image",
172 "-auto-level automagically adjust color levels of image",
173 "-auto-orient automagically orient (rotate) image",
174 "-bench iterations measure performance",
175 "-black-threshold value",
176 " force all pixels below the threshold into black",
177 "-blue-shift factor simulate a scene at nighttime in the moonlight",
178 "-blur geometry reduce image noise and reduce detail levels",
179 "-border geometry surround image with a border of color",
180 "-bordercolor color border color",
cristya28d6b82010-01-11 20:03:47 +0000181 "-brightness-contrast geometry",
182 " improve brightness / contrast of the image",
cristy4ceadb82014-03-29 15:30:43 +0000183 "-canny geometry detect edges in the image",
cristy3ed852e2009-09-05 21:47:34 +0000184 "-cdl filename color correct with a color decision list",
cristy17ada022014-11-07 22:12:23 +0000185 "-channel mask set the image channel mask",
cristy3ed852e2009-09-05 21:47:34 +0000186 "-charcoal radius simulate a charcoal drawing",
187 "-chop geometry remove pixels from the image interior",
cristy1df20892012-11-04 01:06:40 +0000188 "-clamp keep pixel values in range (0-QuantumRange)",
cristy3ed852e2009-09-05 21:47:34 +0000189 "-colorize value colorize the image with the fill color",
cristye6365592010-04-02 17:31:23 +0000190 "-color-matrix matrix apply color correction to the image",
cristybb93b802014-10-25 13:32:45 +0000191 "-connected-components connectivity",
192 " connected-components uniquely labeled",
cristy3ed852e2009-09-05 21:47:34 +0000193 "-contrast enhance or reduce the image contrast",
194 "-contrast-stretch geometry",
anthonye5b39652012-04-21 05:37:29 +0000195 " improve contrast by 'stretching' the intensity range",
cristy3ed852e2009-09-05 21:47:34 +0000196 "-convolve coefficients",
197 " apply a convolution kernel to the image",
198 "-cycle amount cycle the image colormap",
199 "-decipher filename convert cipher pixels to plain pixels",
200 "-deskew threshold straighten an image",
201 "-despeckle reduce the speckles within an image",
202 "-distort method args",
203 " distort images according to given method ad args",
204 "-draw string annotate the image with a graphic primitive",
205 "-edge radius apply a filter to detect edges in the image",
206 "-encipher filename convert plain pixels to cipher pixels",
207 "-emboss radius emboss an image",
208 "-enhance apply a digital filter to enhance a noisy image",
209 "-equalize perform histogram equalization to an image",
210 "-evaluate operator value",
cristyd18ae7c2010-03-07 17:39:52 +0000211 " evaluate an arithmetic, relational, or logical expression",
cristy3ed852e2009-09-05 21:47:34 +0000212 "-extent geometry set the image size",
213 "-extract geometry extract area from image",
214 "-fft implements the discrete Fourier transform (DFT)",
215 "-flip flip image vertically",
216 "-floodfill geometry color",
217 " floodfill the image with color",
218 "-flop flop image horizontally",
219 "-frame geometry surround image with an ornamental border",
cristyc2b730e2009-11-24 14:32:09 +0000220 "-function name parameters",
cristy3ed852e2009-09-05 21:47:34 +0000221 " apply function over image values",
222 "-gamma value level of gamma correction",
223 "-gaussian-blur geometry",
224 " reduce image noise and reduce detail levels",
cristy901f09d2009-10-16 22:56:10 +0000225 "-geometry geometry preferred size or location of the image",
cristybc008152013-03-28 16:52:59 +0000226 "-grayscale method convert image to grayscale",
cristyc1510622014-04-19 16:23:30 +0000227 "-hough-lines geometry",
228 " identify lines in the image",
cristy3ed852e2009-09-05 21:47:34 +0000229 "-identify identify the format and characteristics of the image",
230 "-ift implements the inverse discrete Fourier transform (DFT)",
231 "-implode amount implode image pixels about the center",
cristyd1bc64d2014-09-30 09:52:12 +0000232 "-kuwahara geometry edge preserving noise reduction filter",
cristy3ed852e2009-09-05 21:47:34 +0000233 "-lat geometry local adaptive thresholding",
cristy3ed852e2009-09-05 21:47:34 +0000234 "-level value adjust the level of image contrast",
235 "-level-colors color,color",
cristyee0f8d72009-09-19 00:58:29 +0000236 " level image with the given colors",
cristy3ed852e2009-09-05 21:47:34 +0000237 "-linear-stretch geometry",
anthonye5b39652012-04-21 05:37:29 +0000238 " improve contrast by 'stretching with saturation'",
cristy3ed852e2009-09-05 21:47:34 +0000239 "-liquid-rescale geometry",
240 " rescale image with seam-carving",
cristy2fc10e52014-04-26 14:13:53 +0000241 "-mean-shift geometry delineate arbitrarily shaped clusters in the image",
cristy52ad9e92013-02-08 23:23:29 +0000242 "-median geometry apply a median filter to the image",
243 "-mode geometry make each pixel the 'predominant color' of the",
244 " neighborhood",
cristy3ed852e2009-09-05 21:47:34 +0000245 "-modulate value vary the brightness, saturation, and hue",
246 "-monochrome transform image to black and white",
cristy7c1b9fd2010-02-02 14:36:00 +0000247 "-morphology method kernel",
anthony29188a82010-01-22 10:12:34 +0000248 " apply a morphology method to the image",
cristy3ed852e2009-09-05 21:47:34 +0000249 "-motion-blur geometry",
250 " simulate motion blur",
251 "-negate replace every pixel with its complementary color ",
cristy3c741502011-04-01 23:21:16 +0000252 "-noise geometry add or reduce noise in an image",
cristy3ed852e2009-09-05 21:47:34 +0000253 "-normalize transform image to span the full range of colors",
254 "-opaque color change this color to the fill color",
255 "-ordered-dither NxN",
256 " add a noise pattern to the image with specific",
257 " amplitudes",
258 "-paint radius simulate an oil painting",
cristy3d629e22012-11-04 01:32:13 +0000259 "-perceptible epsilon",
cristyb4671fc2012-11-04 15:02:10 +0000260 " pixel value less than |epsilon| become epsilon or",
261 " -epsilon",
cristy3ed852e2009-09-05 21:47:34 +0000262 "-polaroid angle simulate a Polaroid picture",
263 "-posterize levels reduce the image to a limited number of color levels",
cristy3ed852e2009-09-05 21:47:34 +0000264 "-profile filename add, delete, or apply an image profile",
265 "-quantize colorspace reduce colors in this colorspace",
cristy3ed852e2009-09-05 21:47:34 +0000266 "-raise value lighten/darken image edges to create a 3-D effect",
267 "-random-threshold low,high",
268 " random threshold the image",
cristy3ed852e2009-09-05 21:47:34 +0000269 "-region geometry apply options to a portion of the image",
270 "-render render vector graphics",
271 "-repage geometry size and location of an image canvas",
272 "-resample geometry change the resolution of an image",
273 "-resize geometry resize the image",
274 "-roll geometry roll an image vertically or horizontally",
275 "-rotate degrees apply Paeth rotation to the image",
dirk6d612cf2014-03-13 21:17:23 +0000276 "-rotational-blur angle",
277 " rotational blur the image",
cristy3ed852e2009-09-05 21:47:34 +0000278 "-sample geometry scale image with pixel sampling",
279 "-scale geometry scale the image",
280 "-segment values segment an image",
281 "-selective-blur geometry",
282 " selectively blur pixels within a contrast threshold",
283 "-sepia-tone threshold",
284 " simulate a sepia-toned photo",
285 "-set property value set an image property",
286 "-shade degrees shade the image using a distant light source",
287 "-shadow geometry simulate an image shadow",
288 "-sharpen geometry sharpen the image",
289 "-shave geometry shave pixels from the image edges",
cristycee97112010-05-28 00:44:52 +0000290 "-shear geometry slide one edge of the image along the X or Y axis",
cristy3ed852e2009-09-05 21:47:34 +0000291 "-sigmoidal-contrast geometry",
cristyb4671fc2012-11-04 15:02:10 +0000292 " increase the contrast without saturating highlights or",
293 " shadows",
cristy3ed852e2009-09-05 21:47:34 +0000294 "-sketch geometry simulate a pencil sketch",
295 "-solarize threshold negate all pixels above the threshold level",
296 "-sparse-color method args",
297 " fill in a image based on a few color points",
298 "-splice geometry splice the background color into the image",
299 "-spread radius displace image pixels by a random amount",
cristy95c38342011-03-18 22:39:51 +0000300 "-statistic type geometry",
cristyb4671fc2012-11-04 15:02:10 +0000301 " replace each pixel with corresponding statistic from the",
302 " neighborhood",
cristy3ed852e2009-09-05 21:47:34 +0000303 "-strip strip image of all profiles and comments",
304 "-swirl degrees swirl image pixels about the center",
305 "-threshold value threshold the image",
306 "-thumbnail geometry create a thumbnail of the image",
307 "-tile filename tile image when filling a graphic primitive",
308 "-tint value tint the image with the fill color",
309 "-transform affine transform image",
310 "-transparent color make this color transparent within the image",
311 "-transpose flip image vertically and rotate 90 degrees",
312 "-transverse flop image horizontally and rotate 270 degrees",
313 "-trim trim image edges",
314 "-type type image type",
315 "-unique-colors discard all but one of any pixel color",
316 "-unsharp geometry sharpen the image",
317 "-vignette geometry soften the edges of the image in vignette style",
cristycee97112010-05-28 00:44:52 +0000318 "-wave geometry alter an image along a sine wave",
cristy3ed852e2009-09-05 21:47:34 +0000319 "-white-threshold value",
320 " force all pixels above the threshold into white",
321 (char *) NULL
322 },
323 *sequence_operators[]=
324 {
cristy4285d782011-02-09 20:12:28 +0000325 "-append append an image sequence",
cristy3ed852e2009-09-05 21:47:34 +0000326 "-clut apply a color lookup table to the image",
327 "-coalesce merge a sequence of images",
328 "-combine combine a sequence of images",
cristyb92495a2013-08-20 00:10:59 +0000329 "-compare mathematically and visually annotate the difference between an image and its reconstruction",
cristy790190d2013-10-04 00:51:51 +0000330 "-complex operator perform complex mathematics on an image sequence",
cristy3ed852e2009-09-05 21:47:34 +0000331 "-composite composite image",
332 "-crop geometry cut out a rectangular region of the image",
333 "-deconstruct break down an image sequence into constituent parts",
cristyd18ae7c2010-03-07 17:39:52 +0000334 "-evaluate-sequence operator",
335 " evaluate an arithmetic, relational, or logical expression",
cristy3ed852e2009-09-05 21:47:34 +0000336 "-flatten flatten a sequence of images",
337 "-fx expression apply mathematical expression to an image channel(s)",
338 "-hald-clut apply a Hald color lookup table to the image",
cristye0b9b8f2013-03-28 12:39:39 +0000339 "-layers method optimize, merge, or compare image layers",
cristy3ed852e2009-09-05 21:47:34 +0000340 "-morph value morph an image sequence",
341 "-mosaic create a mosaic from an image sequence",
cristy8cdfb342012-11-11 21:44:36 +0000342 "-poly terms build a polynomial from the image sequence and the corresponding",
cristydbc2da92012-11-12 13:16:07 +0000343 " terms (coefficients and degree pairs).",
cristy36b94822010-05-20 12:48:16 +0000344 "-print string interpret string and print to console",
cristy3ed852e2009-09-05 21:47:34 +0000345 "-process arguments process the image with a custom image filter",
cristy4285d782011-02-09 20:12:28 +0000346 "-smush geometry smush an image sequence together",
cristy3ed852e2009-09-05 21:47:34 +0000347 "-write filename write images to this file",
348 (char *) NULL
349 },
350 *settings[]=
351 {
352 "-adjoin join images into a single multi-image file",
353 "-affine matrix affine transform matrix",
354 "-alpha option activate, deactivate, reset, or set the alpha channel",
355 "-antialias remove pixel-aliasing",
356 "-authenticate password",
357 " decipher image with this password",
358 "-attenuate value lessen (or intensify) when adding noise to an image",
359 "-background color background color",
360 "-bias value add bias when convolving an image",
361 "-black-point-compensation",
362 " use black point compensation",
363 "-blue-primary point chromaticity blue primary point",
364 "-bordercolor color border color",
365 "-caption string assign a caption to an image",
cristy1e618102013-03-17 14:52:31 +0000366 "-clip clip along the first path from the 8BIM profile",
367 "-clip-mask filename associate a clip mask with the image",
368 "-clip-path id clip along a named path from the 8BIM profile",
cristy3ed852e2009-09-05 21:47:34 +0000369 "-colors value preferred number of colors in the image",
370 "-colorspace type alternate image colorspace",
371 "-comment string annotate image with comment",
372 "-compose operator set image composite operator",
373 "-compress type type of pixel compression when writing the image",
374 "-define format:option",
375 " define one or more image format options",
376 "-delay value display the next image after pausing",
377 "-density geometry horizontal and vertical density of the image",
378 "-depth value image depth",
cristyc9b12952010-03-28 01:12:28 +0000379 "-direction type render text right-to-left or left-to-right",
cristy3ed852e2009-09-05 21:47:34 +0000380 "-display server get image or font from this X server",
381 "-dispose method layer disposal method",
382 "-dither method apply error diffusion to image",
383 "-encoding type text encoding type",
384 "-endian type endianness (MSB or LSB) of the image",
385 "-family name render text with this font family",
cristy14154222012-06-15 23:21:49 +0000386 "-features distance analyze image features (e.g. contrast, correlation)",
cristy3ed852e2009-09-05 21:47:34 +0000387 "-fill color color to use when filling a graphic primitive",
388 "-filter type use this filter when resizing an image",
389 "-font name render text with this font",
390 "-format \"string\" output formatted image characteristics",
391 "-fuzz distance colors within this distance are considered equal",
392 "-gravity type horizontal and vertical text placement",
393 "-green-primary point chromaticity green primary point",
cristy70e9f682013-03-12 22:31:22 +0000394 "-intensity method method to generate an intensity value from a pixel",
cristy3ed852e2009-09-05 21:47:34 +0000395 "-intent type type of rendering intent when managing the image color",
396 "-interlace type type of image interlacing scheme",
cristyb32b90a2009-09-07 21:45:48 +0000397 "-interline-spacing value",
398 " set the space between two text lines",
cristy3ed852e2009-09-05 21:47:34 +0000399 "-interpolate method pixel color interpolation method",
400 "-interword-spacing value",
401 " set the space between two words",
402 "-kerning value set the space between two letters",
403 "-label string assign a label to an image",
404 "-limit type value pixel cache resource limit",
405 "-loop iterations add Netscape loop extension to your GIF animation",
406 "-mask filename associate a mask with the image",
cristye9252c22013-07-30 15:43:21 +0000407 "-matte store matte channel if the image has one",
cristy3ed852e2009-09-05 21:47:34 +0000408 "-mattecolor color frame color",
cristy80b1dee2014-01-09 11:27:24 +0000409 "-moments report image moments",
cristy3ed852e2009-09-05 21:47:34 +0000410 "-monitor monitor progress",
411 "-orient type image orientation",
412 "-page geometry size and location of an image canvas (setting)",
413 "-ping efficiently determine image attributes",
414 "-pointsize value font point size",
cristy7c1b9fd2010-02-02 14:36:00 +0000415 "-precision value maximum number of significant digits to print",
cristy3ed852e2009-09-05 21:47:34 +0000416 "-preview type image preview type",
417 "-quality value JPEG/MIFF/PNG compression level",
418 "-quiet suppress all warning messages",
419 "-red-primary point chromaticity red primary point",
420 "-regard-warnings pay attention to warning messages",
421 "-remap filename transform image colors to match this set of colors",
422 "-respect-parentheses settings remain in effect until parenthesis boundary",
423 "-sampling-factor geometry",
424 " horizontal and vertical sampling factor",
425 "-scene value image scene number",
426 "-seed value seed a new sequence of pseudo-random numbers",
427 "-size geometry width and height of image",
428 "-stretch type render text with this font stretch",
429 "-stroke color graphic primitive stroke color",
430 "-strokewidth value graphic primitive stroke width",
431 "-style type render text with this font style",
cristye9252c22013-07-30 15:43:21 +0000432 "-support factor resize support: > 1.0 is blurry, < 1.0 is sharp",
cristyd9a29192010-10-16 16:49:53 +0000433 "-synchronize synchronize image to storage device",
434 "-taint declare the image as modified",
cristy3ed852e2009-09-05 21:47:34 +0000435 "-texture filename name of texture to tile onto the image background",
436 "-tile-offset geometry",
437 " tile offset",
438 "-treedepth value color tree depth",
439 "-transparent-color color",
440 " transparent color",
441 "-undercolor color annotation bounding box color",
442 "-units type the units of image resolution",
443 "-verbose print detailed information about the image",
444 "-view FlashPix viewing transforms",
445 "-virtual-pixel method",
446 " virtual pixel access method",
447 "-weight type render text with this font weight",
448 "-white-point point chromaticity white point",
449 (char *) NULL
450 },
451 *stack_operators[]=
452 {
anthonyb69c4b32011-03-23 04:37:44 +0000453 "-clone indexes clone an image",
454 "-delete indexes delete the image from the image sequence",
455 "-duplicate count,indexes",
cristy5d28d482011-03-20 21:59:40 +0000456 " duplicate an image one or more times",
cristy3ed852e2009-09-05 21:47:34 +0000457 "-insert index insert last image into the image sequence",
anthony9bd15492011-03-23 02:11:13 +0000458 "-reverse reverse image sequence",
cristy3ed852e2009-09-05 21:47:34 +0000459 "-swap indexes swap two images in the image sequence",
460 (char *) NULL
461 };
462
463 const char
464 **p;
465
cristy4f7a6132012-12-23 00:35:19 +0000466 ListMagickVersion(stdout);
cristy3ed852e2009-09-05 21:47:34 +0000467 (void) printf("Usage: %s [options ...] file [ [options ...] "
468 "file ...] [options ...] file\n",GetClientName());
469 (void) printf("\nImage Settings:\n");
470 for (p=settings; *p != (char *) NULL; p++)
471 (void) printf(" %s\n",*p);
472 (void) printf("\nImage Operators:\n");
473 for (p=operators; *p != (char *) NULL; p++)
474 (void) printf(" %s\n",*p);
cristy87c02f42012-02-24 00:19:10 +0000475 (void) printf("\nImage Channel Operators:\n");
476 for (p=channel_operators; *p != (char *) NULL; p++)
477 (void) printf(" %s\n",*p);
cristy3ed852e2009-09-05 21:47:34 +0000478 (void) printf("\nImage Sequence Operators:\n");
479 for (p=sequence_operators; *p != (char *) NULL; p++)
480 (void) printf(" %s\n",*p);
481 (void) printf("\nImage Stack Operators:\n");
482 for (p=stack_operators; *p != (char *) NULL; p++)
483 (void) printf(" %s\n",*p);
484 (void) printf("\nMiscellaneous Options:\n");
485 for (p=miscellaneous; *p != (char *) NULL; p++)
486 (void) printf(" %s\n",*p);
487 (void) printf(
anthonye5b39652012-04-21 05:37:29 +0000488 "\nBy default, the image format of 'file' is determined by its magic\n");
cristy3ed852e2009-09-05 21:47:34 +0000489 (void) printf(
490 "number. To specify a particular image format, precede the filename\n");
491 (void) printf(
492 "with an image format name and a colon (i.e. ps:image) or specify the\n");
493 (void) printf(
494 "image type as the filename suffix (i.e. image.ps). Specify 'file' as\n");
495 (void) printf("'-' for standard input or output.\n");
496 return(MagickFalse);
497}
498
499WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
500 int argc,char **argv,char **metadata,ExceptionInfo *exception)
501{
502#define NotInitialized (unsigned int) (~0)
503#define DestroyConvert() \
504{ \
505 DestroyImageStack(); \
cristybb503372010-05-27 20:51:26 +0000506 for (i=0; i < (ssize_t) argc; i++) \
cristy3ed852e2009-09-05 21:47:34 +0000507 argv[i]=DestroyString(argv[i]); \
508 argv=(char **) RelinquishMagickMemory(argv); \
509}
510#define ThrowConvertException(asperity,tag,option) \
511{ \
cristyefe601c2013-01-05 17:51:12 +0000512 (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
cristy3ed852e2009-09-05 21:47:34 +0000513 option); \
514 DestroyConvert(); \
515 return(MagickFalse); \
516}
517#define ThrowConvertInvalidArgumentException(option,argument) \
518{ \
519 (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
anthonye5b39652012-04-21 05:37:29 +0000520 "InvalidArgument","'%s': %s",option,argument); \
cristy3ed852e2009-09-05 21:47:34 +0000521 DestroyConvert(); \
522 return(MagickFalse); \
523}
524
525 char
526 *filename,
527 *option;
528
529 const char
530 *format;
531
532 Image
533 *image;
534
535 ImageStack
536 image_stack[MaxImageStackDepth+1];
537
cristy3ed852e2009-09-05 21:47:34 +0000538 MagickBooleanType
539 fire,
cristyebbcfea2011-02-25 02:43:54 +0000540 pend,
541 respect_parenthesis;
cristy3ed852e2009-09-05 21:47:34 +0000542
543 MagickStatusType
544 status;
545
cristybb503372010-05-27 20:51:26 +0000546 register ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000547 i;
548
cristy9d314ff2011-03-09 01:30:28 +0000549 ssize_t
550 j,
551 k;
552
cristy3ed852e2009-09-05 21:47:34 +0000553 /*
554 Set defaults.
555 */
556 assert(image_info != (ImageInfo *) NULL);
557 assert(image_info->signature == MagickSignature);
558 if (image_info->debug != MagickFalse)
559 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
560 assert(exception != (ExceptionInfo *) NULL);
561 if (argc == 2)
562 {
563 option=argv[1];
564 if ((LocaleCompare("version",option+1) == 0) ||
565 (LocaleCompare("-version",option+1) == 0))
566 {
cristy4f7a6132012-12-23 00:35:19 +0000567 ListMagickVersion(stdout);
cristy3ed852e2009-09-05 21:47:34 +0000568 return(MagickFalse);
569 }
570 }
571 if (argc < 3)
cristy13e61a12010-02-04 20:19:00 +0000572 return(ConvertUsage());
cristy3ed852e2009-09-05 21:47:34 +0000573 filename=(char *) NULL;
574 format="%w,%h,%m";
575 j=1;
576 k=0;
577 NewImageStack();
578 option=(char *) NULL;
579 pend=MagickFalse;
cristyebbcfea2011-02-25 02:43:54 +0000580 respect_parenthesis=MagickFalse;
cristy3ed852e2009-09-05 21:47:34 +0000581 status=MagickTrue;
582 /*
583 Parse command-line arguments.
584 */
585 ReadCommandlLine(argc,&argv);
586 status=ExpandFilenames(&argc,&argv);
587 if (status == MagickFalse)
588 ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
589 GetExceptionMessage(errno));
590 if ((argc > 2) && (LocaleCompare("-concatenate",argv[1]) == 0))
591 return(ConcatenateImages(argc,argv,exception));
cristybb503372010-05-27 20:51:26 +0000592 for (i=1; i < (ssize_t) (argc-1); i++)
cristy3ed852e2009-09-05 21:47:34 +0000593 {
594 option=argv[i];
595 if (LocaleCompare(option,"(") == 0)
596 {
597 FireImageStack(MagickTrue,MagickTrue,pend);
598 if (k == MaxImageStackDepth)
599 ThrowConvertException(OptionError,"ParenthesisNestedTooDeeply",
600 option);
601 PushImageStack();
602 continue;
603 }
604 if (LocaleCompare(option,")") == 0)
605 {
606 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
607 if (k == 0)
608 ThrowConvertException(OptionError,"UnableToParseExpression",option);
609 PopImageStack();
610 continue;
611 }
cristy042ee782011-04-22 18:48:30 +0000612 if (IsCommandOption(option) == MagickFalse)
cristy3ed852e2009-09-05 21:47:34 +0000613 {
614 Image
615 *images;
616
617 /*
618 Read input image.
619 */
620 FireImageStack(MagickTrue,MagickTrue,pend);
621 filename=argv[i];
cristycee97112010-05-28 00:44:52 +0000622 if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
cristy3ed852e2009-09-05 21:47:34 +0000623 filename=argv[++i];
cristy3ed852e2009-09-05 21:47:34 +0000624 if (image_info->ping != MagickFalse)
cristy1b58f252012-03-01 01:41:41 +0000625 images=PingImages(image_info,filename,exception);
cristy3ed852e2009-09-05 21:47:34 +0000626 else
cristy1b58f252012-03-01 01:41:41 +0000627 images=ReadImages(image_info,filename,exception);
cristy3ed852e2009-09-05 21:47:34 +0000628 status&=(images != (Image *) NULL) &&
629 (exception->severity < ErrorException);
630 if (images == (Image *) NULL)
631 continue;
632 AppendImageStack(images);
633 continue;
634 }
635 pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
636 switch (*(option+1))
637 {
638 case 'a':
639 {
640 if (LocaleCompare("adaptive-blur",option+1) == 0)
641 {
642 i++;
cristye81f5522014-05-07 01:25:59 +0000643 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000644 ThrowConvertException(OptionError,"MissingArgument",option);
645 if (IsGeometry(argv[i]) == MagickFalse)
646 ThrowConvertInvalidArgumentException(option,argv[i]);
647 break;
648 }
649 if (LocaleCompare("adaptive-resize",option+1) == 0)
650 {
651 i++;
cristye81f5522014-05-07 01:25:59 +0000652 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000653 ThrowConvertException(OptionError,"MissingArgument",option);
654 if (IsGeometry(argv[i]) == MagickFalse)
655 ThrowConvertInvalidArgumentException(option,argv[i]);
656 break;
657 }
658 if (LocaleCompare("adaptive-sharpen",option+1) == 0)
659 {
660 i++;
cristye81f5522014-05-07 01:25:59 +0000661 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000662 ThrowConvertException(OptionError,"MissingArgument",option);
663 if (IsGeometry(argv[i]) == MagickFalse)
664 ThrowConvertInvalidArgumentException(option,argv[i]);
665 break;
666 }
667 if (LocaleCompare("adjoin",option+1) == 0)
668 break;
669 if (LocaleCompare("affine",option+1) == 0)
670 {
671 if (*option == '+')
672 break;
673 i++;
cristye81f5522014-05-07 01:25:59 +0000674 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000675 ThrowConvertException(OptionError,"MissingArgument",option);
cristy8cdfb342012-11-11 21:44:36 +0000676 if (IsGeometry(argv[i]) == MagickFalse)
677 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000678 break;
679 }
680 if (LocaleCompare("alpha",option+1) == 0)
681 {
cristybb503372010-05-27 20:51:26 +0000682 ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000683 type;
684
685 if (*option == '+')
686 break;
687 i++;
cristybb503372010-05-27 20:51:26 +0000688 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000689 ThrowConvertException(OptionError,"MissingArgument",option);
cristy3476df82015-06-22 18:43:46 +0000690 type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,
691 argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000692 if (type < 0)
cristy3476df82015-06-22 18:43:46 +0000693 ThrowConvertException(OptionError,
694 "UnrecognizedAlphaChannelOption",argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000695 break;
696 }
697 if (LocaleCompare("annotate",option+1) == 0)
698 {
699 if (*option == '+')
700 break;
701 i++;
cristye81f5522014-05-07 01:25:59 +0000702 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000703 ThrowConvertException(OptionError,"MissingArgument",option);
704 if (IsGeometry(argv[i]) == MagickFalse)
705 ThrowConvertInvalidArgumentException(option,argv[i]);
706 i++;
cristye81f5522014-05-07 01:25:59 +0000707 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000708 ThrowConvertException(OptionError,"MissingArgument",option);
709 break;
710 }
711 if (LocaleCompare("antialias",option+1) == 0)
712 break;
713 if (LocaleCompare("append",option+1) == 0)
714 break;
715 if (LocaleCompare("attenuate",option+1) == 0)
716 {
717 if (*option == '+')
718 break;
719 i++;
cristye81f5522014-05-07 01:25:59 +0000720 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000721 ThrowConvertException(OptionError,"MissingArgument",option);
722 if (IsGeometry(argv[i]) == MagickFalse)
723 ThrowConvertInvalidArgumentException(option,argv[i]);
724 break;
725 }
726 if (LocaleCompare("authenticate",option+1) == 0)
727 {
728 if (*option == '+')
729 break;
730 i++;
cristye81f5522014-05-07 01:25:59 +0000731 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000732 ThrowConvertException(OptionError,"MissingArgument",option);
733 break;
734 }
735 if (LocaleCompare("auto-gamma",option+1) == 0)
736 break;
737 if (LocaleCompare("auto-level",option+1) == 0)
738 break;
739 if (LocaleCompare("auto-orient",option+1) == 0)
740 break;
cristy52ad9e92013-02-08 23:23:29 +0000741 if (LocaleCompare("average",option+1) == 0)
742 break;
cristy3ed852e2009-09-05 21:47:34 +0000743 ThrowConvertException(OptionError,"UnrecognizedOption",option)
744 }
745 case 'b':
746 {
747 if (LocaleCompare("background",option+1) == 0)
748 {
749 if (*option == '+')
750 break;
751 i++;
cristye81f5522014-05-07 01:25:59 +0000752 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000753 ThrowConvertException(OptionError,"MissingArgument",option);
754 break;
755 }
756 if (LocaleCompare("bench",option+1) == 0)
757 {
758 if (*option == '+')
759 break;
760 i++;
cristye81f5522014-05-07 01:25:59 +0000761 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000762 ThrowConvertException(OptionError,"MissingArgument",option);
763 if (IsGeometry(argv[i]) == MagickFalse)
764 ThrowConvertInvalidArgumentException(option,argv[i]);
765 break;
766 }
767 if (LocaleCompare("bias",option+1) == 0)
768 {
769 if (*option == '+')
770 break;
771 i++;
cristye81f5522014-05-07 01:25:59 +0000772 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000773 ThrowConvertException(OptionError,"MissingArgument",option);
774 if (IsGeometry(argv[i]) == MagickFalse)
775 ThrowConvertInvalidArgumentException(option,argv[i]);
776 break;
777 }
778 if (LocaleCompare("black-point-compensation",option+1) == 0)
779 break;
780 if (LocaleCompare("black-threshold",option+1) == 0)
781 {
782 if (*option == '+')
783 break;
784 i++;
cristye81f5522014-05-07 01:25:59 +0000785 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000786 ThrowConvertException(OptionError,"MissingArgument",option);
787 if (IsGeometry(argv[i]) == MagickFalse)
788 ThrowConvertInvalidArgumentException(option,argv[i]);
789 break;
790 }
791 if (LocaleCompare("blue-primary",option+1) == 0)
792 {
793 if (*option == '+')
794 break;
795 i++;
cristye81f5522014-05-07 01:25:59 +0000796 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000797 ThrowConvertException(OptionError,"MissingArgument",option);
798 if (IsGeometry(argv[i]) == MagickFalse)
799 ThrowConvertInvalidArgumentException(option,argv[i]);
800 break;
801 }
802 if (LocaleCompare("blue-shift",option+1) == 0)
803 {
804 if (*option == '+')
805 break;
806 i++;
cristye81f5522014-05-07 01:25:59 +0000807 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000808 ThrowConvertException(OptionError,"MissingArgument",option);
809 if (IsGeometry(argv[i]) == MagickFalse)
810 ThrowConvertInvalidArgumentException(option,argv[i]);
811 break;
812 }
813 if (LocaleCompare("blur",option+1) == 0)
814 {
815 if (*option == '+')
816 break;
817 i++;
cristye81f5522014-05-07 01:25:59 +0000818 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000819 ThrowConvertException(OptionError,"MissingArgument",option);
820 if (IsGeometry(argv[i]) == MagickFalse)
821 ThrowConvertInvalidArgumentException(option,argv[i]);
822 break;
823 }
824 if (LocaleCompare("border",option+1) == 0)
825 {
826 if (*option == '+')
827 break;
828 i++;
cristye81f5522014-05-07 01:25:59 +0000829 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000830 ThrowConvertException(OptionError,"MissingArgument",option);
831 if (IsGeometry(argv[i]) == MagickFalse)
832 ThrowConvertInvalidArgumentException(option,argv[i]);
833 break;
834 }
835 if (LocaleCompare("bordercolor",option+1) == 0)
836 {
837 if (*option == '+')
838 break;
839 i++;
cristye81f5522014-05-07 01:25:59 +0000840 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000841 ThrowConvertException(OptionError,"MissingArgument",option);
842 break;
843 }
844 if (LocaleCompare("box",option+1) == 0)
845 {
846 if (*option == '+')
847 break;
848 i++;
cristye81f5522014-05-07 01:25:59 +0000849 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000850 ThrowConvertException(OptionError,"MissingArgument",option);
851 break;
852 }
cristya28d6b82010-01-11 20:03:47 +0000853 if (LocaleCompare("brightness-contrast",option+1) == 0)
854 {
855 i++;
cristye81f5522014-05-07 01:25:59 +0000856 if (i == (ssize_t) argc)
cristya28d6b82010-01-11 20:03:47 +0000857 ThrowConvertException(OptionError,"MissingArgument",option);
858 if (IsGeometry(argv[i]) == MagickFalse)
859 ThrowConvertInvalidArgumentException(option,argv[i]);
860 break;
861 }
cristy3ed852e2009-09-05 21:47:34 +0000862 ThrowConvertException(OptionError,"UnrecognizedOption",option)
863 }
864 case 'c':
865 {
866 if (LocaleCompare("cache",option+1) == 0)
867 {
868 if (*option == '+')
869 break;
870 i++;
cristye81f5522014-05-07 01:25:59 +0000871 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000872 ThrowConvertException(OptionError,"MissingArgument",option);
873 if (IsGeometry(argv[i]) == MagickFalse)
874 ThrowConvertInvalidArgumentException(option,argv[i]);
875 break;
876 }
cristy4ceadb82014-03-29 15:30:43 +0000877 if (LocaleCompare("canny",option+1) == 0)
878 {
879 if (*option == '+')
880 break;
881 i++;
cristye81f5522014-05-07 01:25:59 +0000882 if (i == (ssize_t) argc)
cristy4ceadb82014-03-29 15:30:43 +0000883 ThrowConvertException(OptionError,"MissingArgument",option);
884 if (IsGeometry(argv[i]) == MagickFalse)
885 ThrowConvertInvalidArgumentException(option,argv[i]);
886 break;
887 }
cristy3ed852e2009-09-05 21:47:34 +0000888 if (LocaleCompare("caption",option+1) == 0)
889 {
890 if (*option == '+')
891 break;
892 i++;
cristybb503372010-05-27 20:51:26 +0000893 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000894 ThrowConvertException(OptionError,"MissingArgument",option);
895 break;
896 }
897 if (LocaleCompare("cdl",option+1) == 0)
898 {
899 if (*option == '+')
900 break;
901 i++;
cristye81f5522014-05-07 01:25:59 +0000902 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000903 ThrowConvertException(OptionError,"MissingArgument",option);
904 break;
905 }
906 if (LocaleCompare("channel",option+1) == 0)
907 {
cristybb503372010-05-27 20:51:26 +0000908 ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000909 channel;
910
911 if (*option == '+')
912 break;
913 i++;
cristye81f5522014-05-07 01:25:59 +0000914 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000915 ThrowConvertException(OptionError,"MissingArgument",option);
916 channel=ParseChannelOption(argv[i]);
917 if (channel < 0)
918 ThrowConvertException(OptionError,"UnrecognizedChannelType",
919 argv[i]);
920 break;
921 }
cristy5f257b22012-03-07 00:27:29 +0000922 if (LocaleCompare("channel-fx",option+1) == 0)
cristy87c02f42012-02-24 00:19:10 +0000923 {
924 ssize_t
925 channel;
926
927 if (*option == '+')
928 break;
929 i++;
cristye81f5522014-05-07 01:25:59 +0000930 if (i == (ssize_t) argc)
cristy87c02f42012-02-24 00:19:10 +0000931 ThrowConvertException(OptionError,"MissingArgument",option);
cristy953c4bd2012-02-24 01:04:04 +0000932 channel=ParsePixelChannelOption(argv[i]);
cristy87c02f42012-02-24 00:19:10 +0000933 if (channel < 0)
934 ThrowConvertException(OptionError,"UnrecognizedChannelType",
935 argv[i]);
936 break;
937 }
cristy3ed852e2009-09-05 21:47:34 +0000938 if (LocaleCompare("charcoal",option+1) == 0)
939 {
940 if (*option == '+')
941 break;
942 i++;
cristye81f5522014-05-07 01:25:59 +0000943 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000944 ThrowConvertException(OptionError,"MissingArgument",option);
945 if (IsGeometry(argv[i]) == MagickFalse)
946 ThrowConvertInvalidArgumentException(option,argv[i]);
947 break;
948 }
949 if (LocaleCompare("chop",option+1) == 0)
950 {
951 if (*option == '+')
952 break;
953 i++;
cristye81f5522014-05-07 01:25:59 +0000954 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000955 ThrowConvertException(OptionError,"MissingArgument",option);
956 if (IsGeometry(argv[i]) == MagickFalse)
957 ThrowConvertInvalidArgumentException(option,argv[i]);
958 break;
959 }
cristy1eb45dd2009-09-25 16:38:06 +0000960 if (LocaleCompare("clamp",option+1) == 0)
961 break;
cristy3ed852e2009-09-05 21:47:34 +0000962 if (LocaleCompare("clip",option+1) == 0)
963 break;
964 if (LocaleCompare("clip-mask",option+1) == 0)
965 {
966 if (*option == '+')
967 break;
968 i++;
cristye81f5522014-05-07 01:25:59 +0000969 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000970 ThrowConvertException(OptionError,"MissingArgument",option);
971 break;
972 }
973 if (LocaleCompare("clip-path",option+1) == 0)
974 {
975 i++;
cristye81f5522014-05-07 01:25:59 +0000976 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000977 ThrowConvertException(OptionError,"MissingArgument",option);
978 break;
979 }
980 if (LocaleCompare("clone",option+1) == 0)
981 {
982 Image
cristy9a883692015-01-14 00:55:37 +0000983 *clone_images,
984 *clone_list;
985
986 clone_list=CloneImageList(image,exception);
cristy3ed852e2009-09-05 21:47:34 +0000987 if (k != 0)
cristy9a883692015-01-14 00:55:37 +0000988 clone_list=CloneImageList(image_stack[k-1].image,exception);
989 if (clone_list == (Image *) NULL)
990 ThrowConvertException(ImageError,"ImageSequenceRequired",option);
cristy3ed852e2009-09-05 21:47:34 +0000991 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
992 if (*option == '+')
cristy9a883692015-01-14 00:55:37 +0000993 clone_images=CloneImages(clone_list,"-1",exception);
cristy3ed852e2009-09-05 21:47:34 +0000994 else
cristy9a883692015-01-14 00:55:37 +0000995 {
cristy3ed852e2009-09-05 21:47:34 +0000996 i++;
cristye81f5522014-05-07 01:25:59 +0000997 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000998 ThrowConvertException(OptionError,"MissingArgument",option);
999 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
1000 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy9a883692015-01-14 00:55:37 +00001001 clone_images=CloneImages(clone_list,argv[i],exception);
cristy3ed852e2009-09-05 21:47:34 +00001002 }
1003 if (clone_images == (Image *) NULL)
1004 ThrowConvertException(OptionError,"NoSuchImage",option);
1005 AppendImageStack(clone_images);
cristy9a883692015-01-14 00:55:37 +00001006 clone_list=DestroyImageList(clone_list);
cristy3ed852e2009-09-05 21:47:34 +00001007 break;
1008 }
1009 if (LocaleCompare("clut",option+1) == 0)
1010 break;
1011 if (LocaleCompare("coalesce",option+1) == 0)
1012 break;
1013 if (LocaleCompare("colorize",option+1) == 0)
1014 {
1015 if (*option == '+')
1016 break;
1017 i++;
cristye81f5522014-05-07 01:25:59 +00001018 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001019 ThrowConvertException(OptionError,"MissingArgument",option);
1020 if (IsGeometry(argv[i]) == MagickFalse)
1021 ThrowConvertInvalidArgumentException(option,argv[i]);
1022 break;
1023 }
cristye6365592010-04-02 17:31:23 +00001024 if (LocaleCompare("color-matrix",option+1) == 0)
1025 {
cristyb6bd4ad2010-08-08 01:12:27 +00001026 KernelInfo
1027 *kernel_info;
1028
cristye6365592010-04-02 17:31:23 +00001029 if (*option == '+')
1030 break;
1031 i++;
cristye81f5522014-05-07 01:25:59 +00001032 if (i == (ssize_t) argc)
cristye6365592010-04-02 17:31:23 +00001033 ThrowConvertException(OptionError,"MissingArgument",option);
cristy2c57b742014-10-31 00:40:34 +00001034 kernel_info=AcquireKernelInfo(argv[i],exception);
cristyb6bd4ad2010-08-08 01:12:27 +00001035 if (kernel_info == (KernelInfo *) NULL)
cristye6365592010-04-02 17:31:23 +00001036 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00001037 kernel_info=DestroyKernelInfo(kernel_info);
cristye6365592010-04-02 17:31:23 +00001038 break;
1039 }
cristy3ed852e2009-09-05 21:47:34 +00001040 if (LocaleCompare("colors",option+1) == 0)
1041 {
1042 if (*option == '+')
1043 break;
1044 i++;
cristye81f5522014-05-07 01:25:59 +00001045 if ((i == (ssize_t) argc) ||
cristy3ed852e2009-09-05 21:47:34 +00001046 (IsGeometry(argv[i]) == MagickFalse))
1047 ThrowConvertException(OptionError,"MissingArgument",option);
1048 break;
1049 }
1050 if (LocaleCompare("colorspace",option+1) == 0)
1051 {
cristybb503372010-05-27 20:51:26 +00001052 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001053 colorspace;
1054
1055 if (*option == '+')
1056 break;
1057 i++;
cristye81f5522014-05-07 01:25:59 +00001058 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001059 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001060 colorspace=ParseCommandOption(MagickColorspaceOptions,
cristy3ed852e2009-09-05 21:47:34 +00001061 MagickFalse,argv[i]);
1062 if (colorspace < 0)
1063 ThrowConvertException(OptionError,"UnrecognizedColorspace",
1064 argv[i]);
1065 break;
1066 }
1067 if (LocaleCompare("combine",option+1) == 0)
1068 break;
1069 if (LocaleCompare("comment",option+1) == 0)
1070 {
1071 if (*option == '+')
1072 break;
1073 i++;
cristybb503372010-05-27 20:51:26 +00001074 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001075 ThrowConvertException(OptionError,"MissingArgument",option);
1076 break;
1077 }
cristyb92495a2013-08-20 00:10:59 +00001078 if (LocaleCompare("compare",option+1) == 0)
1079 break;
cristy790190d2013-10-04 00:51:51 +00001080 if (LocaleCompare("complex",option+1) == 0)
1081 {
1082 ssize_t
cristy6398ec72013-11-28 02:00:27 +00001083 op;
cristy790190d2013-10-04 00:51:51 +00001084
1085 if (*option == '+')
1086 break;
1087 i++;
1088 if (i == (ssize_t) argc)
1089 ThrowConvertException(OptionError,"MissingArgument",option);
cristy6398ec72013-11-28 02:00:27 +00001090 op=ParseCommandOption(MagickComplexOptions,MagickFalse,argv[i]);
1091 if (op < 0)
cristy790190d2013-10-04 00:51:51 +00001092 ThrowConvertException(OptionError,"UnrecognizedComplexOperator",
1093 argv[i]);
1094 break;
1095 }
cristy3ed852e2009-09-05 21:47:34 +00001096 if (LocaleCompare("compose",option+1) == 0)
1097 {
cristybb503372010-05-27 20:51:26 +00001098 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001099 compose;
1100
1101 if (*option == '+')
1102 break;
1103 i++;
cristybb503372010-05-27 20:51:26 +00001104 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001105 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001106 compose=ParseCommandOption(MagickComposeOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001107 argv[i]);
1108 if (compose < 0)
1109 ThrowConvertException(OptionError,"UnrecognizedComposeOperator",
1110 argv[i]);
1111 break;
1112 }
1113 if (LocaleCompare("composite",option+1) == 0)
1114 break;
1115 if (LocaleCompare("compress",option+1) == 0)
1116 {
cristybb503372010-05-27 20:51:26 +00001117 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001118 compress;
1119
1120 if (*option == '+')
1121 break;
1122 i++;
cristye81f5522014-05-07 01:25:59 +00001123 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001124 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001125 compress=ParseCommandOption(MagickCompressOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001126 argv[i]);
1127 if (compress < 0)
1128 ThrowConvertException(OptionError,"UnrecognizedImageCompression",
1129 argv[i]);
1130 break;
1131 }
cristy22879752009-10-25 23:55:40 +00001132 if (LocaleCompare("concurrent",option+1) == 0)
1133 break;
cristy6e0b3bc2014-10-19 17:51:42 +00001134 if (LocaleCompare("connected-component",option+1) == 0)
1135 {
1136 i++;
1137 if (i == (ssize_t) argc)
1138 ThrowConvertException(OptionError,"MissingArgument",option);
1139 if (IsGeometry(argv[i]) == MagickFalse)
1140 ThrowConvertInvalidArgumentException(option,argv[i]);
1141 break;
1142 }
cristy3ed852e2009-09-05 21:47:34 +00001143 if (LocaleCompare("contrast",option+1) == 0)
1144 break;
1145 if (LocaleCompare("contrast-stretch",option+1) == 0)
1146 {
1147 i++;
cristye81f5522014-05-07 01:25:59 +00001148 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001149 ThrowConvertException(OptionError,"MissingArgument",option);
1150 if (IsGeometry(argv[i]) == MagickFalse)
1151 ThrowConvertInvalidArgumentException(option,argv[i]);
1152 break;
1153 }
1154 if (LocaleCompare("convolve",option+1) == 0)
1155 {
cristyb6bd4ad2010-08-08 01:12:27 +00001156 KernelInfo
1157 *kernel_info;
1158
cristy3ed852e2009-09-05 21:47:34 +00001159 if (*option == '+')
1160 break;
1161 i++;
cristye81f5522014-05-07 01:25:59 +00001162 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001163 ThrowConvertException(OptionError,"MissingArgument",option);
cristy2c57b742014-10-31 00:40:34 +00001164 kernel_info=AcquireKernelInfo(argv[i],exception);
cristyb6bd4ad2010-08-08 01:12:27 +00001165 if (kernel_info == (KernelInfo *) NULL)
cristy3ed852e2009-09-05 21:47:34 +00001166 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00001167 kernel_info=DestroyKernelInfo(kernel_info);
cristy3ed852e2009-09-05 21:47:34 +00001168 break;
1169 }
cristy3476df82015-06-22 18:43:46 +00001170 if (LocaleCompare("copy",option+1) == 0)
1171 {
1172 if (*option == '+')
1173 break;
1174 i++;
1175 if (i == (ssize_t) argc)
1176 ThrowConvertException(OptionError,"MissingArgument",option);
1177 if (IsGeometry(argv[i]) == MagickFalse)
1178 ThrowConvertInvalidArgumentException(option,argv[i]);
1179 i++;
1180 if (i == (ssize_t) argc)
1181 ThrowConvertException(OptionError,"MissingArgument",option);
1182 if (IsGeometry(argv[i]) == MagickFalse)
1183 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy3476df82015-06-22 18:43:46 +00001184 break;
1185 }
cristy3ed852e2009-09-05 21:47:34 +00001186 if (LocaleCompare("crop",option+1) == 0)
1187 {
1188 if (*option == '+')
1189 break;
1190 i++;
cristye81f5522014-05-07 01:25:59 +00001191 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001192 ThrowConvertException(OptionError,"MissingArgument",option);
1193 if (IsGeometry(argv[i]) == MagickFalse)
1194 ThrowConvertInvalidArgumentException(option,argv[i]);
1195 break;
1196 }
1197 if (LocaleCompare("cycle",option+1) == 0)
1198 {
1199 if (*option == '+')
1200 break;
1201 i++;
cristye81f5522014-05-07 01:25:59 +00001202 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001203 ThrowConvertException(OptionError,"MissingArgument",option);
1204 if (IsGeometry(argv[i]) == MagickFalse)
1205 ThrowConvertInvalidArgumentException(option,argv[i]);
1206 break;
1207 }
1208 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1209 }
1210 case 'd':
1211 {
1212 if (LocaleCompare("decipher",option+1) == 0)
1213 {
1214 if (*option == '+')
1215 break;
1216 i++;
cristye81f5522014-05-07 01:25:59 +00001217 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001218 ThrowConvertException(OptionError,"MissingArgument",option);
1219 break;
1220 }
1221 if (LocaleCompare("deconstruct",option+1) == 0)
1222 break;
1223 if (LocaleCompare("debug",option+1) == 0)
1224 {
cristybb503372010-05-27 20:51:26 +00001225 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001226 event;
1227
1228 if (*option == '+')
1229 break;
1230 i++;
cristybb503372010-05-27 20:51:26 +00001231 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001232 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001233 event=ParseCommandOption(MagickLogEventOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001234 if (event < 0)
1235 ThrowConvertException(OptionError,"UnrecognizedEventType",
1236 argv[i]);
1237 (void) SetLogEventMask(argv[i]);
1238 break;
1239 }
1240 if (LocaleCompare("define",option+1) == 0)
1241 {
1242 i++;
cristybb503372010-05-27 20:51:26 +00001243 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001244 ThrowConvertException(OptionError,"MissingArgument",option);
1245 if (*option == '+')
1246 {
1247 const char
1248 *define;
1249
1250 define=GetImageOption(image_info,argv[i]);
1251 if (define == (const char *) NULL)
1252 ThrowConvertException(OptionError,"NoSuchOption",argv[i]);
1253 break;
1254 }
1255 break;
1256 }
1257 if (LocaleCompare("delay",option+1) == 0)
1258 {
1259 if (*option == '+')
1260 break;
1261 i++;
cristybb503372010-05-27 20:51:26 +00001262 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001263 ThrowConvertException(OptionError,"MissingArgument",option);
1264 if (IsGeometry(argv[i]) == MagickFalse)
1265 ThrowConvertInvalidArgumentException(option,argv[i]);
1266 break;
1267 }
1268 if (LocaleCompare("density",option+1) == 0)
1269 {
1270 if (*option == '+')
1271 break;
1272 i++;
cristye81f5522014-05-07 01:25:59 +00001273 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001274 ThrowConvertException(OptionError,"MissingArgument",option);
1275 if (IsGeometry(argv[i]) == MagickFalse)
1276 ThrowConvertInvalidArgumentException(option,argv[i]);
1277 break;
1278 }
1279 if (LocaleCompare("depth",option+1) == 0)
1280 {
1281 if (*option == '+')
1282 break;
1283 i++;
cristye81f5522014-05-07 01:25:59 +00001284 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001285 ThrowConvertException(OptionError,"MissingArgument",option);
1286 if (IsGeometry(argv[i]) == MagickFalse)
1287 ThrowConvertInvalidArgumentException(option,argv[i]);
1288 break;
1289 }
1290 if (LocaleCompare("delete",option+1) == 0)
1291 {
1292 if (*option == '+')
1293 break;
1294 i++;
cristye81f5522014-05-07 01:25:59 +00001295 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001296 ThrowConvertException(OptionError,"MissingArgument",option);
1297 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
1298 ThrowConvertInvalidArgumentException(option,argv[i]);
1299 break;
1300 }
1301 if (LocaleCompare("deskew",option+1) == 0)
1302 {
1303 if (*option == '+')
1304 break;
1305 i++;
cristye81f5522014-05-07 01:25:59 +00001306 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001307 ThrowConvertException(OptionError,"MissingArgument",option);
1308 if (IsGeometry(argv[i]) == MagickFalse)
1309 ThrowConvertInvalidArgumentException(option,argv[i]);
1310 break;
1311 }
1312 if (LocaleCompare("despeckle",option+1) == 0)
1313 break;
cristyc9b12952010-03-28 01:12:28 +00001314 if (LocaleCompare("direction",option+1) == 0)
1315 {
cristybb503372010-05-27 20:51:26 +00001316 ssize_t
cristyc9b12952010-03-28 01:12:28 +00001317 direction;
1318
1319 if (*option == '+')
1320 break;
1321 i++;
cristybb503372010-05-27 20:51:26 +00001322 if (i == (ssize_t) argc)
cristyc9b12952010-03-28 01:12:28 +00001323 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001324 direction=ParseCommandOption(MagickDirectionOptions,MagickFalse,
cristyc9b12952010-03-28 01:12:28 +00001325 argv[i]);
1326 if (direction < 0)
1327 ThrowConvertException(OptionError,"UnrecognizedDirectionType",
1328 argv[i]);
1329 break;
1330 }
cristy3ed852e2009-09-05 21:47:34 +00001331 if (LocaleCompare("display",option+1) == 0)
1332 {
1333 if (*option == '+')
1334 break;
1335 i++;
cristye81f5522014-05-07 01:25:59 +00001336 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001337 ThrowConvertException(OptionError,"MissingArgument",option);
1338 break;
1339 }
1340 if (LocaleCompare("dispose",option+1) == 0)
1341 {
cristybb503372010-05-27 20:51:26 +00001342 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001343 dispose;
1344
1345 if (*option == '+')
1346 break;
1347 i++;
cristybb503372010-05-27 20:51:26 +00001348 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001349 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001350 dispose=ParseCommandOption(MagickDisposeOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001351 if (dispose < 0)
1352 ThrowConvertException(OptionError,"UnrecognizedDisposeMethod",
1353 argv[i]);
1354 break;
1355 }
1356 if (LocaleCompare("distort",option+1) == 0)
1357 {
cristybb503372010-05-27 20:51:26 +00001358 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001359 op;
1360
1361 i++;
cristybb503372010-05-27 20:51:26 +00001362 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001363 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001364 op=ParseCommandOption(MagickDistortOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001365 if (op < 0)
1366 ThrowConvertException(OptionError,"UnrecognizedDistortMethod",
1367 argv[i]);
1368 i++;
cristye81f5522014-05-07 01:25:59 +00001369 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001370 ThrowConvertException(OptionError,"MissingArgument",option);
1371 break;
1372 }
1373 if (LocaleCompare("dither",option+1) == 0)
1374 {
cristybb503372010-05-27 20:51:26 +00001375 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001376 method;
1377
1378 if (*option == '+')
1379 break;
1380 i++;
cristybb503372010-05-27 20:51:26 +00001381 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001382 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001383 method=ParseCommandOption(MagickDitherOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001384 if (method < 0)
1385 ThrowConvertException(OptionError,"UnrecognizedDitherMethod",
1386 argv[i]);
1387 break;
1388 }
1389 if (LocaleCompare("draw",option+1) == 0)
1390 {
1391 if (*option == '+')
1392 break;
1393 i++;
cristye81f5522014-05-07 01:25:59 +00001394 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001395 ThrowConvertException(OptionError,"MissingArgument",option);
1396 break;
1397 }
cristy5d28d482011-03-20 21:59:40 +00001398 if (LocaleCompare("duplicate",option+1) == 0)
1399 {
cristy5d28d482011-03-20 21:59:40 +00001400 if (*option == '+')
cristyecb10ff2011-03-22 13:14:03 +00001401 break;
1402 i++;
cristye81f5522014-05-07 01:25:59 +00001403 if (i == (ssize_t) argc)
cristyecb10ff2011-03-22 13:14:03 +00001404 ThrowConvertException(OptionError,"MissingArgument",option);
1405 if (IsGeometry(argv[i]) == MagickFalse)
1406 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy5d28d482011-03-20 21:59:40 +00001407 break;
1408 }
cristy22879752009-10-25 23:55:40 +00001409 if (LocaleCompare("duration",option+1) == 0)
1410 {
1411 if (*option == '+')
1412 break;
1413 i++;
cristye81f5522014-05-07 01:25:59 +00001414 if (i == (ssize_t) argc)
cristy22879752009-10-25 23:55:40 +00001415 ThrowConvertException(OptionError,"MissingArgument",option);
1416 if (IsGeometry(argv[i]) == MagickFalse)
1417 ThrowConvertInvalidArgumentException(option,argv[i]);
1418 break;
1419 }
cristy3ed852e2009-09-05 21:47:34 +00001420 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1421 }
1422 case 'e':
1423 {
1424 if (LocaleCompare("edge",option+1) == 0)
1425 {
1426 if (*option == '+')
1427 break;
1428 i++;
cristye81f5522014-05-07 01:25:59 +00001429 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001430 ThrowConvertException(OptionError,"MissingArgument",option);
1431 if (IsGeometry(argv[i]) == MagickFalse)
1432 ThrowConvertInvalidArgumentException(option,argv[i]);
1433 break;
1434 }
1435 if (LocaleCompare("emboss",option+1) == 0)
1436 {
1437 if (*option == '+')
1438 break;
1439 i++;
cristye81f5522014-05-07 01:25:59 +00001440 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001441 ThrowConvertException(OptionError,"MissingArgument",option);
1442 if (IsGeometry(argv[i]) == MagickFalse)
1443 ThrowConvertInvalidArgumentException(option,argv[i]);
1444 break;
1445 }
1446 if (LocaleCompare("encipher",option+1) == 0)
1447 {
1448 if (*option == '+')
1449 break;
1450 i++;
cristye81f5522014-05-07 01:25:59 +00001451 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001452 ThrowConvertException(OptionError,"MissingArgument",option);
1453 break;
1454 }
1455 if (LocaleCompare("encoding",option+1) == 0)
1456 {
1457 if (*option == '+')
1458 break;
1459 i++;
cristye81f5522014-05-07 01:25:59 +00001460 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001461 ThrowConvertException(OptionError,"MissingArgument",option);
1462 break;
1463 }
1464 if (LocaleCompare("endian",option+1) == 0)
1465 {
cristybb503372010-05-27 20:51:26 +00001466 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001467 endian;
1468
1469 if (*option == '+')
1470 break;
1471 i++;
cristye81f5522014-05-07 01:25:59 +00001472 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001473 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001474 endian=ParseCommandOption(MagickEndianOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001475 argv[i]);
1476 if (endian < 0)
1477 ThrowConvertException(OptionError,"UnrecognizedEndianType",
1478 argv[i]);
1479 break;
1480 }
1481 if (LocaleCompare("enhance",option+1) == 0)
1482 break;
1483 if (LocaleCompare("equalize",option+1) == 0)
1484 break;
1485 if (LocaleCompare("evaluate",option+1) == 0)
1486 {
cristybb503372010-05-27 20:51:26 +00001487 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001488 op;
1489
1490 if (*option == '+')
1491 break;
1492 i++;
cristybb503372010-05-27 20:51:26 +00001493 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001494 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001495 op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001496 if (op < 0)
1497 ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
1498 argv[i]);
1499 i++;
cristye81f5522014-05-07 01:25:59 +00001500 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001501 ThrowConvertException(OptionError,"MissingArgument",option);
1502 if (IsGeometry(argv[i]) == MagickFalse)
1503 ThrowConvertInvalidArgumentException(option,argv[i]);
1504 break;
1505 }
cristyd18ae7c2010-03-07 17:39:52 +00001506 if (LocaleCompare("evaluate-sequence",option+1) == 0)
1507 {
cristybb503372010-05-27 20:51:26 +00001508 ssize_t
cristyd18ae7c2010-03-07 17:39:52 +00001509 op;
1510
1511 if (*option == '+')
1512 break;
1513 i++;
cristybb503372010-05-27 20:51:26 +00001514 if (i == (ssize_t) argc)
cristyd18ae7c2010-03-07 17:39:52 +00001515 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001516 op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
cristyd18ae7c2010-03-07 17:39:52 +00001517 if (op < 0)
1518 ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
1519 argv[i]);
1520 break;
1521 }
cristy3ed852e2009-09-05 21:47:34 +00001522 if (LocaleCompare("extent",option+1) == 0)
1523 {
1524 if (*option == '+')
1525 break;
1526 i++;
cristye81f5522014-05-07 01:25:59 +00001527 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001528 ThrowConvertException(OptionError,"MissingArgument",option);
1529 if (IsGeometry(argv[i]) == MagickFalse)
1530 ThrowConvertInvalidArgumentException(option,argv[i]);
1531 break;
1532 }
1533 if (LocaleCompare("extract",option+1) == 0)
1534 {
1535 if (*option == '+')
1536 break;
1537 i++;
cristye81f5522014-05-07 01:25:59 +00001538 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001539 ThrowConvertException(OptionError,"MissingArgument",option);
1540 if (IsGeometry(argv[i]) == MagickFalse)
1541 ThrowConvertInvalidArgumentException(option,argv[i]);
1542 break;
1543 }
1544 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1545 }
1546 case 'f':
1547 {
1548 if (LocaleCompare("family",option+1) == 0)
1549 {
1550 if (*option == '+')
1551 break;
1552 i++;
cristye81f5522014-05-07 01:25:59 +00001553 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001554 ThrowConvertException(OptionError,"MissingArgument",option);
1555 break;
1556 }
cristy14154222012-06-15 23:21:49 +00001557 if (LocaleCompare("features",option+1) == 0)
1558 {
1559 if (*option == '+')
1560 break;
1561 i++;
cristye81f5522014-05-07 01:25:59 +00001562 if (i == (ssize_t) argc)
cristy14154222012-06-15 23:21:49 +00001563 ThrowConvertException(OptionError,"MissingArgument",option);
1564 if (IsGeometry(argv[i]) == MagickFalse)
1565 ThrowConvertInvalidArgumentException(option,argv[i]);
1566 break;
1567 }
cristy3ed852e2009-09-05 21:47:34 +00001568 if (LocaleCompare("fft",option+1) == 0)
1569 break;
1570 if (LocaleCompare("fill",option+1) == 0)
1571 {
1572 if (*option == '+')
1573 break;
1574 i++;
cristye81f5522014-05-07 01:25:59 +00001575 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001576 ThrowConvertException(OptionError,"MissingArgument",option);
1577 break;
1578 }
1579 if (LocaleCompare("filter",option+1) == 0)
1580 {
cristybb503372010-05-27 20:51:26 +00001581 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001582 filter;
1583
1584 if (*option == '+')
1585 break;
1586 i++;
cristye81f5522014-05-07 01:25:59 +00001587 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001588 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001589 filter=ParseCommandOption(MagickFilterOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001590 if (filter < 0)
1591 ThrowConvertException(OptionError,"UnrecognizedImageFilter",
1592 argv[i]);
1593 break;
1594 }
1595 if (LocaleCompare("flatten",option+1) == 0)
1596 break;
1597 if (LocaleCompare("flip",option+1) == 0)
1598 break;
1599 if (LocaleCompare("flop",option+1) == 0)
1600 break;
1601 if (LocaleCompare("floodfill",option+1) == 0)
1602 {
1603 if (*option == '+')
1604 break;
1605 i++;
cristye81f5522014-05-07 01:25:59 +00001606 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001607 ThrowConvertException(OptionError,"MissingArgument",option);
1608 if (IsGeometry(argv[i]) == MagickFalse)
1609 ThrowConvertInvalidArgumentException(option,argv[i]);
1610 i++;
cristye81f5522014-05-07 01:25:59 +00001611 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001612 ThrowConvertException(OptionError,"MissingArgument",option);
1613 break;
1614 }
1615 if (LocaleCompare("font",option+1) == 0)
1616 {
1617 if (*option == '+')
1618 break;
1619 i++;
cristye81f5522014-05-07 01:25:59 +00001620 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001621 ThrowConvertException(OptionError,"MissingArgument",option);
1622 break;
1623 }
1624 if (LocaleCompare("format",option+1) == 0)
1625 {
1626 if (*option == '+')
1627 break;
1628 i++;
cristye81f5522014-05-07 01:25:59 +00001629 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001630 ThrowConvertException(OptionError,"MissingArgument",option);
1631 format=argv[i];
1632 break;
1633 }
1634 if (LocaleCompare("frame",option+1) == 0)
1635 {
1636 if (*option == '+')
1637 break;
1638 i++;
cristye81f5522014-05-07 01:25:59 +00001639 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001640 ThrowConvertException(OptionError,"MissingArgument",option);
1641 if (IsGeometry(argv[i]) == MagickFalse)
1642 ThrowConvertInvalidArgumentException(option,argv[i]);
1643 break;
1644 }
1645 if (LocaleCompare("function",option+1) == 0)
1646 {
cristybb503372010-05-27 20:51:26 +00001647 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001648 op;
1649
1650 if (*option == '+')
1651 break;
1652 i++;
cristybb503372010-05-27 20:51:26 +00001653 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001654 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001655 op=ParseCommandOption(MagickFunctionOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001656 if (op < 0)
1657 ThrowConvertException(OptionError,"UnrecognizedFunction",argv[i]);
1658 i++;
cristye81f5522014-05-07 01:25:59 +00001659 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001660 ThrowConvertException(OptionError,"MissingArgument",option);
1661 break;
1662 }
1663 if (LocaleCompare("fuzz",option+1) == 0)
1664 {
1665 if (*option == '+')
1666 break;
1667 i++;
cristye81f5522014-05-07 01:25:59 +00001668 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001669 ThrowConvertException(OptionError,"MissingArgument",option);
1670 if (IsGeometry(argv[i]) == MagickFalse)
1671 ThrowConvertInvalidArgumentException(option,argv[i]);
1672 break;
1673 }
1674 if (LocaleCompare("fx",option+1) == 0)
1675 {
1676 if (*option == '+')
1677 break;
1678 i++;
cristye81f5522014-05-07 01:25:59 +00001679 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001680 ThrowConvertException(OptionError,"MissingArgument",option);
1681 break;
1682 }
1683 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1684 }
1685 case 'g':
1686 {
1687 if (LocaleCompare("gamma",option+1) == 0)
1688 {
1689 i++;
cristye81f5522014-05-07 01:25:59 +00001690 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001691 ThrowConvertException(OptionError,"MissingArgument",option);
1692 if (IsGeometry(argv[i]) == MagickFalse)
1693 ThrowConvertInvalidArgumentException(option,argv[i]);
1694 break;
1695 }
1696 if ((LocaleCompare("gaussian-blur",option+1) == 0) ||
1697 (LocaleCompare("gaussian",option+1) == 0))
1698 {
1699 i++;
cristye81f5522014-05-07 01:25:59 +00001700 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001701 ThrowConvertException(OptionError,"MissingArgument",option);
1702 if (IsGeometry(argv[i]) == MagickFalse)
1703 ThrowConvertInvalidArgumentException(option,argv[i]);
1704 break;
1705 }
1706 if (LocaleCompare("geometry",option+1) == 0)
1707 {
1708 if (*option == '+')
1709 break;
1710 i++;
cristye81f5522014-05-07 01:25:59 +00001711 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001712 ThrowConvertException(OptionError,"MissingArgument",option);
1713 if (IsGeometry(argv[i]) == MagickFalse)
1714 ThrowConvertInvalidArgumentException(option,argv[i]);
1715 break;
1716 }
1717 if (LocaleCompare("gravity",option+1) == 0)
1718 {
cristybb503372010-05-27 20:51:26 +00001719 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001720 gravity;
1721
1722 if (*option == '+')
1723 break;
1724 i++;
cristye81f5522014-05-07 01:25:59 +00001725 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001726 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001727 gravity=ParseCommandOption(MagickGravityOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001728 argv[i]);
1729 if (gravity < 0)
1730 ThrowConvertException(OptionError,"UnrecognizedGravityType",
1731 argv[i]);
1732 break;
1733 }
cristybc008152013-03-28 16:52:59 +00001734 if (LocaleCompare("grayscale",option+1) == 0)
1735 {
1736 ssize_t
1737 method;
1738
1739 if (*option == '+')
1740 break;
1741 i++;
cristye81f5522014-05-07 01:25:59 +00001742 if (i == (ssize_t) argc)
cristybc008152013-03-28 16:52:59 +00001743 ThrowConvertException(OptionError,"MissingArgument",option);
1744 method=ParseCommandOption(MagickPixelIntensityOptions,MagickFalse,
1745 argv[i]);
1746 if (method < 0)
1747 ThrowConvertException(OptionError,"UnrecognizedIntensityMethod",
1748 argv[i]);
1749 break;
1750 }
cristy3ed852e2009-09-05 21:47:34 +00001751 if (LocaleCompare("green-primary",option+1) == 0)
1752 {
1753 if (*option == '+')
1754 break;
1755 i++;
cristye81f5522014-05-07 01:25:59 +00001756 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001757 ThrowConvertException(OptionError,"MissingArgument",option);
1758 if (IsGeometry(argv[i]) == MagickFalse)
1759 ThrowConvertInvalidArgumentException(option,argv[i]);
1760 break;
1761 }
1762 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1763 }
1764 case 'h':
1765 {
1766 if (LocaleCompare("hald-clut",option+1) == 0)
1767 break;
1768 if ((LocaleCompare("help",option+1) == 0) ||
1769 (LocaleCompare("-help",option+1) == 0))
1770 return(ConvertUsage());
cristy4e215022014-04-19 18:02:35 +00001771 if (LocaleCompare("hough-lines",option+1) == 0)
1772 {
1773 if (*option == '+')
1774 break;
1775 i++;
cristye81f5522014-05-07 01:25:59 +00001776 if (i == (ssize_t) argc)
cristy4e215022014-04-19 18:02:35 +00001777 ThrowConvertException(OptionError,"MissingArgument",option);
1778 if (IsGeometry(argv[i]) == MagickFalse)
1779 ThrowConvertInvalidArgumentException(option,argv[i]);
1780 break;
1781 }
cristy3ed852e2009-09-05 21:47:34 +00001782 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1783 }
1784 case 'i':
1785 {
1786 if (LocaleCompare("identify",option+1) == 0)
1787 break;
1788 if (LocaleCompare("ift",option+1) == 0)
1789 break;
1790 if (LocaleCompare("implode",option+1) == 0)
1791 {
1792 if (*option == '+')
1793 break;
1794 i++;
cristye81f5522014-05-07 01:25:59 +00001795 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001796 ThrowConvertException(OptionError,"MissingArgument",option);
1797 if (IsGeometry(argv[i]) == MagickFalse)
1798 ThrowConvertInvalidArgumentException(option,argv[i]);
1799 break;
1800 }
1801 if (LocaleCompare("insert",option+1) == 0)
1802 {
1803 if (*option == '+')
1804 break;
1805 i++;
cristye81f5522014-05-07 01:25:59 +00001806 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001807 ThrowConvertException(OptionError,"MissingArgument",option);
1808 if (IsGeometry(argv[i]) == MagickFalse)
1809 ThrowConvertInvalidArgumentException(option,argv[i]);
1810 break;
1811 }
cristy70e9f682013-03-12 22:31:22 +00001812 if (LocaleCompare("intensity",option+1) == 0)
1813 {
1814 ssize_t
1815 intensity;
1816
1817 if (*option == '+')
1818 break;
1819 i++;
cristye81f5522014-05-07 01:25:59 +00001820 if (i == (ssize_t) argc)
cristy70e9f682013-03-12 22:31:22 +00001821 ThrowConvertException(OptionError,"MissingArgument",option);
cristy8f84fdd2013-03-28 17:52:55 +00001822 intensity=ParseCommandOption(MagickPixelIntensityOptions,
1823 MagickFalse,argv[i]);
cristy70e9f682013-03-12 22:31:22 +00001824 if (intensity < 0)
cristy8f84fdd2013-03-28 17:52:55 +00001825 ThrowConvertException(OptionError,"UnrecognizedIntensityMethod",
1826 argv[i]);
cristy70e9f682013-03-12 22:31:22 +00001827 break;
1828 }
cristy3ed852e2009-09-05 21:47:34 +00001829 if (LocaleCompare("intent",option+1) == 0)
1830 {
cristybb503372010-05-27 20:51:26 +00001831 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001832 intent;
1833
1834 if (*option == '+')
1835 break;
1836 i++;
cristye81f5522014-05-07 01:25:59 +00001837 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001838 ThrowConvertException(OptionError,"MissingArgument",option);
cristy70e9f682013-03-12 22:31:22 +00001839 intent=ParseCommandOption(MagickIntentOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001840 if (intent < 0)
cristy70e9f682013-03-12 22:31:22 +00001841 ThrowConvertException(OptionError,"UnrecognizedIntentType",argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001842 break;
1843 }
1844 if (LocaleCompare("interlace",option+1) == 0)
1845 {
cristybb503372010-05-27 20:51:26 +00001846 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001847 interlace;
1848
1849 if (*option == '+')
1850 break;
1851 i++;
cristye81f5522014-05-07 01:25:59 +00001852 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001853 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001854 interlace=ParseCommandOption(MagickInterlaceOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001855 argv[i]);
1856 if (interlace < 0)
1857 ThrowConvertException(OptionError,"UnrecognizedInterlaceType",
1858 argv[i]);
1859 break;
1860 }
cristyb32b90a2009-09-07 21:45:48 +00001861 if (LocaleCompare("interline-spacing",option+1) == 0)
1862 {
1863 if (*option == '+')
1864 break;
1865 i++;
cristye81f5522014-05-07 01:25:59 +00001866 if (i == (ssize_t) argc)
cristyb32b90a2009-09-07 21:45:48 +00001867 ThrowConvertException(OptionError,"MissingArgument",option);
1868 if (IsGeometry(argv[i]) == MagickFalse)
1869 ThrowConvertInvalidArgumentException(option,argv[i]);
1870 break;
1871 }
cristy3ed852e2009-09-05 21:47:34 +00001872 if (LocaleCompare("interpolate",option+1) == 0)
1873 {
cristybb503372010-05-27 20:51:26 +00001874 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001875 interpolate;
1876
1877 if (*option == '+')
1878 break;
1879 i++;
cristybb503372010-05-27 20:51:26 +00001880 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001881 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001882 interpolate=ParseCommandOption(MagickInterpolateOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001883 argv[i]);
1884 if (interpolate < 0)
1885 ThrowConvertException(OptionError,"UnrecognizedInterpolateMethod",
1886 argv[i]);
1887 break;
1888 }
1889 if (LocaleCompare("interword-spacing",option+1) == 0)
1890 {
1891 if (*option == '+')
1892 break;
1893 i++;
cristye81f5522014-05-07 01:25:59 +00001894 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001895 ThrowConvertException(OptionError,"MissingArgument",option);
1896 if (IsGeometry(argv[i]) == MagickFalse)
1897 ThrowConvertInvalidArgumentException(option,argv[i]);
1898 break;
1899 }
1900 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1901 }
1902 case 'k':
1903 {
1904 if (LocaleCompare("kerning",option+1) == 0)
1905 {
1906 if (*option == '+')
1907 break;
1908 i++;
cristye81f5522014-05-07 01:25:59 +00001909 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001910 ThrowConvertException(OptionError,"MissingArgument",option);
1911 if (IsGeometry(argv[i]) == MagickFalse)
1912 ThrowConvertInvalidArgumentException(option,argv[i]);
1913 break;
1914 }
cristy3b207f82014-09-27 14:21:20 +00001915 if (LocaleCompare("kuwahara",option+1) == 0)
1916 {
1917 if (*option == '+')
1918 break;
1919 i++;
1920 if (i == (ssize_t) argc)
1921 ThrowConvertException(OptionError,"MissingArgument",option);
1922 if (IsGeometry(argv[i]) == MagickFalse)
1923 ThrowConvertInvalidArgumentException(option,argv[i]);
1924 break;
1925 }
cristy3ed852e2009-09-05 21:47:34 +00001926 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1927 }
1928 case 'l':
1929 {
1930 if (LocaleCompare("label",option+1) == 0)
1931 {
1932 if (*option == '+')
1933 break;
1934 i++;
cristybb503372010-05-27 20:51:26 +00001935 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001936 ThrowConvertException(OptionError,"MissingArgument",option);
1937 break;
1938 }
1939 if (LocaleCompare("lat",option+1) == 0)
1940 {
1941 if (*option == '+')
1942 break;
1943 i++;
cristye81f5522014-05-07 01:25:59 +00001944 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001945 ThrowConvertException(OptionError,"MissingArgument",option);
1946 if (IsGeometry(argv[i]) == MagickFalse)
1947 ThrowConvertInvalidArgumentException(option,argv[i]);
1948 break;
1949 }
1950 if (LocaleCompare("layers",option+1) == 0)
1951 {
cristybb503372010-05-27 20:51:26 +00001952 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001953 type;
1954
1955 if (*option == '+')
1956 break;
1957 i++;
cristye81f5522014-05-07 01:25:59 +00001958 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001959 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001960 type=ParseCommandOption(MagickLayerOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001961 if (type < 0)
1962 ThrowConvertException(OptionError,"UnrecognizedLayerMethod",
1963 argv[i]);
1964 break;
1965 }
1966 if (LocaleCompare("level",option+1) == 0)
1967 {
1968 i++;
cristye81f5522014-05-07 01:25:59 +00001969 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001970 ThrowConvertException(OptionError,"MissingArgument",option);
1971 if (IsGeometry(argv[i]) == MagickFalse)
1972 ThrowConvertInvalidArgumentException(option,argv[i]);
1973 break;
1974 }
1975 if (LocaleCompare("level-colors",option+1) == 0)
1976 {
1977 i++;
cristye81f5522014-05-07 01:25:59 +00001978 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001979 ThrowConvertException(OptionError,"MissingArgument",option);
1980 break;
1981 }
cristy3ed852e2009-09-05 21:47:34 +00001982 if (LocaleCompare("limit",option+1) == 0)
1983 {
1984 char
1985 *p;
1986
1987 double
1988 value;
1989
cristybb503372010-05-27 20:51:26 +00001990 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001991 resource;
1992
1993 if (*option == '+')
1994 break;
1995 i++;
cristybb503372010-05-27 20:51:26 +00001996 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001997 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001998 resource=ParseCommandOption(MagickResourceOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001999 argv[i]);
2000 if (resource < 0)
2001 ThrowConvertException(OptionError,"UnrecognizedResourceType",
2002 argv[i]);
2003 i++;
cristybb503372010-05-27 20:51:26 +00002004 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002005 ThrowConvertException(OptionError,"MissingArgument",option);
cristydbdd0e32011-11-04 23:29:40 +00002006 value=StringToDouble(argv[i],&p);
cristyda16f162011-02-19 23:52:17 +00002007 (void) value;
cristy3ed852e2009-09-05 21:47:34 +00002008 if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
2009 ThrowConvertInvalidArgumentException(option,argv[i]);
2010 break;
2011 }
2012 if (LocaleCompare("linear-stretch",option+1) == 0)
2013 {
2014 i++;
cristye81f5522014-05-07 01:25:59 +00002015 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002016 ThrowConvertException(OptionError,"MissingArgument",option);
2017 if (IsGeometry(argv[i]) == MagickFalse)
2018 ThrowConvertInvalidArgumentException(option,argv[i]);
2019 break;
2020 }
anthonyef0daa62012-03-24 13:43:59 +00002021 if (LocaleCompare("liquid-rescale",option+1) == 0)
2022 {
2023 i++;
cristye81f5522014-05-07 01:25:59 +00002024 if (i == (ssize_t) argc)
anthonyef0daa62012-03-24 13:43:59 +00002025 ThrowConvertException(OptionError,"MissingArgument",option);
2026 if (IsGeometry(argv[i]) == MagickFalse)
2027 ThrowConvertInvalidArgumentException(option,argv[i]);
2028 break;
2029 }
cristy3ed852e2009-09-05 21:47:34 +00002030 if (LocaleCompare("list",option+1) == 0)
2031 {
cristybb503372010-05-27 20:51:26 +00002032 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002033 list;
2034
2035 if (*option == '+')
2036 break;
2037 i++;
cristybb503372010-05-27 20:51:26 +00002038 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002039 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002040 list=ParseCommandOption(MagickListOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002041 if (list < 0)
2042 ThrowConvertException(OptionError,"UnrecognizedListType",argv[i]);
cristyaeb2cbc2010-05-07 13:28:58 +00002043 status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
cristy3ed852e2009-09-05 21:47:34 +00002044 argv+j,exception);
2045 DestroyConvert();
cristy32ce2392014-09-24 19:08:53 +00002046 return(status == 0 ? MagickTrue : MagickFalse);
cristy3ed852e2009-09-05 21:47:34 +00002047 }
2048 if (LocaleCompare("log",option+1) == 0)
2049 {
2050 if (*option == '+')
2051 break;
2052 i++;
cristybb503372010-05-27 20:51:26 +00002053 if ((i == (ssize_t) argc) ||
cristy3ed852e2009-09-05 21:47:34 +00002054 (strchr(argv[i],'%') == (char *) NULL))
2055 ThrowConvertException(OptionError,"MissingArgument",option);
2056 break;
2057 }
2058 if (LocaleCompare("loop",option+1) == 0)
2059 {
2060 if (*option == '+')
2061 break;
2062 i++;
cristye81f5522014-05-07 01:25:59 +00002063 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002064 ThrowConvertException(OptionError,"MissingArgument",option);
2065 if (IsGeometry(argv[i]) == MagickFalse)
2066 ThrowConvertInvalidArgumentException(option,argv[i]);
2067 break;
2068 }
2069 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2070 }
2071 case 'm':
2072 {
2073 if (LocaleCompare("map",option+1) == 0)
2074 {
2075 if (*option == '+')
2076 break;
2077 i++;
cristye81f5522014-05-07 01:25:59 +00002078 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002079 ThrowConvertException(OptionError,"MissingArgument",option);
2080 break;
2081 }
2082 if (LocaleCompare("mask",option+1) == 0)
2083 {
2084 if (*option == '+')
2085 break;
2086 i++;
cristye81f5522014-05-07 01:25:59 +00002087 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002088 ThrowConvertException(OptionError,"MissingArgument",option);
2089 break;
2090 }
2091 if (LocaleCompare("matte",option+1) == 0)
2092 break;
2093 if (LocaleCompare("mattecolor",option+1) == 0)
2094 {
2095 if (*option == '+')
2096 break;
2097 i++;
cristye81f5522014-05-07 01:25:59 +00002098 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002099 ThrowConvertException(OptionError,"MissingArgument",option);
2100 break;
2101 }
cristy52ad9e92013-02-08 23:23:29 +00002102 if (LocaleCompare("maximum",option+1) == 0)
2103 break;
cristy2fc10e52014-04-26 14:13:53 +00002104 if (LocaleCompare("mean-shift",option+1) == 0)
2105 {
2106 if (*option == '+')
2107 break;
2108 i++;
cristye81f5522014-05-07 01:25:59 +00002109 if (i == (ssize_t) argc)
cristy2fc10e52014-04-26 14:13:53 +00002110 ThrowConvertException(OptionError,"MissingArgument",option);
2111 if (IsGeometry(argv[i]) == MagickFalse)
2112 ThrowConvertInvalidArgumentException(option,argv[i]);
2113 break;
2114 }
cristy52ad9e92013-02-08 23:23:29 +00002115 if (LocaleCompare("median",option+1) == 0)
2116 {
2117 if (*option == '+')
2118 break;
2119 i++;
cristye81f5522014-05-07 01:25:59 +00002120 if (i == (ssize_t) argc)
cristy52ad9e92013-02-08 23:23:29 +00002121 ThrowConvertException(OptionError,"MissingArgument",option);
2122 if (IsGeometry(argv[i]) == MagickFalse)
2123 ThrowConvertInvalidArgumentException(option,argv[i]);
2124 break;
2125 }
cristyb92495a2013-08-20 00:10:59 +00002126 if (LocaleCompare("metric",option+1) == 0)
2127 {
2128 ssize_t
2129 type;
2130
2131 if (*option == '+')
2132 break;
2133 i++;
2134 if (i == (ssize_t) argc)
2135 ThrowConvertException(OptionError,"MissingArgument",option);
2136 type=ParseCommandOption(MagickMetricOptions,MagickTrue,argv[i]);
2137 if (type < 0)
2138 ThrowConvertException(OptionError,"UnrecognizedMetricType",
2139 argv[i]);
2140 break;
2141 }
cristy52ad9e92013-02-08 23:23:29 +00002142 if (LocaleCompare("minimum",option+1) == 0)
2143 break;
2144 if (LocaleCompare("mode",option+1) == 0)
2145 {
2146 if (*option == '+')
2147 break;
2148 i++;
cristye81f5522014-05-07 01:25:59 +00002149 if (i == (ssize_t) argc)
cristy52ad9e92013-02-08 23:23:29 +00002150 ThrowConvertException(OptionError,"MissingArgument",option);
2151 if (IsGeometry(argv[i]) == MagickFalse)
2152 ThrowConvertInvalidArgumentException(option,argv[i]);
2153 break;
2154 }
cristy3ed852e2009-09-05 21:47:34 +00002155 if (LocaleCompare("modulate",option+1) == 0)
2156 {
2157 if (*option == '+')
2158 break;
2159 i++;
cristye81f5522014-05-07 01:25:59 +00002160 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002161 ThrowConvertException(OptionError,"MissingArgument",option);
2162 if (IsGeometry(argv[i]) == MagickFalse)
2163 ThrowConvertInvalidArgumentException(option,argv[i]);
2164 break;
2165 }
cristy80b1dee2014-01-09 11:27:24 +00002166 if (LocaleCompare("moments",option+1) == 0)
2167 break;
cristy3ed852e2009-09-05 21:47:34 +00002168 if (LocaleCompare("monitor",option+1) == 0)
2169 break;
2170 if (LocaleCompare("monochrome",option+1) == 0)
2171 break;
2172 if (LocaleCompare("morph",option+1) == 0)
2173 {
2174 if (*option == '+')
2175 break;
2176 i++;
cristye81f5522014-05-07 01:25:59 +00002177 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002178 ThrowConvertException(OptionError,"MissingArgument",option);
2179 if (IsGeometry(argv[i]) == MagickFalse)
2180 ThrowConvertInvalidArgumentException(option,argv[i]);
2181 break;
2182 }
anthony29188a82010-01-22 10:12:34 +00002183 if (LocaleCompare("morphology",option+1) == 0)
2184 {
anthony29188a82010-01-22 10:12:34 +00002185 char
cristy151b66d2015-04-15 10:50:31 +00002186 token[MagickPathExtent];
anthony29188a82010-01-22 10:12:34 +00002187
cristyb6bd4ad2010-08-08 01:12:27 +00002188 KernelInfo
2189 *kernel_info;
2190
cristybb503372010-05-27 20:51:26 +00002191 ssize_t
cristye6365592010-04-02 17:31:23 +00002192 op;
2193
anthony29188a82010-01-22 10:12:34 +00002194 i++;
cristybb503372010-05-27 20:51:26 +00002195 if (i == (ssize_t) argc)
anthony29188a82010-01-22 10:12:34 +00002196 ThrowConvertException(OptionError,"MissingArgument",option);
2197 GetMagickToken(argv[i],NULL,token);
cristy042ee782011-04-22 18:48:30 +00002198 op=ParseCommandOption(MagickMorphologyOptions,MagickFalse,token);
anthony29188a82010-01-22 10:12:34 +00002199 if (op < 0)
2200 ThrowConvertException(OptionError,"UnrecognizedMorphologyMethod",
cristye6365592010-04-02 17:31:23 +00002201 token);
anthony29188a82010-01-22 10:12:34 +00002202 i++;
cristye81f5522014-05-07 01:25:59 +00002203 if (i == (ssize_t) argc)
anthony29188a82010-01-22 10:12:34 +00002204 ThrowConvertException(OptionError,"MissingArgument",option);
cristy2c57b742014-10-31 00:40:34 +00002205 kernel_info=AcquireKernelInfo(argv[i],exception);
cristyb6bd4ad2010-08-08 01:12:27 +00002206 if (kernel_info == (KernelInfo *) NULL)
anthony29188a82010-01-22 10:12:34 +00002207 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00002208 kernel_info=DestroyKernelInfo(kernel_info);
anthony29188a82010-01-22 10:12:34 +00002209 break;
2210 }
cristy3ed852e2009-09-05 21:47:34 +00002211 if (LocaleCompare("mosaic",option+1) == 0)
2212 break;
2213 if (LocaleCompare("motion-blur",option+1) == 0)
2214 {
2215 if (*option == '+')
2216 break;
2217 i++;
cristye81f5522014-05-07 01:25:59 +00002218 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002219 ThrowConvertException(OptionError,"MissingArgument",option);
2220 if (IsGeometry(argv[i]) == MagickFalse)
2221 ThrowConvertInvalidArgumentException(option,argv[i]);
2222 break;
2223 }
2224 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2225 }
2226 case 'n':
2227 {
2228 if (LocaleCompare("negate",option+1) == 0)
2229 break;
2230 if (LocaleCompare("noise",option+1) == 0)
2231 {
2232 i++;
cristye81f5522014-05-07 01:25:59 +00002233 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002234 ThrowConvertException(OptionError,"MissingArgument",option);
2235 if (*option == '+')
2236 {
cristybb503372010-05-27 20:51:26 +00002237 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002238 noise;
2239
cristy042ee782011-04-22 18:48:30 +00002240 noise=ParseCommandOption(MagickNoiseOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002241 if (noise < 0)
2242 ThrowConvertException(OptionError,"UnrecognizedNoiseType",
2243 argv[i]);
2244 break;
2245 }
2246 if (IsGeometry(argv[i]) == MagickFalse)
2247 ThrowConvertInvalidArgumentException(option,argv[i]);
2248 break;
2249 }
2250 if (LocaleCompare("noop",option+1) == 0)
2251 break;
2252 if (LocaleCompare("normalize",option+1) == 0)
2253 break;
2254 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2255 }
2256 case 'o':
2257 {
2258 if (LocaleCompare("opaque",option+1) == 0)
2259 {
2260 i++;
cristye81f5522014-05-07 01:25:59 +00002261 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002262 ThrowConvertException(OptionError,"MissingArgument",option);
2263 break;
2264 }
2265 if (LocaleCompare("ordered-dither",option+1) == 0)
2266 {
2267 if (*option == '+')
2268 break;
2269 i++;
cristye81f5522014-05-07 01:25:59 +00002270 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002271 ThrowConvertException(OptionError,"MissingArgument",option);
2272 break;
2273 }
2274 if (LocaleCompare("orient",option+1) == 0)
2275 {
cristybb503372010-05-27 20:51:26 +00002276 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002277 orientation;
2278
2279 if (*option == '+')
2280 break;
2281 i++;
cristye81f5522014-05-07 01:25:59 +00002282 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002283 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002284 orientation=ParseCommandOption(MagickOrientationOptions,
cristy3ed852e2009-09-05 21:47:34 +00002285 MagickFalse,argv[i]);
2286 if (orientation < 0)
2287 ThrowConvertException(OptionError,"UnrecognizedImageOrientation",
2288 argv[i]);
2289 break;
2290 }
2291 ThrowConvertException(OptionError,"UnrecognizedOption",argv[i])
2292 }
2293 case 'p':
2294 {
2295 if (LocaleCompare("page",option+1) == 0)
2296 {
2297 if (*option == '+')
2298 break;
2299 i++;
cristybb503372010-05-27 20:51:26 +00002300 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002301 ThrowConvertException(OptionError,"MissingArgument",option);
2302 break;
2303 }
2304 if (LocaleCompare("paint",option+1) == 0)
2305 {
2306 if (*option == '+')
2307 break;
2308 i++;
cristye81f5522014-05-07 01:25:59 +00002309 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002310 ThrowConvertException(OptionError,"MissingArgument",option);
2311 if (IsGeometry(argv[i]) == MagickFalse)
2312 ThrowConvertInvalidArgumentException(option,argv[i]);
2313 break;
2314 }
cristyab2b40a2012-11-04 01:43:29 +00002315 if (LocaleCompare("perceptible",option+1) == 0)
2316 {
2317 if (*option == '+')
2318 break;
2319 i++;
cristye81f5522014-05-07 01:25:59 +00002320 if (i == (ssize_t) argc)
cristyab2b40a2012-11-04 01:43:29 +00002321 ThrowConvertException(OptionError,"MissingArgument",option);
2322 if (IsGeometry(argv[i]) == MagickFalse)
2323 ThrowConvertInvalidArgumentException(option,argv[i]);
2324 break;
2325 }
cristy3ed852e2009-09-05 21:47:34 +00002326 if (LocaleCompare("ping",option+1) == 0)
2327 break;
2328 if (LocaleCompare("pointsize",option+1) == 0)
2329 {
2330 if (*option == '+')
2331 break;
2332 i++;
cristye81f5522014-05-07 01:25:59 +00002333 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002334 ThrowConvertException(OptionError,"MissingArgument",option);
2335 if (IsGeometry(argv[i]) == MagickFalse)
2336 ThrowConvertInvalidArgumentException(option,argv[i]);
2337 break;
2338 }
2339 if (LocaleCompare("polaroid",option+1) == 0)
2340 {
2341 if (*option == '+')
2342 break;
2343 i++;
cristye81f5522014-05-07 01:25:59 +00002344 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002345 ThrowConvertException(OptionError,"MissingArgument",option);
2346 if (IsGeometry(argv[i]) == MagickFalse)
2347 ThrowConvertInvalidArgumentException(option,argv[i]);
2348 break;
2349 }
cristy8cdfb342012-11-11 21:44:36 +00002350 if (LocaleCompare("poly",option+1) == 0)
2351 {
2352 if (*option == '+')
2353 break;
2354 i++;
cristye81f5522014-05-07 01:25:59 +00002355 if (i == (ssize_t) argc)
cristy8cdfb342012-11-11 21:44:36 +00002356 ThrowConvertException(OptionError,"MissingArgument",option);
2357 if (IsGeometry(argv[i]) == MagickFalse)
2358 ThrowConvertInvalidArgumentException(option,argv[i]);
2359 break;
2360 }
cristy3ed852e2009-09-05 21:47:34 +00002361 if (LocaleCompare("posterize",option+1) == 0)
2362 {
2363 if (*option == '+')
2364 break;
2365 i++;
cristye81f5522014-05-07 01:25:59 +00002366 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002367 ThrowConvertException(OptionError,"MissingArgument",option);
2368 if (IsGeometry(argv[i]) == MagickFalse)
2369 ThrowConvertInvalidArgumentException(option,argv[i]);
2370 break;
2371 }
cristye7f51092010-01-17 00:39:37 +00002372 if (LocaleCompare("precision",option+1) == 0)
2373 {
2374 if (*option == '+')
2375 break;
2376 i++;
cristye81f5522014-05-07 01:25:59 +00002377 if (i == (ssize_t) argc)
cristye7f51092010-01-17 00:39:37 +00002378 ThrowConvertException(OptionError,"MissingArgument",option);
2379 if (IsGeometry(argv[i]) == MagickFalse)
2380 ThrowConvertInvalidArgumentException(option,argv[i]);
2381 break;
2382 }
cristy3ed852e2009-09-05 21:47:34 +00002383 if (LocaleCompare("preview",option+1) == 0)
2384 {
cristybb503372010-05-27 20:51:26 +00002385 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002386 preview;
2387
2388 if (*option == '+')
2389 break;
2390 i++;
cristye81f5522014-05-07 01:25:59 +00002391 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002392 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002393 preview=ParseCommandOption(MagickPreviewOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002394 argv[i]);
2395 if (preview < 0)
2396 ThrowConvertException(OptionError,"UnrecognizedPreviewType",
2397 argv[i]);
2398 break;
2399 }
2400 if (LocaleCompare("print",option+1) == 0)
2401 {
2402 if (*option == '+')
2403 break;
2404 i++;
cristye81f5522014-05-07 01:25:59 +00002405 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002406 ThrowConvertException(OptionError,"MissingArgument",option);
2407 break;
2408 }
2409 if (LocaleCompare("process",option+1) == 0)
2410 {
2411 if (*option == '+')
2412 break;
2413 i++;
cristye81f5522014-05-07 01:25:59 +00002414 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002415 ThrowConvertException(OptionError,"MissingArgument",option);
2416 break;
2417 }
2418 if (LocaleCompare("profile",option+1) == 0)
2419 {
2420 i++;
cristye81f5522014-05-07 01:25:59 +00002421 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002422 ThrowConvertException(OptionError,"MissingArgument",option);
2423 break;
2424 }
2425 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2426 }
2427 case 'q':
2428 {
2429 if (LocaleCompare("quality",option+1) == 0)
2430 {
2431 if (*option == '+')
2432 break;
2433 i++;
cristye81f5522014-05-07 01:25:59 +00002434 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002435 ThrowConvertException(OptionError,"MissingArgument",option);
2436 if (IsGeometry(argv[i]) == MagickFalse)
2437 ThrowConvertInvalidArgumentException(option,argv[i]);
2438 break;
2439 }
2440 if (LocaleCompare("quantize",option+1) == 0)
2441 {
cristybb503372010-05-27 20:51:26 +00002442 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002443 colorspace;
2444
2445 if (*option == '+')
2446 break;
2447 i++;
cristye81f5522014-05-07 01:25:59 +00002448 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002449 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002450 colorspace=ParseCommandOption(MagickColorspaceOptions,
cristy3ed852e2009-09-05 21:47:34 +00002451 MagickFalse,argv[i]);
2452 if (colorspace < 0)
2453 ThrowConvertException(OptionError,"UnrecognizedColorspace",
2454 argv[i]);
2455 break;
2456 }
2457 if (LocaleCompare("quiet",option+1) == 0)
2458 break;
2459 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2460 }
2461 case 'r':
2462 {
dirk6d612cf2014-03-13 21:17:23 +00002463 if (LocaleCompare("rotational-blur",option+1) == 0)
cristy3ed852e2009-09-05 21:47:34 +00002464 {
2465 i++;
cristye81f5522014-05-07 01:25:59 +00002466 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002467 ThrowConvertException(OptionError,"MissingArgument",option);
2468 if (IsGeometry(argv[i]) == MagickFalse)
2469 ThrowConvertInvalidArgumentException(option,argv[i]);
2470 break;
2471 }
2472 if (LocaleCompare("raise",option+1) == 0)
2473 {
2474 i++;
cristye81f5522014-05-07 01:25:59 +00002475 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002476 ThrowConvertException(OptionError,"MissingArgument",option);
2477 if (IsGeometry(argv[i]) == MagickFalse)
2478 ThrowConvertInvalidArgumentException(option,argv[i]);
2479 break;
2480 }
2481 if (LocaleCompare("random-threshold",option+1) == 0)
2482 {
2483 if (*option == '+')
2484 break;
2485 i++;
cristye81f5522014-05-07 01:25:59 +00002486 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002487 ThrowConvertException(OptionError,"MissingArgument",option);
2488 if (IsGeometry(argv[i]) == MagickFalse)
2489 ThrowConvertInvalidArgumentException(option,argv[i]);
2490 break;
2491 }
cristy3ed852e2009-09-05 21:47:34 +00002492 if (LocaleCompare("red-primary",option+1) == 0)
2493 {
2494 if (*option == '+')
2495 break;
2496 i++;
cristye81f5522014-05-07 01:25:59 +00002497 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002498 ThrowConvertException(OptionError,"MissingArgument",option);
2499 if (IsGeometry(argv[i]) == MagickFalse)
2500 ThrowConvertInvalidArgumentException(option,argv[i]);
2501 break;
2502 }
2503 if (LocaleCompare("regard-warnings",option+1) == 0)
2504 break;
2505 if (LocaleCompare("region",option+1) == 0)
2506 {
2507 if (*option == '+')
2508 break;
2509 i++;
cristye81f5522014-05-07 01:25:59 +00002510 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002511 ThrowConvertException(OptionError,"MissingArgument",option);
2512 if (IsGeometry(argv[i]) == MagickFalse)
2513 ThrowConvertInvalidArgumentException(option,argv[i]);
2514 break;
2515 }
2516 if (LocaleCompare("remap",option+1) == 0)
2517 {
2518 if (*option == '+')
2519 break;
2520 i++;
cristye81f5522014-05-07 01:25:59 +00002521 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002522 ThrowConvertException(OptionError,"MissingArgument",option);
2523 break;
2524 }
2525 if (LocaleCompare("render",option+1) == 0)
2526 break;
2527 if (LocaleCompare("repage",option+1) == 0)
2528 {
2529 if (*option == '+')
2530 break;
2531 i++;
cristye81f5522014-05-07 01:25:59 +00002532 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002533 ThrowConvertException(OptionError,"MissingArgument",option);
2534 if (IsGeometry(argv[i]) == MagickFalse)
2535 ThrowConvertInvalidArgumentException(option,argv[i]);
2536 break;
2537 }
2538 if (LocaleCompare("resample",option+1) == 0)
2539 {
2540 if (*option == '+')
2541 break;
2542 i++;
cristye81f5522014-05-07 01:25:59 +00002543 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002544 ThrowConvertException(OptionError,"MissingArgument",option);
2545 if (IsGeometry(argv[i]) == MagickFalse)
2546 ThrowConvertInvalidArgumentException(option,argv[i]);
2547 break;
2548 }
2549 if (LocaleCompare("resize",option+1) == 0)
2550 {
2551 if (*option == '+')
2552 break;
2553 i++;
cristye81f5522014-05-07 01:25:59 +00002554 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002555 ThrowConvertException(OptionError,"MissingArgument",option);
2556 if (IsGeometry(argv[i]) == MagickFalse)
2557 ThrowConvertInvalidArgumentException(option,argv[i]);
2558 break;
2559 }
2560 if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
2561 {
2562 respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
2563 break;
2564 }
2565 if (LocaleCompare("reverse",option+1) == 0)
2566 break;
2567 if (LocaleCompare("roll",option+1) == 0)
2568 {
2569 if (*option == '+')
2570 break;
2571 i++;
cristye81f5522014-05-07 01:25:59 +00002572 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002573 ThrowConvertException(OptionError,"MissingArgument",option);
2574 if (IsGeometry(argv[i]) == MagickFalse)
2575 ThrowConvertInvalidArgumentException(option,argv[i]);
2576 break;
2577 }
2578 if (LocaleCompare("rotate",option+1) == 0)
2579 {
2580 i++;
cristye81f5522014-05-07 01:25:59 +00002581 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002582 ThrowConvertException(OptionError,"MissingArgument",option);
2583 if (IsGeometry(argv[i]) == MagickFalse)
2584 ThrowConvertInvalidArgumentException(option,argv[i]);
2585 break;
2586 }
2587 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2588 }
2589 case 's':
2590 {
2591 if (LocaleCompare("sample",option+1) == 0)
2592 {
2593 if (*option == '+')
2594 break;
2595 i++;
cristye81f5522014-05-07 01:25:59 +00002596 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002597 ThrowConvertException(OptionError,"MissingArgument",option);
2598 if (IsGeometry(argv[i]) == MagickFalse)
2599 ThrowConvertInvalidArgumentException(option,argv[i]);
2600 break;
2601 }
2602 if (LocaleCompare("sampling-factor",option+1) == 0)
2603 {
2604 if (*option == '+')
2605 break;
2606 i++;
cristye81f5522014-05-07 01:25:59 +00002607 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002608 ThrowConvertException(OptionError,"MissingArgument",option);
2609 if (IsGeometry(argv[i]) == MagickFalse)
2610 ThrowConvertInvalidArgumentException(option,argv[i]);
2611 break;
2612 }
2613 if (LocaleCompare("scale",option+1) == 0)
2614 {
2615 if (*option == '+')
2616 break;
2617 i++;
cristye81f5522014-05-07 01:25:59 +00002618 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002619 ThrowConvertException(OptionError,"MissingArgument",option);
2620 if (IsGeometry(argv[i]) == MagickFalse)
2621 ThrowConvertInvalidArgumentException(option,argv[i]);
2622 break;
2623 }
2624 if (LocaleCompare("scene",option+1) == 0)
2625 {
2626 if (*option == '+')
2627 break;
2628 i++;
cristye81f5522014-05-07 01:25:59 +00002629 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002630 ThrowConvertException(OptionError,"MissingArgument",option);
2631 if (IsGeometry(argv[i]) == MagickFalse)
2632 ThrowConvertInvalidArgumentException(option,argv[i]);
2633 break;
2634 }
2635 if (LocaleCompare("seed",option+1) == 0)
2636 {
2637 if (*option == '+')
2638 break;
2639 i++;
cristye81f5522014-05-07 01:25:59 +00002640 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002641 ThrowConvertException(OptionError,"MissingArgument",option);
2642 if (IsGeometry(argv[i]) == MagickFalse)
2643 ThrowConvertInvalidArgumentException(option,argv[i]);
2644 break;
2645 }
2646 if (LocaleCompare("segment",option+1) == 0)
2647 {
2648 if (*option == '+')
2649 break;
2650 i++;
cristye81f5522014-05-07 01:25:59 +00002651 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002652 ThrowConvertException(OptionError,"MissingArgument",option);
2653 if (IsGeometry(argv[i]) == MagickFalse)
2654 ThrowConvertInvalidArgumentException(option,argv[i]);
2655 break;
2656 }
2657 if (LocaleCompare("selective-blur",option+1) == 0)
2658 {
2659 i++;
cristye81f5522014-05-07 01:25:59 +00002660 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002661 ThrowConvertException(OptionError,"MissingArgument",option);
2662 if (IsGeometry(argv[i]) == MagickFalse)
2663 ThrowConvertInvalidArgumentException(option,argv[i]);
2664 break;
2665 }
2666 if (LocaleCompare("separate",option+1) == 0)
2667 break;
2668 if (LocaleCompare("sepia-tone",option+1) == 0)
2669 {
2670 if (*option == '+')
2671 break;
2672 i++;
cristye81f5522014-05-07 01:25:59 +00002673 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002674 ThrowConvertException(OptionError,"MissingArgument",option);
2675 if (IsGeometry(argv[i]) == MagickFalse)
2676 ThrowConvertInvalidArgumentException(option,argv[i]);
2677 break;
2678 }
2679 if (LocaleCompare("set",option+1) == 0)
2680 {
2681 i++;
cristybb503372010-05-27 20:51:26 +00002682 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002683 ThrowConvertException(OptionError,"MissingArgument",option);
2684 if (*option == '+')
2685 break;
2686 i++;
cristybb503372010-05-27 20:51:26 +00002687 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002688 ThrowConvertException(OptionError,"MissingArgument",option);
2689 break;
2690 }
2691 if (LocaleCompare("shade",option+1) == 0)
2692 {
2693 i++;
cristye81f5522014-05-07 01:25:59 +00002694 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002695 ThrowConvertException(OptionError,"MissingArgument",option);
2696 if (IsGeometry(argv[i]) == MagickFalse)
2697 ThrowConvertInvalidArgumentException(option,argv[i]);
2698 break;
2699 }
2700 if (LocaleCompare("shadow",option+1) == 0)
2701 {
2702 if (*option == '+')
2703 break;
2704 i++;
cristye81f5522014-05-07 01:25:59 +00002705 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002706 ThrowConvertException(OptionError,"MissingArgument",option);
2707 if (IsGeometry(argv[i]) == MagickFalse)
2708 ThrowConvertInvalidArgumentException(option,argv[i]);
2709 break;
2710 }
2711 if (LocaleCompare("sharpen",option+1) == 0)
2712 {
2713 i++;
cristye81f5522014-05-07 01:25:59 +00002714 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002715 ThrowConvertException(OptionError,"MissingArgument",option);
2716 if (IsGeometry(argv[i]) == MagickFalse)
2717 ThrowConvertInvalidArgumentException(option,argv[i]);
2718 break;
2719 }
2720 if (LocaleCompare("shave",option+1) == 0)
2721 {
2722 if (*option == '+')
2723 break;
2724 i++;
cristye81f5522014-05-07 01:25:59 +00002725 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002726 ThrowConvertException(OptionError,"MissingArgument",option);
2727 if (IsGeometry(argv[i]) == MagickFalse)
2728 ThrowConvertInvalidArgumentException(option,argv[i]);
2729 break;
2730 }
2731 if (LocaleCompare("shear",option+1) == 0)
2732 {
2733 i++;
cristye81f5522014-05-07 01:25:59 +00002734 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002735 ThrowConvertException(OptionError,"MissingArgument",option);
2736 if (IsGeometry(argv[i]) == MagickFalse)
2737 ThrowConvertInvalidArgumentException(option,argv[i]);
2738 break;
2739 }
2740 if (LocaleCompare("sigmoidal-contrast",option+1) == 0)
2741 {
2742 i++;
cristye81f5522014-05-07 01:25:59 +00002743 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002744 ThrowConvertException(OptionError,"MissingArgument",option);
2745 if (IsGeometry(argv[i]) == MagickFalse)
2746 ThrowConvertInvalidArgumentException(option,argv[i]);
2747 break;
2748 }
2749 if (LocaleCompare("size",option+1) == 0)
2750 {
2751 if (*option == '+')
2752 break;
2753 i++;
cristye81f5522014-05-07 01:25:59 +00002754 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002755 ThrowConvertException(OptionError,"MissingArgument",option);
2756 if (IsGeometry(argv[i]) == MagickFalse)
2757 ThrowConvertInvalidArgumentException(option,argv[i]);
2758 break;
2759 }
2760 if (LocaleCompare("sketch",option+1) == 0)
2761 {
2762 if (*option == '+')
2763 break;
2764 i++;
cristye81f5522014-05-07 01:25:59 +00002765 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002766 ThrowConvertException(OptionError,"MissingArgument",option);
2767 if (IsGeometry(argv[i]) == MagickFalse)
2768 ThrowConvertInvalidArgumentException(option,argv[i]);
2769 break;
2770 }
cristy4285d782011-02-09 20:12:28 +00002771 if (LocaleCompare("smush",option+1) == 0)
2772 {
cristy4285d782011-02-09 20:12:28 +00002773 i++;
cristye81f5522014-05-07 01:25:59 +00002774 if (i == (ssize_t) argc)
cristy4285d782011-02-09 20:12:28 +00002775 ThrowConvertException(OptionError,"MissingArgument",option);
2776 if (IsGeometry(argv[i]) == MagickFalse)
2777 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy4285d782011-02-09 20:12:28 +00002778 break;
2779 }
cristy3ed852e2009-09-05 21:47:34 +00002780 if (LocaleCompare("solarize",option+1) == 0)
2781 {
2782 if (*option == '+')
2783 break;
2784 i++;
cristye81f5522014-05-07 01:25:59 +00002785 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002786 ThrowConvertException(OptionError,"MissingArgument",option);
2787 if (IsGeometry(argv[i]) == MagickFalse)
2788 ThrowConvertInvalidArgumentException(option,argv[i]);
2789 break;
2790 }
2791 if (LocaleCompare("sparse-color",option+1) == 0)
2792 {
cristybb503372010-05-27 20:51:26 +00002793 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002794 op;
2795
2796 i++;
cristybb503372010-05-27 20:51:26 +00002797 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002798 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002799 op=ParseCommandOption(MagickSparseColorOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002800 if (op < 0)
2801 ThrowConvertException(OptionError,"UnrecognizedSparseColorMethod",
2802 argv[i]);
2803 i++;
cristye81f5522014-05-07 01:25:59 +00002804 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002805 ThrowConvertException(OptionError,"MissingArgument",option);
2806 break;
2807 }
2808 if (LocaleCompare("splice",option+1) == 0)
2809 {
2810 if (*option == '+')
2811 break;
2812 i++;
cristye81f5522014-05-07 01:25:59 +00002813 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002814 ThrowConvertException(OptionError,"MissingArgument",option);
2815 if (IsGeometry(argv[i]) == MagickFalse)
2816 ThrowConvertInvalidArgumentException(option,argv[i]);
2817 break;
2818 }
2819 if (LocaleCompare("spread",option+1) == 0)
2820 {
2821 if (*option == '+')
2822 break;
2823 i++;
cristye81f5522014-05-07 01:25:59 +00002824 if ((i == (ssize_t) argc) ||
cristy3ed852e2009-09-05 21:47:34 +00002825 (IsGeometry(argv[i]) == MagickFalse))
2826 ThrowConvertException(OptionError,"MissingArgument",option);
2827 break;
2828 }
cristy0834d642011-03-18 18:26:08 +00002829 if (LocaleCompare("statistic",option+1) == 0)
2830 {
2831 ssize_t
2832 op;
2833
2834 if (*option == '+')
2835 break;
2836 i++;
2837 if (i == (ssize_t) argc)
2838 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002839 op=ParseCommandOption(MagickStatisticOptions,MagickFalse,argv[i]);
cristy0834d642011-03-18 18:26:08 +00002840 if (op < 0)
2841 ThrowConvertException(OptionError,"UnrecognizedStatisticType",
2842 argv[i]);
2843 i++;
cristye81f5522014-05-07 01:25:59 +00002844 if (i == (ssize_t) argc)
cristy0834d642011-03-18 18:26:08 +00002845 ThrowConvertException(OptionError,"MissingArgument",option);
2846 if (IsGeometry(argv[i]) == MagickFalse)
2847 ThrowConvertInvalidArgumentException(option,argv[i]);
2848 break;
2849 }
cristy3ed852e2009-09-05 21:47:34 +00002850 if (LocaleCompare("stretch",option+1) == 0)
2851 {
cristybb503372010-05-27 20:51:26 +00002852 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002853 stretch;
2854
2855 if (*option == '+')
2856 break;
2857 i++;
cristye81f5522014-05-07 01:25:59 +00002858 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002859 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002860 stretch=ParseCommandOption(MagickStretchOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002861 argv[i]);
2862 if (stretch < 0)
2863 ThrowConvertException(OptionError,"UnrecognizedStyleType",
2864 argv[i]);
2865 break;
2866 }
2867 if (LocaleCompare("strip",option+1) == 0)
2868 break;
2869 if (LocaleCompare("stroke",option+1) == 0)
2870 {
2871 if (*option == '+')
2872 break;
2873 i++;
cristye81f5522014-05-07 01:25:59 +00002874 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002875 ThrowConvertException(OptionError,"MissingArgument",option);
2876 break;
2877 }
2878 if (LocaleCompare("strokewidth",option+1) == 0)
2879 {
2880 if (*option == '+')
2881 break;
2882 i++;
cristye81f5522014-05-07 01:25:59 +00002883 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002884 ThrowConvertException(OptionError,"MissingArgument",option);
2885 if (IsGeometry(argv[i]) == MagickFalse)
2886 ThrowConvertInvalidArgumentException(option,argv[i]);
2887 break;
2888 }
2889 if (LocaleCompare("style",option+1) == 0)
2890 {
cristybb503372010-05-27 20:51:26 +00002891 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002892 style;
2893
2894 if (*option == '+')
2895 break;
2896 i++;
cristye81f5522014-05-07 01:25:59 +00002897 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002898 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002899 style=ParseCommandOption(MagickStyleOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002900 if (style < 0)
2901 ThrowConvertException(OptionError,"UnrecognizedStyleType",
2902 argv[i]);
2903 break;
2904 }
cristy52ad9e92013-02-08 23:23:29 +00002905 if (LocaleCompare("support",option+1) == 0)
2906 {
2907 i++; /* deprecated */
2908 break;
2909 }
cristy3ed852e2009-09-05 21:47:34 +00002910 if (LocaleCompare("swap",option+1) == 0)
2911 {
2912 if (*option == '+')
2913 break;
2914 i++;
cristye81f5522014-05-07 01:25:59 +00002915 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002916 ThrowConvertException(OptionError,"MissingArgument",option);
2917 if (IsGeometry(argv[i]) == MagickFalse)
2918 ThrowConvertInvalidArgumentException(option,argv[i]);
2919 break;
2920 }
2921 if (LocaleCompare("swirl",option+1) == 0)
2922 {
2923 if (*option == '+')
2924 break;
2925 i++;
cristye81f5522014-05-07 01:25:59 +00002926 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002927 ThrowConvertException(OptionError,"MissingArgument",option);
2928 if (IsGeometry(argv[i]) == MagickFalse)
2929 ThrowConvertInvalidArgumentException(option,argv[i]);
2930 break;
2931 }
cristyd9a29192010-10-16 16:49:53 +00002932 if (LocaleCompare("synchronize",option+1) == 0)
2933 break;
cristy3ed852e2009-09-05 21:47:34 +00002934 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2935 }
2936 case 't':
2937 {
2938 if (LocaleCompare("taint",option+1) == 0)
2939 break;
2940 if (LocaleCompare("texture",option+1) == 0)
2941 {
2942 if (*option == '+')
2943 break;
2944 i++;
cristye81f5522014-05-07 01:25:59 +00002945 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002946 ThrowConvertException(OptionError,"MissingArgument",option);
2947 break;
2948 }
anthony52bef752012-03-27 13:54:47 +00002949 if (LocaleCompare("threshold",option+1) == 0)
cristy3ed852e2009-09-05 21:47:34 +00002950 {
2951 if (*option == '+')
2952 break;
2953 i++;
cristye81f5522014-05-07 01:25:59 +00002954 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002955 ThrowConvertException(OptionError,"MissingArgument",option);
2956 if (IsGeometry(argv[i]) == MagickFalse)
2957 ThrowConvertInvalidArgumentException(option,argv[i]);
2958 break;
2959 }
anthony52bef752012-03-27 13:54:47 +00002960 if (LocaleCompare("thumbnail",option+1) == 0)
cristy3ed852e2009-09-05 21:47:34 +00002961 {
2962 if (*option == '+')
2963 break;
2964 i++;
cristye81f5522014-05-07 01:25:59 +00002965 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002966 ThrowConvertException(OptionError,"MissingArgument",option);
2967 if (IsGeometry(argv[i]) == MagickFalse)
2968 ThrowConvertInvalidArgumentException(option,argv[i]);
2969 break;
2970 }
2971 if (LocaleCompare("tile",option+1) == 0)
2972 {
2973 if (*option == '+')
2974 break;
2975 i++;
cristye81f5522014-05-07 01:25:59 +00002976 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002977 ThrowConvertException(OptionError,"MissingArgument",option);
2978 break;
2979 }
2980 if (LocaleCompare("tile-offset",option+1) == 0)
2981 {
2982 if (*option == '+')
2983 break;
2984 i++;
cristye81f5522014-05-07 01:25:59 +00002985 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002986 ThrowConvertException(OptionError,"MissingArgument",option);
2987 if (IsGeometry(argv[i]) == MagickFalse)
2988 ThrowConvertInvalidArgumentException(option,argv[i]);
2989 break;
2990 }
2991 if (LocaleCompare("tint",option+1) == 0)
2992 {
2993 if (*option == '+')
2994 break;
2995 i++;
cristye81f5522014-05-07 01:25:59 +00002996 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002997 ThrowConvertException(OptionError,"MissingArgument",option);
2998 if (IsGeometry(argv[i]) == MagickFalse)
2999 ThrowConvertInvalidArgumentException(option,argv[i]);
3000 break;
3001 }
3002 if (LocaleCompare("transform",option+1) == 0)
3003 break;
3004 if (LocaleCompare("transparent",option+1) == 0)
3005 {
3006 i++;
cristye81f5522014-05-07 01:25:59 +00003007 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003008 ThrowConvertException(OptionError,"MissingArgument",option);
3009 break;
3010 }
3011 if (LocaleCompare("transparent-color",option+1) == 0)
3012 {
3013 if (*option == '+')
3014 break;
3015 i++;
cristye81f5522014-05-07 01:25:59 +00003016 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003017 ThrowConvertException(OptionError,"MissingArgument",option);
3018 break;
3019 }
3020 if (LocaleCompare("transpose",option+1) == 0)
3021 break;
3022 if (LocaleCompare("transverse",option+1) == 0)
3023 break;
3024 if (LocaleCompare("treedepth",option+1) == 0)
3025 {
3026 if (*option == '+')
3027 break;
3028 i++;
cristye81f5522014-05-07 01:25:59 +00003029 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003030 ThrowConvertException(OptionError,"MissingArgument",option);
3031 if (IsGeometry(argv[i]) == MagickFalse)
3032 ThrowConvertInvalidArgumentException(option,argv[i]);
3033 break;
3034 }
3035 if (LocaleCompare("trim",option+1) == 0)
3036 break;
3037 if (LocaleCompare("type",option+1) == 0)
3038 {
cristybb503372010-05-27 20:51:26 +00003039 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00003040 type;
3041
3042 if (*option == '+')
3043 break;
3044 i++;
cristye81f5522014-05-07 01:25:59 +00003045 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003046 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00003047 type=ParseCommandOption(MagickTypeOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00003048 if (type < 0)
3049 ThrowConvertException(OptionError,"UnrecognizedImageType",
3050 argv[i]);
3051 break;
3052 }
3053 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3054 }
3055 case 'u':
3056 {
3057 if (LocaleCompare("undercolor",option+1) == 0)
3058 {
3059 if (*option == '+')
3060 break;
3061 i++;
cristye81f5522014-05-07 01:25:59 +00003062 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003063 ThrowConvertException(OptionError,"MissingArgument",option);
3064 break;
3065 }
3066 if (LocaleCompare("unique-colors",option+1) == 0)
3067 break;
3068 if (LocaleCompare("units",option+1) == 0)
3069 {
cristybb503372010-05-27 20:51:26 +00003070 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00003071 units;
3072
3073 if (*option == '+')
3074 break;
3075 i++;
cristye81f5522014-05-07 01:25:59 +00003076 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003077 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00003078 units=ParseCommandOption(MagickResolutionOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00003079 argv[i]);
3080 if (units < 0)
3081 ThrowConvertException(OptionError,"UnrecognizedUnitsType",
3082 argv[i]);
3083 break;
3084 }
3085 if (LocaleCompare("unsharp",option+1) == 0)
3086 {
3087 if (*option == '+')
3088 break;
3089 i++;
cristye81f5522014-05-07 01:25:59 +00003090 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003091 ThrowConvertException(OptionError,"MissingArgument",option);
3092 if (IsGeometry(argv[i]) == MagickFalse)
3093 ThrowConvertInvalidArgumentException(option,argv[i]);
3094 break;
3095 }
3096 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3097 }
3098 case 'v':
3099 {
3100 if (LocaleCompare("verbose",option+1) == 0)
3101 break;
3102 if ((LocaleCompare("version",option+1) == 0) ||
3103 (LocaleCompare("-version",option+1) == 0))
3104 {
cristy4f7a6132012-12-23 00:35:19 +00003105 ListMagickVersion(stdout);
cristy3ed852e2009-09-05 21:47:34 +00003106 break;
3107 }
3108 if (LocaleCompare("view",option+1) == 0)
3109 {
3110 if (*option == '+')
3111 break;
3112 i++;
cristye81f5522014-05-07 01:25:59 +00003113 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003114 ThrowConvertException(OptionError,"MissingArgument",option);
3115 break;
3116 }
3117 if (LocaleCompare("vignette",option+1) == 0)
3118 {
3119 if (*option == '+')
3120 break;
3121 i++;
cristye81f5522014-05-07 01:25:59 +00003122 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003123 ThrowConvertException(OptionError,"MissingArgument",option);
3124 if (IsGeometry(argv[i]) == MagickFalse)
3125 ThrowConvertInvalidArgumentException(option,argv[i]);
3126 break;
3127 }
3128 if (LocaleCompare("virtual-pixel",option+1) == 0)
3129 {
cristybb503372010-05-27 20:51:26 +00003130 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00003131 method;
3132
3133 if (*option == '+')
3134 break;
3135 i++;
cristye81f5522014-05-07 01:25:59 +00003136 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003137 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00003138 method=ParseCommandOption(MagickVirtualPixelOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00003139 argv[i]);
3140 if (method < 0)
3141 ThrowConvertException(OptionError,
3142 "UnrecognizedVirtualPixelMethod",argv[i]);
3143 break;
3144 }
3145 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3146 }
3147 case 'w':
3148 {
3149 if (LocaleCompare("wave",option+1) == 0)
3150 {
3151 i++;
cristye81f5522014-05-07 01:25:59 +00003152 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003153 ThrowConvertException(OptionError,"MissingArgument",option);
3154 if (IsGeometry(argv[i]) == MagickFalse)
3155 ThrowConvertInvalidArgumentException(option,argv[i]);
3156 break;
3157 }
3158 if (LocaleCompare("weight",option+1) == 0)
3159 {
3160 if (*option == '+')
3161 break;
3162 i++;
cristye81f5522014-05-07 01:25:59 +00003163 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003164 ThrowConvertException(OptionError,"MissingArgument",option);
3165 break;
3166 }
3167 if (LocaleCompare("white-point",option+1) == 0)
3168 {
3169 if (*option == '+')
3170 break;
3171 i++;
cristye81f5522014-05-07 01:25:59 +00003172 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003173 ThrowConvertException(OptionError,"MissingArgument",option);
3174 if (IsGeometry(argv[i]) == MagickFalse)
3175 ThrowConvertInvalidArgumentException(option,argv[i]);
3176 break;
3177 }
3178 if (LocaleCompare("white-threshold",option+1) == 0)
3179 {
3180 if (*option == '+')
3181 break;
3182 i++;
cristye81f5522014-05-07 01:25:59 +00003183 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003184 ThrowConvertException(OptionError,"MissingArgument",option);
3185 if (IsGeometry(argv[i]) == MagickFalse)
3186 ThrowConvertInvalidArgumentException(option,argv[i]);
3187 break;
3188 }
3189 if (LocaleCompare("write",option+1) == 0)
3190 {
3191 i++;
cristye81f5522014-05-07 01:25:59 +00003192 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003193 ThrowConvertException(OptionError,"MissingArgument",option);
3194 break;
3195 }
3196 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3197 }
3198 case '?':
3199 break;
3200 default:
3201 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3202 }
cristy042ee782011-04-22 18:48:30 +00003203 fire=(GetCommandOptionFlags(MagickCommandOptions,MagickFalse,option) &
3204 FireOptionFlag) == 0 ? MagickFalse : MagickTrue;
cristy3ed852e2009-09-05 21:47:34 +00003205 if (fire != MagickFalse)
3206 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
3207 }
3208 if (k != 0)
3209 ThrowConvertException(OptionError,"UnbalancedParenthesis",argv[i]);
cristybb503372010-05-27 20:51:26 +00003210 if (i-- != (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00003211 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
cristy3ed852e2009-09-05 21:47:34 +00003212 FinalizeImageSettings(image_info,image,MagickTrue);
cristy94f20072009-09-12 02:12:36 +00003213 if (image == (Image *) NULL)
anthonye5b39652012-04-21 05:37:29 +00003214 ThrowConvertException(OptionError,"NoImagesDefined",argv[argc-1]);
3215 if (IsCommandOption(argv[argc-1]))
3216 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
3217 if (LocaleCompare(" ",argv[argc-1])==0) /* common line continuation error */
cristy94f20072009-09-12 02:12:36 +00003218 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
cristy3ed852e2009-09-05 21:47:34 +00003219 status&=WriteImages(image_info,image,argv[argc-1],exception);
3220 if (metadata != (char **) NULL)
3221 {
3222 char
3223 *text;
3224
cristy018f07f2011-09-04 21:15:19 +00003225 text=InterpretImageProperties(image_info,image,format,exception);
cristy3ed852e2009-09-05 21:47:34 +00003226 if (text == (char *) NULL)
3227 ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
3228 GetExceptionMessage(errno));
3229 (void) ConcatenateString(&(*metadata),text);
3230 text=DestroyString(text);
3231 }
3232 DestroyConvert();
3233 return(status != 0 ? MagickTrue : MagickFalse);
3234}