blob: 0384d68d8a7efbfe3909cb0b0e33e6c783c6b377 [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",
cristy2a0cfbe2015-06-22 23:53:25 +0000332 "-copy geometry offset",
333 " copy pixels from one area of an image to another",
cristy3ed852e2009-09-05 21:47:34 +0000334 "-crop geometry cut out a rectangular region of the image",
335 "-deconstruct break down an image sequence into constituent parts",
cristyd18ae7c2010-03-07 17:39:52 +0000336 "-evaluate-sequence operator",
337 " evaluate an arithmetic, relational, or logical expression",
cristy3ed852e2009-09-05 21:47:34 +0000338 "-flatten flatten a sequence of images",
339 "-fx expression apply mathematical expression to an image channel(s)",
340 "-hald-clut apply a Hald color lookup table to the image",
cristye0b9b8f2013-03-28 12:39:39 +0000341 "-layers method optimize, merge, or compare image layers",
cristy3ed852e2009-09-05 21:47:34 +0000342 "-morph value morph an image sequence",
343 "-mosaic create a mosaic from an image sequence",
cristy8cdfb342012-11-11 21:44:36 +0000344 "-poly terms build a polynomial from the image sequence and the corresponding",
cristydbc2da92012-11-12 13:16:07 +0000345 " terms (coefficients and degree pairs).",
cristy36b94822010-05-20 12:48:16 +0000346 "-print string interpret string and print to console",
cristy3ed852e2009-09-05 21:47:34 +0000347 "-process arguments process the image with a custom image filter",
cristy4285d782011-02-09 20:12:28 +0000348 "-smush geometry smush an image sequence together",
cristy3ed852e2009-09-05 21:47:34 +0000349 "-write filename write images to this file",
350 (char *) NULL
351 },
352 *settings[]=
353 {
354 "-adjoin join images into a single multi-image file",
355 "-affine matrix affine transform matrix",
356 "-alpha option activate, deactivate, reset, or set the alpha channel",
357 "-antialias remove pixel-aliasing",
358 "-authenticate password",
359 " decipher image with this password",
360 "-attenuate value lessen (or intensify) when adding noise to an image",
361 "-background color background color",
362 "-bias value add bias when convolving an image",
363 "-black-point-compensation",
364 " use black point compensation",
365 "-blue-primary point chromaticity blue primary point",
366 "-bordercolor color border color",
367 "-caption string assign a caption to an image",
cristy1e618102013-03-17 14:52:31 +0000368 "-clip clip along the first path from the 8BIM profile",
369 "-clip-mask filename associate a clip mask with the image",
370 "-clip-path id clip along a named path from the 8BIM profile",
cristy3ed852e2009-09-05 21:47:34 +0000371 "-colors value preferred number of colors in the image",
372 "-colorspace type alternate image colorspace",
373 "-comment string annotate image with comment",
374 "-compose operator set image composite operator",
375 "-compress type type of pixel compression when writing the image",
376 "-define format:option",
377 " define one or more image format options",
378 "-delay value display the next image after pausing",
379 "-density geometry horizontal and vertical density of the image",
380 "-depth value image depth",
cristyc9b12952010-03-28 01:12:28 +0000381 "-direction type render text right-to-left or left-to-right",
cristy3ed852e2009-09-05 21:47:34 +0000382 "-display server get image or font from this X server",
383 "-dispose method layer disposal method",
384 "-dither method apply error diffusion to image",
385 "-encoding type text encoding type",
386 "-endian type endianness (MSB or LSB) of the image",
387 "-family name render text with this font family",
cristy14154222012-06-15 23:21:49 +0000388 "-features distance analyze image features (e.g. contrast, correlation)",
cristy3ed852e2009-09-05 21:47:34 +0000389 "-fill color color to use when filling a graphic primitive",
390 "-filter type use this filter when resizing an image",
391 "-font name render text with this font",
392 "-format \"string\" output formatted image characteristics",
393 "-fuzz distance colors within this distance are considered equal",
394 "-gravity type horizontal and vertical text placement",
395 "-green-primary point chromaticity green primary point",
cristy70e9f682013-03-12 22:31:22 +0000396 "-intensity method method to generate an intensity value from a pixel",
cristy3ed852e2009-09-05 21:47:34 +0000397 "-intent type type of rendering intent when managing the image color",
398 "-interlace type type of image interlacing scheme",
cristyb32b90a2009-09-07 21:45:48 +0000399 "-interline-spacing value",
400 " set the space between two text lines",
cristy3ed852e2009-09-05 21:47:34 +0000401 "-interpolate method pixel color interpolation method",
402 "-interword-spacing value",
403 " set the space between two words",
404 "-kerning value set the space between two letters",
405 "-label string assign a label to an image",
406 "-limit type value pixel cache resource limit",
407 "-loop iterations add Netscape loop extension to your GIF animation",
cristye9252c22013-07-30 15:43:21 +0000408 "-matte store matte channel if the image has one",
cristy3ed852e2009-09-05 21:47:34 +0000409 "-mattecolor color frame color",
cristy80b1dee2014-01-09 11:27:24 +0000410 "-moments report image moments",
cristy3ed852e2009-09-05 21:47:34 +0000411 "-monitor monitor progress",
412 "-orient type image orientation",
413 "-page geometry size and location of an image canvas (setting)",
414 "-ping efficiently determine image attributes",
415 "-pointsize value font point size",
cristy7c1b9fd2010-02-02 14:36:00 +0000416 "-precision value maximum number of significant digits to print",
cristy3ed852e2009-09-05 21:47:34 +0000417 "-preview type image preview type",
418 "-quality value JPEG/MIFF/PNG compression level",
419 "-quiet suppress all warning messages",
cristy327030c2015-07-25 18:05:50 +0000420 "-read-mask filename associate a read mask with the image",
cristy3ed852e2009-09-05 21:47:34 +0000421 "-red-primary point chromaticity red primary point",
422 "-regard-warnings pay attention to warning messages",
423 "-remap filename transform image colors to match this set of colors",
424 "-respect-parentheses settings remain in effect until parenthesis boundary",
425 "-sampling-factor geometry",
426 " horizontal and vertical sampling factor",
427 "-scene value image scene number",
428 "-seed value seed a new sequence of pseudo-random numbers",
429 "-size geometry width and height of image",
430 "-stretch type render text with this font stretch",
431 "-stroke color graphic primitive stroke color",
432 "-strokewidth value graphic primitive stroke width",
433 "-style type render text with this font style",
cristye9252c22013-07-30 15:43:21 +0000434 "-support factor resize support: > 1.0 is blurry, < 1.0 is sharp",
cristyd9a29192010-10-16 16:49:53 +0000435 "-synchronize synchronize image to storage device",
436 "-taint declare the image as modified",
cristy3ed852e2009-09-05 21:47:34 +0000437 "-texture filename name of texture to tile onto the image background",
438 "-tile-offset geometry",
439 " tile offset",
440 "-treedepth value color tree depth",
441 "-transparent-color color",
442 " transparent color",
443 "-undercolor color annotation bounding box color",
444 "-units type the units of image resolution",
445 "-verbose print detailed information about the image",
446 "-view FlashPix viewing transforms",
447 "-virtual-pixel method",
448 " virtual pixel access method",
449 "-weight type render text with this font weight",
450 "-white-point point chromaticity white point",
cristy327030c2015-07-25 18:05:50 +0000451 "-write-mask filename associate a write mask with the image",
cristy3ed852e2009-09-05 21:47:34 +0000452 (char *) NULL
453 },
454 *stack_operators[]=
455 {
anthonyb69c4b32011-03-23 04:37:44 +0000456 "-clone indexes clone an image",
457 "-delete indexes delete the image from the image sequence",
458 "-duplicate count,indexes",
cristy5d28d482011-03-20 21:59:40 +0000459 " duplicate an image one or more times",
cristy3ed852e2009-09-05 21:47:34 +0000460 "-insert index insert last image into the image sequence",
anthony9bd15492011-03-23 02:11:13 +0000461 "-reverse reverse image sequence",
cristy3ed852e2009-09-05 21:47:34 +0000462 "-swap indexes swap two images in the image sequence",
463 (char *) NULL
464 };
465
466 const char
467 **p;
468
cristy4f7a6132012-12-23 00:35:19 +0000469 ListMagickVersion(stdout);
cristy3ed852e2009-09-05 21:47:34 +0000470 (void) printf("Usage: %s [options ...] file [ [options ...] "
471 "file ...] [options ...] file\n",GetClientName());
472 (void) printf("\nImage Settings:\n");
473 for (p=settings; *p != (char *) NULL; p++)
474 (void) printf(" %s\n",*p);
475 (void) printf("\nImage Operators:\n");
476 for (p=operators; *p != (char *) NULL; p++)
477 (void) printf(" %s\n",*p);
cristy87c02f42012-02-24 00:19:10 +0000478 (void) printf("\nImage Channel Operators:\n");
479 for (p=channel_operators; *p != (char *) NULL; p++)
480 (void) printf(" %s\n",*p);
cristy3ed852e2009-09-05 21:47:34 +0000481 (void) printf("\nImage Sequence Operators:\n");
482 for (p=sequence_operators; *p != (char *) NULL; p++)
483 (void) printf(" %s\n",*p);
484 (void) printf("\nImage Stack Operators:\n");
485 for (p=stack_operators; *p != (char *) NULL; p++)
486 (void) printf(" %s\n",*p);
487 (void) printf("\nMiscellaneous Options:\n");
488 for (p=miscellaneous; *p != (char *) NULL; p++)
489 (void) printf(" %s\n",*p);
490 (void) printf(
anthonye5b39652012-04-21 05:37:29 +0000491 "\nBy default, the image format of 'file' is determined by its magic\n");
cristy3ed852e2009-09-05 21:47:34 +0000492 (void) printf(
493 "number. To specify a particular image format, precede the filename\n");
494 (void) printf(
495 "with an image format name and a colon (i.e. ps:image) or specify the\n");
496 (void) printf(
497 "image type as the filename suffix (i.e. image.ps). Specify 'file' as\n");
498 (void) printf("'-' for standard input or output.\n");
499 return(MagickFalse);
500}
501
502WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
503 int argc,char **argv,char **metadata,ExceptionInfo *exception)
504{
505#define NotInitialized (unsigned int) (~0)
506#define DestroyConvert() \
507{ \
508 DestroyImageStack(); \
cristybb503372010-05-27 20:51:26 +0000509 for (i=0; i < (ssize_t) argc; i++) \
cristy3ed852e2009-09-05 21:47:34 +0000510 argv[i]=DestroyString(argv[i]); \
511 argv=(char **) RelinquishMagickMemory(argv); \
512}
513#define ThrowConvertException(asperity,tag,option) \
514{ \
cristyefe601c2013-01-05 17:51:12 +0000515 (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
cristy3ed852e2009-09-05 21:47:34 +0000516 option); \
517 DestroyConvert(); \
518 return(MagickFalse); \
519}
520#define ThrowConvertInvalidArgumentException(option,argument) \
521{ \
522 (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
anthonye5b39652012-04-21 05:37:29 +0000523 "InvalidArgument","'%s': %s",option,argument); \
cristy3ed852e2009-09-05 21:47:34 +0000524 DestroyConvert(); \
525 return(MagickFalse); \
526}
527
528 char
529 *filename,
530 *option;
531
532 const char
533 *format;
534
535 Image
536 *image;
537
538 ImageStack
539 image_stack[MaxImageStackDepth+1];
540
cristy3ed852e2009-09-05 21:47:34 +0000541 MagickBooleanType
542 fire,
cristyebbcfea2011-02-25 02:43:54 +0000543 pend,
544 respect_parenthesis;
cristy3ed852e2009-09-05 21:47:34 +0000545
546 MagickStatusType
547 status;
548
cristybb503372010-05-27 20:51:26 +0000549 register ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000550 i;
551
cristy9d314ff2011-03-09 01:30:28 +0000552 ssize_t
553 j,
554 k;
555
cristy3ed852e2009-09-05 21:47:34 +0000556 /*
557 Set defaults.
558 */
559 assert(image_info != (ImageInfo *) NULL);
cristye1c94d92015-06-28 12:16:33 +0000560 assert(image_info->signature == MagickCoreSignature);
cristy3ed852e2009-09-05 21:47:34 +0000561 if (image_info->debug != MagickFalse)
562 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
563 assert(exception != (ExceptionInfo *) NULL);
564 if (argc == 2)
565 {
566 option=argv[1];
567 if ((LocaleCompare("version",option+1) == 0) ||
568 (LocaleCompare("-version",option+1) == 0))
569 {
cristy4f7a6132012-12-23 00:35:19 +0000570 ListMagickVersion(stdout);
cristy3ed852e2009-09-05 21:47:34 +0000571 return(MagickFalse);
572 }
573 }
574 if (argc < 3)
cristy13e61a12010-02-04 20:19:00 +0000575 return(ConvertUsage());
cristy3ed852e2009-09-05 21:47:34 +0000576 filename=(char *) NULL;
577 format="%w,%h,%m";
578 j=1;
579 k=0;
580 NewImageStack();
581 option=(char *) NULL;
582 pend=MagickFalse;
cristyebbcfea2011-02-25 02:43:54 +0000583 respect_parenthesis=MagickFalse;
cristy3ed852e2009-09-05 21:47:34 +0000584 status=MagickTrue;
585 /*
586 Parse command-line arguments.
587 */
588 ReadCommandlLine(argc,&argv);
589 status=ExpandFilenames(&argc,&argv);
590 if (status == MagickFalse)
591 ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
592 GetExceptionMessage(errno));
593 if ((argc > 2) && (LocaleCompare("-concatenate",argv[1]) == 0))
594 return(ConcatenateImages(argc,argv,exception));
cristybb503372010-05-27 20:51:26 +0000595 for (i=1; i < (ssize_t) (argc-1); i++)
cristy3ed852e2009-09-05 21:47:34 +0000596 {
597 option=argv[i];
598 if (LocaleCompare(option,"(") == 0)
599 {
600 FireImageStack(MagickTrue,MagickTrue,pend);
601 if (k == MaxImageStackDepth)
602 ThrowConvertException(OptionError,"ParenthesisNestedTooDeeply",
603 option);
604 PushImageStack();
605 continue;
606 }
607 if (LocaleCompare(option,")") == 0)
608 {
609 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
610 if (k == 0)
611 ThrowConvertException(OptionError,"UnableToParseExpression",option);
612 PopImageStack();
613 continue;
614 }
cristy042ee782011-04-22 18:48:30 +0000615 if (IsCommandOption(option) == MagickFalse)
cristy3ed852e2009-09-05 21:47:34 +0000616 {
617 Image
618 *images;
619
620 /*
621 Read input image.
622 */
623 FireImageStack(MagickTrue,MagickTrue,pend);
624 filename=argv[i];
cristycee97112010-05-28 00:44:52 +0000625 if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
cristy3ed852e2009-09-05 21:47:34 +0000626 filename=argv[++i];
cristy3ed852e2009-09-05 21:47:34 +0000627 if (image_info->ping != MagickFalse)
cristy1b58f252012-03-01 01:41:41 +0000628 images=PingImages(image_info,filename,exception);
cristy3ed852e2009-09-05 21:47:34 +0000629 else
cristy1b58f252012-03-01 01:41:41 +0000630 images=ReadImages(image_info,filename,exception);
cristy3ed852e2009-09-05 21:47:34 +0000631 status&=(images != (Image *) NULL) &&
632 (exception->severity < ErrorException);
633 if (images == (Image *) NULL)
634 continue;
635 AppendImageStack(images);
636 continue;
637 }
638 pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
639 switch (*(option+1))
640 {
641 case 'a':
642 {
643 if (LocaleCompare("adaptive-blur",option+1) == 0)
644 {
645 i++;
cristye81f5522014-05-07 01:25:59 +0000646 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000647 ThrowConvertException(OptionError,"MissingArgument",option);
648 if (IsGeometry(argv[i]) == MagickFalse)
649 ThrowConvertInvalidArgumentException(option,argv[i]);
650 break;
651 }
652 if (LocaleCompare("adaptive-resize",option+1) == 0)
653 {
654 i++;
cristye81f5522014-05-07 01:25:59 +0000655 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000656 ThrowConvertException(OptionError,"MissingArgument",option);
657 if (IsGeometry(argv[i]) == MagickFalse)
658 ThrowConvertInvalidArgumentException(option,argv[i]);
659 break;
660 }
661 if (LocaleCompare("adaptive-sharpen",option+1) == 0)
662 {
663 i++;
cristye81f5522014-05-07 01:25:59 +0000664 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000665 ThrowConvertException(OptionError,"MissingArgument",option);
666 if (IsGeometry(argv[i]) == MagickFalse)
667 ThrowConvertInvalidArgumentException(option,argv[i]);
668 break;
669 }
670 if (LocaleCompare("adjoin",option+1) == 0)
671 break;
672 if (LocaleCompare("affine",option+1) == 0)
673 {
674 if (*option == '+')
675 break;
676 i++;
cristye81f5522014-05-07 01:25:59 +0000677 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000678 ThrowConvertException(OptionError,"MissingArgument",option);
cristy8cdfb342012-11-11 21:44:36 +0000679 if (IsGeometry(argv[i]) == MagickFalse)
680 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000681 break;
682 }
683 if (LocaleCompare("alpha",option+1) == 0)
684 {
cristybb503372010-05-27 20:51:26 +0000685 ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000686 type;
687
688 if (*option == '+')
689 break;
690 i++;
cristybb503372010-05-27 20:51:26 +0000691 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000692 ThrowConvertException(OptionError,"MissingArgument",option);
cristy3476df82015-06-22 18:43:46 +0000693 type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,
694 argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000695 if (type < 0)
cristy3476df82015-06-22 18:43:46 +0000696 ThrowConvertException(OptionError,
697 "UnrecognizedAlphaChannelOption",argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000698 break;
699 }
700 if (LocaleCompare("annotate",option+1) == 0)
701 {
702 if (*option == '+')
703 break;
704 i++;
cristye81f5522014-05-07 01:25:59 +0000705 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000706 ThrowConvertException(OptionError,"MissingArgument",option);
707 if (IsGeometry(argv[i]) == MagickFalse)
708 ThrowConvertInvalidArgumentException(option,argv[i]);
709 i++;
cristye81f5522014-05-07 01:25:59 +0000710 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000711 ThrowConvertException(OptionError,"MissingArgument",option);
712 break;
713 }
714 if (LocaleCompare("antialias",option+1) == 0)
715 break;
716 if (LocaleCompare("append",option+1) == 0)
717 break;
718 if (LocaleCompare("attenuate",option+1) == 0)
719 {
720 if (*option == '+')
721 break;
722 i++;
cristye81f5522014-05-07 01:25:59 +0000723 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000724 ThrowConvertException(OptionError,"MissingArgument",option);
725 if (IsGeometry(argv[i]) == MagickFalse)
726 ThrowConvertInvalidArgumentException(option,argv[i]);
727 break;
728 }
729 if (LocaleCompare("authenticate",option+1) == 0)
730 {
731 if (*option == '+')
732 break;
733 i++;
cristye81f5522014-05-07 01:25:59 +0000734 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000735 ThrowConvertException(OptionError,"MissingArgument",option);
736 break;
737 }
738 if (LocaleCompare("auto-gamma",option+1) == 0)
739 break;
740 if (LocaleCompare("auto-level",option+1) == 0)
741 break;
742 if (LocaleCompare("auto-orient",option+1) == 0)
743 break;
cristy52ad9e92013-02-08 23:23:29 +0000744 if (LocaleCompare("average",option+1) == 0)
745 break;
cristy3ed852e2009-09-05 21:47:34 +0000746 ThrowConvertException(OptionError,"UnrecognizedOption",option)
747 }
748 case 'b':
749 {
750 if (LocaleCompare("background",option+1) == 0)
751 {
752 if (*option == '+')
753 break;
754 i++;
cristye81f5522014-05-07 01:25:59 +0000755 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000756 ThrowConvertException(OptionError,"MissingArgument",option);
757 break;
758 }
759 if (LocaleCompare("bench",option+1) == 0)
760 {
761 if (*option == '+')
762 break;
763 i++;
cristye81f5522014-05-07 01:25:59 +0000764 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000765 ThrowConvertException(OptionError,"MissingArgument",option);
766 if (IsGeometry(argv[i]) == MagickFalse)
767 ThrowConvertInvalidArgumentException(option,argv[i]);
768 break;
769 }
770 if (LocaleCompare("bias",option+1) == 0)
771 {
772 if (*option == '+')
773 break;
774 i++;
cristye81f5522014-05-07 01:25:59 +0000775 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000776 ThrowConvertException(OptionError,"MissingArgument",option);
777 if (IsGeometry(argv[i]) == MagickFalse)
778 ThrowConvertInvalidArgumentException(option,argv[i]);
779 break;
780 }
781 if (LocaleCompare("black-point-compensation",option+1) == 0)
782 break;
783 if (LocaleCompare("black-threshold",option+1) == 0)
784 {
785 if (*option == '+')
786 break;
787 i++;
cristye81f5522014-05-07 01:25:59 +0000788 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000789 ThrowConvertException(OptionError,"MissingArgument",option);
790 if (IsGeometry(argv[i]) == MagickFalse)
791 ThrowConvertInvalidArgumentException(option,argv[i]);
792 break;
793 }
794 if (LocaleCompare("blue-primary",option+1) == 0)
795 {
796 if (*option == '+')
797 break;
798 i++;
cristye81f5522014-05-07 01:25:59 +0000799 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000800 ThrowConvertException(OptionError,"MissingArgument",option);
801 if (IsGeometry(argv[i]) == MagickFalse)
802 ThrowConvertInvalidArgumentException(option,argv[i]);
803 break;
804 }
805 if (LocaleCompare("blue-shift",option+1) == 0)
806 {
807 if (*option == '+')
808 break;
809 i++;
cristye81f5522014-05-07 01:25:59 +0000810 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000811 ThrowConvertException(OptionError,"MissingArgument",option);
812 if (IsGeometry(argv[i]) == MagickFalse)
813 ThrowConvertInvalidArgumentException(option,argv[i]);
814 break;
815 }
816 if (LocaleCompare("blur",option+1) == 0)
817 {
818 if (*option == '+')
819 break;
820 i++;
cristye81f5522014-05-07 01:25:59 +0000821 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000822 ThrowConvertException(OptionError,"MissingArgument",option);
823 if (IsGeometry(argv[i]) == MagickFalse)
824 ThrowConvertInvalidArgumentException(option,argv[i]);
825 break;
826 }
827 if (LocaleCompare("border",option+1) == 0)
828 {
829 if (*option == '+')
830 break;
831 i++;
cristye81f5522014-05-07 01:25:59 +0000832 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000833 ThrowConvertException(OptionError,"MissingArgument",option);
834 if (IsGeometry(argv[i]) == MagickFalse)
835 ThrowConvertInvalidArgumentException(option,argv[i]);
836 break;
837 }
838 if (LocaleCompare("bordercolor",option+1) == 0)
839 {
840 if (*option == '+')
841 break;
842 i++;
cristye81f5522014-05-07 01:25:59 +0000843 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000844 ThrowConvertException(OptionError,"MissingArgument",option);
845 break;
846 }
847 if (LocaleCompare("box",option+1) == 0)
848 {
849 if (*option == '+')
850 break;
851 i++;
cristye81f5522014-05-07 01:25:59 +0000852 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000853 ThrowConvertException(OptionError,"MissingArgument",option);
854 break;
855 }
cristya28d6b82010-01-11 20:03:47 +0000856 if (LocaleCompare("brightness-contrast",option+1) == 0)
857 {
858 i++;
cristye81f5522014-05-07 01:25:59 +0000859 if (i == (ssize_t) argc)
cristya28d6b82010-01-11 20:03:47 +0000860 ThrowConvertException(OptionError,"MissingArgument",option);
861 if (IsGeometry(argv[i]) == MagickFalse)
862 ThrowConvertInvalidArgumentException(option,argv[i]);
863 break;
864 }
cristy3ed852e2009-09-05 21:47:34 +0000865 ThrowConvertException(OptionError,"UnrecognizedOption",option)
866 }
867 case 'c':
868 {
869 if (LocaleCompare("cache",option+1) == 0)
870 {
871 if (*option == '+')
872 break;
873 i++;
cristye81f5522014-05-07 01:25:59 +0000874 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000875 ThrowConvertException(OptionError,"MissingArgument",option);
876 if (IsGeometry(argv[i]) == MagickFalse)
877 ThrowConvertInvalidArgumentException(option,argv[i]);
878 break;
879 }
cristy4ceadb82014-03-29 15:30:43 +0000880 if (LocaleCompare("canny",option+1) == 0)
881 {
882 if (*option == '+')
883 break;
884 i++;
cristye81f5522014-05-07 01:25:59 +0000885 if (i == (ssize_t) argc)
cristy4ceadb82014-03-29 15:30:43 +0000886 ThrowConvertException(OptionError,"MissingArgument",option);
887 if (IsGeometry(argv[i]) == MagickFalse)
888 ThrowConvertInvalidArgumentException(option,argv[i]);
889 break;
890 }
cristy3ed852e2009-09-05 21:47:34 +0000891 if (LocaleCompare("caption",option+1) == 0)
892 {
893 if (*option == '+')
894 break;
895 i++;
cristybb503372010-05-27 20:51:26 +0000896 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000897 ThrowConvertException(OptionError,"MissingArgument",option);
898 break;
899 }
900 if (LocaleCompare("cdl",option+1) == 0)
901 {
902 if (*option == '+')
903 break;
904 i++;
cristye81f5522014-05-07 01:25:59 +0000905 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000906 ThrowConvertException(OptionError,"MissingArgument",option);
907 break;
908 }
909 if (LocaleCompare("channel",option+1) == 0)
910 {
cristybb503372010-05-27 20:51:26 +0000911 ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000912 channel;
913
914 if (*option == '+')
915 break;
916 i++;
cristye81f5522014-05-07 01:25:59 +0000917 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000918 ThrowConvertException(OptionError,"MissingArgument",option);
919 channel=ParseChannelOption(argv[i]);
920 if (channel < 0)
921 ThrowConvertException(OptionError,"UnrecognizedChannelType",
922 argv[i]);
923 break;
924 }
cristy5f257b22012-03-07 00:27:29 +0000925 if (LocaleCompare("channel-fx",option+1) == 0)
cristy87c02f42012-02-24 00:19:10 +0000926 {
927 ssize_t
928 channel;
929
930 if (*option == '+')
931 break;
932 i++;
cristye81f5522014-05-07 01:25:59 +0000933 if (i == (ssize_t) argc)
cristy87c02f42012-02-24 00:19:10 +0000934 ThrowConvertException(OptionError,"MissingArgument",option);
cristy953c4bd2012-02-24 01:04:04 +0000935 channel=ParsePixelChannelOption(argv[i]);
cristy87c02f42012-02-24 00:19:10 +0000936 if (channel < 0)
937 ThrowConvertException(OptionError,"UnrecognizedChannelType",
938 argv[i]);
939 break;
940 }
cristy3ed852e2009-09-05 21:47:34 +0000941 if (LocaleCompare("charcoal",option+1) == 0)
942 {
943 if (*option == '+')
944 break;
945 i++;
cristye81f5522014-05-07 01:25:59 +0000946 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000947 ThrowConvertException(OptionError,"MissingArgument",option);
948 if (IsGeometry(argv[i]) == MagickFalse)
949 ThrowConvertInvalidArgumentException(option,argv[i]);
950 break;
951 }
952 if (LocaleCompare("chop",option+1) == 0)
953 {
954 if (*option == '+')
955 break;
956 i++;
cristye81f5522014-05-07 01:25:59 +0000957 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000958 ThrowConvertException(OptionError,"MissingArgument",option);
959 if (IsGeometry(argv[i]) == MagickFalse)
960 ThrowConvertInvalidArgumentException(option,argv[i]);
961 break;
962 }
cristy1eb45dd2009-09-25 16:38:06 +0000963 if (LocaleCompare("clamp",option+1) == 0)
964 break;
cristy3ed852e2009-09-05 21:47:34 +0000965 if (LocaleCompare("clip",option+1) == 0)
966 break;
967 if (LocaleCompare("clip-mask",option+1) == 0)
968 {
969 if (*option == '+')
970 break;
971 i++;
cristye81f5522014-05-07 01:25:59 +0000972 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000973 ThrowConvertException(OptionError,"MissingArgument",option);
974 break;
975 }
976 if (LocaleCompare("clip-path",option+1) == 0)
977 {
978 i++;
cristye81f5522014-05-07 01:25:59 +0000979 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000980 ThrowConvertException(OptionError,"MissingArgument",option);
981 break;
982 }
983 if (LocaleCompare("clone",option+1) == 0)
984 {
985 Image
cristy9a883692015-01-14 00:55:37 +0000986 *clone_images,
987 *clone_list;
988
989 clone_list=CloneImageList(image,exception);
cristy3ed852e2009-09-05 21:47:34 +0000990 if (k != 0)
cristy9a883692015-01-14 00:55:37 +0000991 clone_list=CloneImageList(image_stack[k-1].image,exception);
992 if (clone_list == (Image *) NULL)
993 ThrowConvertException(ImageError,"ImageSequenceRequired",option);
cristy3ed852e2009-09-05 21:47:34 +0000994 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
995 if (*option == '+')
cristy9a883692015-01-14 00:55:37 +0000996 clone_images=CloneImages(clone_list,"-1",exception);
cristy3ed852e2009-09-05 21:47:34 +0000997 else
cristy9a883692015-01-14 00:55:37 +0000998 {
cristy3ed852e2009-09-05 21:47:34 +0000999 i++;
cristye81f5522014-05-07 01:25:59 +00001000 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001001 ThrowConvertException(OptionError,"MissingArgument",option);
1002 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
1003 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy9a883692015-01-14 00:55:37 +00001004 clone_images=CloneImages(clone_list,argv[i],exception);
cristy3ed852e2009-09-05 21:47:34 +00001005 }
1006 if (clone_images == (Image *) NULL)
1007 ThrowConvertException(OptionError,"NoSuchImage",option);
1008 AppendImageStack(clone_images);
cristy9a883692015-01-14 00:55:37 +00001009 clone_list=DestroyImageList(clone_list);
cristy3ed852e2009-09-05 21:47:34 +00001010 break;
1011 }
1012 if (LocaleCompare("clut",option+1) == 0)
1013 break;
1014 if (LocaleCompare("coalesce",option+1) == 0)
1015 break;
1016 if (LocaleCompare("colorize",option+1) == 0)
1017 {
1018 if (*option == '+')
1019 break;
1020 i++;
cristye81f5522014-05-07 01:25:59 +00001021 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001022 ThrowConvertException(OptionError,"MissingArgument",option);
1023 if (IsGeometry(argv[i]) == MagickFalse)
1024 ThrowConvertInvalidArgumentException(option,argv[i]);
1025 break;
1026 }
cristye6365592010-04-02 17:31:23 +00001027 if (LocaleCompare("color-matrix",option+1) == 0)
1028 {
cristyb6bd4ad2010-08-08 01:12:27 +00001029 KernelInfo
1030 *kernel_info;
1031
cristye6365592010-04-02 17:31:23 +00001032 if (*option == '+')
1033 break;
1034 i++;
cristye81f5522014-05-07 01:25:59 +00001035 if (i == (ssize_t) argc)
cristye6365592010-04-02 17:31:23 +00001036 ThrowConvertException(OptionError,"MissingArgument",option);
cristy2c57b742014-10-31 00:40:34 +00001037 kernel_info=AcquireKernelInfo(argv[i],exception);
cristyb6bd4ad2010-08-08 01:12:27 +00001038 if (kernel_info == (KernelInfo *) NULL)
cristye6365592010-04-02 17:31:23 +00001039 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00001040 kernel_info=DestroyKernelInfo(kernel_info);
cristye6365592010-04-02 17:31:23 +00001041 break;
1042 }
cristy3ed852e2009-09-05 21:47:34 +00001043 if (LocaleCompare("colors",option+1) == 0)
1044 {
1045 if (*option == '+')
1046 break;
1047 i++;
cristye81f5522014-05-07 01:25:59 +00001048 if ((i == (ssize_t) argc) ||
cristy3ed852e2009-09-05 21:47:34 +00001049 (IsGeometry(argv[i]) == MagickFalse))
1050 ThrowConvertException(OptionError,"MissingArgument",option);
1051 break;
1052 }
1053 if (LocaleCompare("colorspace",option+1) == 0)
1054 {
cristybb503372010-05-27 20:51:26 +00001055 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001056 colorspace;
1057
1058 if (*option == '+')
1059 break;
1060 i++;
cristye81f5522014-05-07 01:25:59 +00001061 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001062 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001063 colorspace=ParseCommandOption(MagickColorspaceOptions,
cristy3ed852e2009-09-05 21:47:34 +00001064 MagickFalse,argv[i]);
1065 if (colorspace < 0)
1066 ThrowConvertException(OptionError,"UnrecognizedColorspace",
1067 argv[i]);
1068 break;
1069 }
1070 if (LocaleCompare("combine",option+1) == 0)
1071 break;
1072 if (LocaleCompare("comment",option+1) == 0)
1073 {
1074 if (*option == '+')
1075 break;
1076 i++;
cristybb503372010-05-27 20:51:26 +00001077 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001078 ThrowConvertException(OptionError,"MissingArgument",option);
1079 break;
1080 }
cristyb92495a2013-08-20 00:10:59 +00001081 if (LocaleCompare("compare",option+1) == 0)
1082 break;
cristy790190d2013-10-04 00:51:51 +00001083 if (LocaleCompare("complex",option+1) == 0)
1084 {
1085 ssize_t
cristy6398ec72013-11-28 02:00:27 +00001086 op;
cristy790190d2013-10-04 00:51:51 +00001087
1088 if (*option == '+')
1089 break;
1090 i++;
1091 if (i == (ssize_t) argc)
1092 ThrowConvertException(OptionError,"MissingArgument",option);
cristy6398ec72013-11-28 02:00:27 +00001093 op=ParseCommandOption(MagickComplexOptions,MagickFalse,argv[i]);
1094 if (op < 0)
cristy790190d2013-10-04 00:51:51 +00001095 ThrowConvertException(OptionError,"UnrecognizedComplexOperator",
1096 argv[i]);
1097 break;
1098 }
cristy3ed852e2009-09-05 21:47:34 +00001099 if (LocaleCompare("compose",option+1) == 0)
1100 {
cristybb503372010-05-27 20:51:26 +00001101 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001102 compose;
1103
1104 if (*option == '+')
1105 break;
1106 i++;
cristybb503372010-05-27 20:51:26 +00001107 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001108 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001109 compose=ParseCommandOption(MagickComposeOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001110 argv[i]);
1111 if (compose < 0)
1112 ThrowConvertException(OptionError,"UnrecognizedComposeOperator",
1113 argv[i]);
1114 break;
1115 }
1116 if (LocaleCompare("composite",option+1) == 0)
1117 break;
1118 if (LocaleCompare("compress",option+1) == 0)
1119 {
cristybb503372010-05-27 20:51:26 +00001120 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001121 compress;
1122
1123 if (*option == '+')
1124 break;
1125 i++;
cristye81f5522014-05-07 01:25:59 +00001126 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001127 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001128 compress=ParseCommandOption(MagickCompressOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001129 argv[i]);
1130 if (compress < 0)
1131 ThrowConvertException(OptionError,"UnrecognizedImageCompression",
1132 argv[i]);
1133 break;
1134 }
cristy22879752009-10-25 23:55:40 +00001135 if (LocaleCompare("concurrent",option+1) == 0)
1136 break;
cristy6e0b3bc2014-10-19 17:51:42 +00001137 if (LocaleCompare("connected-component",option+1) == 0)
1138 {
1139 i++;
1140 if (i == (ssize_t) argc)
1141 ThrowConvertException(OptionError,"MissingArgument",option);
1142 if (IsGeometry(argv[i]) == MagickFalse)
1143 ThrowConvertInvalidArgumentException(option,argv[i]);
1144 break;
1145 }
cristy3ed852e2009-09-05 21:47:34 +00001146 if (LocaleCompare("contrast",option+1) == 0)
1147 break;
1148 if (LocaleCompare("contrast-stretch",option+1) == 0)
1149 {
1150 i++;
cristye81f5522014-05-07 01:25:59 +00001151 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001152 ThrowConvertException(OptionError,"MissingArgument",option);
1153 if (IsGeometry(argv[i]) == MagickFalse)
1154 ThrowConvertInvalidArgumentException(option,argv[i]);
1155 break;
1156 }
1157 if (LocaleCompare("convolve",option+1) == 0)
1158 {
cristyb6bd4ad2010-08-08 01:12:27 +00001159 KernelInfo
1160 *kernel_info;
1161
cristy3ed852e2009-09-05 21:47:34 +00001162 if (*option == '+')
1163 break;
1164 i++;
cristye81f5522014-05-07 01:25:59 +00001165 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001166 ThrowConvertException(OptionError,"MissingArgument",option);
cristy2c57b742014-10-31 00:40:34 +00001167 kernel_info=AcquireKernelInfo(argv[i],exception);
cristyb6bd4ad2010-08-08 01:12:27 +00001168 if (kernel_info == (KernelInfo *) NULL)
cristy3ed852e2009-09-05 21:47:34 +00001169 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00001170 kernel_info=DestroyKernelInfo(kernel_info);
cristy3ed852e2009-09-05 21:47:34 +00001171 break;
1172 }
cristy3476df82015-06-22 18:43:46 +00001173 if (LocaleCompare("copy",option+1) == 0)
1174 {
1175 if (*option == '+')
1176 break;
1177 i++;
1178 if (i == (ssize_t) argc)
1179 ThrowConvertException(OptionError,"MissingArgument",option);
1180 if (IsGeometry(argv[i]) == MagickFalse)
1181 ThrowConvertInvalidArgumentException(option,argv[i]);
1182 i++;
1183 if (i == (ssize_t) argc)
1184 ThrowConvertException(OptionError,"MissingArgument",option);
1185 if (IsGeometry(argv[i]) == MagickFalse)
1186 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy3476df82015-06-22 18:43:46 +00001187 break;
1188 }
cristy3ed852e2009-09-05 21:47:34 +00001189 if (LocaleCompare("crop",option+1) == 0)
1190 {
1191 if (*option == '+')
1192 break;
1193 i++;
cristye81f5522014-05-07 01:25:59 +00001194 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001195 ThrowConvertException(OptionError,"MissingArgument",option);
1196 if (IsGeometry(argv[i]) == MagickFalse)
1197 ThrowConvertInvalidArgumentException(option,argv[i]);
1198 break;
1199 }
1200 if (LocaleCompare("cycle",option+1) == 0)
1201 {
1202 if (*option == '+')
1203 break;
1204 i++;
cristye81f5522014-05-07 01:25:59 +00001205 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001206 ThrowConvertException(OptionError,"MissingArgument",option);
1207 if (IsGeometry(argv[i]) == MagickFalse)
1208 ThrowConvertInvalidArgumentException(option,argv[i]);
1209 break;
1210 }
1211 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1212 }
1213 case 'd':
1214 {
1215 if (LocaleCompare("decipher",option+1) == 0)
1216 {
1217 if (*option == '+')
1218 break;
1219 i++;
cristye81f5522014-05-07 01:25:59 +00001220 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001221 ThrowConvertException(OptionError,"MissingArgument",option);
1222 break;
1223 }
1224 if (LocaleCompare("deconstruct",option+1) == 0)
1225 break;
1226 if (LocaleCompare("debug",option+1) == 0)
1227 {
cristybb503372010-05-27 20:51:26 +00001228 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001229 event;
1230
1231 if (*option == '+')
1232 break;
1233 i++;
cristybb503372010-05-27 20:51:26 +00001234 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001235 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001236 event=ParseCommandOption(MagickLogEventOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001237 if (event < 0)
1238 ThrowConvertException(OptionError,"UnrecognizedEventType",
1239 argv[i]);
1240 (void) SetLogEventMask(argv[i]);
1241 break;
1242 }
1243 if (LocaleCompare("define",option+1) == 0)
1244 {
1245 i++;
cristybb503372010-05-27 20:51:26 +00001246 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001247 ThrowConvertException(OptionError,"MissingArgument",option);
1248 if (*option == '+')
1249 {
1250 const char
1251 *define;
1252
1253 define=GetImageOption(image_info,argv[i]);
1254 if (define == (const char *) NULL)
1255 ThrowConvertException(OptionError,"NoSuchOption",argv[i]);
1256 break;
1257 }
1258 break;
1259 }
1260 if (LocaleCompare("delay",option+1) == 0)
1261 {
1262 if (*option == '+')
1263 break;
1264 i++;
cristybb503372010-05-27 20:51:26 +00001265 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001266 ThrowConvertException(OptionError,"MissingArgument",option);
1267 if (IsGeometry(argv[i]) == MagickFalse)
1268 ThrowConvertInvalidArgumentException(option,argv[i]);
1269 break;
1270 }
1271 if (LocaleCompare("density",option+1) == 0)
1272 {
1273 if (*option == '+')
1274 break;
1275 i++;
cristye81f5522014-05-07 01:25:59 +00001276 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001277 ThrowConvertException(OptionError,"MissingArgument",option);
1278 if (IsGeometry(argv[i]) == MagickFalse)
1279 ThrowConvertInvalidArgumentException(option,argv[i]);
1280 break;
1281 }
1282 if (LocaleCompare("depth",option+1) == 0)
1283 {
1284 if (*option == '+')
1285 break;
1286 i++;
cristye81f5522014-05-07 01:25:59 +00001287 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001288 ThrowConvertException(OptionError,"MissingArgument",option);
1289 if (IsGeometry(argv[i]) == MagickFalse)
1290 ThrowConvertInvalidArgumentException(option,argv[i]);
1291 break;
1292 }
1293 if (LocaleCompare("delete",option+1) == 0)
1294 {
1295 if (*option == '+')
1296 break;
1297 i++;
cristye81f5522014-05-07 01:25:59 +00001298 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001299 ThrowConvertException(OptionError,"MissingArgument",option);
1300 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
1301 ThrowConvertInvalidArgumentException(option,argv[i]);
1302 break;
1303 }
1304 if (LocaleCompare("deskew",option+1) == 0)
1305 {
1306 if (*option == '+')
1307 break;
1308 i++;
cristye81f5522014-05-07 01:25:59 +00001309 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001310 ThrowConvertException(OptionError,"MissingArgument",option);
1311 if (IsGeometry(argv[i]) == MagickFalse)
1312 ThrowConvertInvalidArgumentException(option,argv[i]);
1313 break;
1314 }
1315 if (LocaleCompare("despeckle",option+1) == 0)
1316 break;
cristyc9b12952010-03-28 01:12:28 +00001317 if (LocaleCompare("direction",option+1) == 0)
1318 {
cristybb503372010-05-27 20:51:26 +00001319 ssize_t
cristyc9b12952010-03-28 01:12:28 +00001320 direction;
1321
1322 if (*option == '+')
1323 break;
1324 i++;
cristybb503372010-05-27 20:51:26 +00001325 if (i == (ssize_t) argc)
cristyc9b12952010-03-28 01:12:28 +00001326 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001327 direction=ParseCommandOption(MagickDirectionOptions,MagickFalse,
cristyc9b12952010-03-28 01:12:28 +00001328 argv[i]);
1329 if (direction < 0)
1330 ThrowConvertException(OptionError,"UnrecognizedDirectionType",
1331 argv[i]);
1332 break;
1333 }
cristy3ed852e2009-09-05 21:47:34 +00001334 if (LocaleCompare("display",option+1) == 0)
1335 {
1336 if (*option == '+')
1337 break;
1338 i++;
cristye81f5522014-05-07 01:25:59 +00001339 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001340 ThrowConvertException(OptionError,"MissingArgument",option);
1341 break;
1342 }
1343 if (LocaleCompare("dispose",option+1) == 0)
1344 {
cristybb503372010-05-27 20:51:26 +00001345 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001346 dispose;
1347
1348 if (*option == '+')
1349 break;
1350 i++;
cristybb503372010-05-27 20:51:26 +00001351 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001352 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001353 dispose=ParseCommandOption(MagickDisposeOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001354 if (dispose < 0)
1355 ThrowConvertException(OptionError,"UnrecognizedDisposeMethod",
1356 argv[i]);
1357 break;
1358 }
1359 if (LocaleCompare("distort",option+1) == 0)
1360 {
cristybb503372010-05-27 20:51:26 +00001361 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001362 op;
1363
1364 i++;
cristybb503372010-05-27 20:51:26 +00001365 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001366 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001367 op=ParseCommandOption(MagickDistortOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001368 if (op < 0)
1369 ThrowConvertException(OptionError,"UnrecognizedDistortMethod",
1370 argv[i]);
1371 i++;
cristye81f5522014-05-07 01:25:59 +00001372 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001373 ThrowConvertException(OptionError,"MissingArgument",option);
1374 break;
1375 }
1376 if (LocaleCompare("dither",option+1) == 0)
1377 {
cristybb503372010-05-27 20:51:26 +00001378 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001379 method;
1380
1381 if (*option == '+')
1382 break;
1383 i++;
cristybb503372010-05-27 20:51:26 +00001384 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001385 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001386 method=ParseCommandOption(MagickDitherOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001387 if (method < 0)
1388 ThrowConvertException(OptionError,"UnrecognizedDitherMethod",
1389 argv[i]);
1390 break;
1391 }
1392 if (LocaleCompare("draw",option+1) == 0)
1393 {
1394 if (*option == '+')
1395 break;
1396 i++;
cristye81f5522014-05-07 01:25:59 +00001397 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001398 ThrowConvertException(OptionError,"MissingArgument",option);
1399 break;
1400 }
cristy5d28d482011-03-20 21:59:40 +00001401 if (LocaleCompare("duplicate",option+1) == 0)
1402 {
cristy5d28d482011-03-20 21:59:40 +00001403 if (*option == '+')
cristyecb10ff2011-03-22 13:14:03 +00001404 break;
1405 i++;
cristye81f5522014-05-07 01:25:59 +00001406 if (i == (ssize_t) argc)
cristyecb10ff2011-03-22 13:14:03 +00001407 ThrowConvertException(OptionError,"MissingArgument",option);
1408 if (IsGeometry(argv[i]) == MagickFalse)
1409 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy5d28d482011-03-20 21:59:40 +00001410 break;
1411 }
cristy22879752009-10-25 23:55:40 +00001412 if (LocaleCompare("duration",option+1) == 0)
1413 {
1414 if (*option == '+')
1415 break;
1416 i++;
cristye81f5522014-05-07 01:25:59 +00001417 if (i == (ssize_t) argc)
cristy22879752009-10-25 23:55:40 +00001418 ThrowConvertException(OptionError,"MissingArgument",option);
1419 if (IsGeometry(argv[i]) == MagickFalse)
1420 ThrowConvertInvalidArgumentException(option,argv[i]);
1421 break;
1422 }
cristy3ed852e2009-09-05 21:47:34 +00001423 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1424 }
1425 case 'e':
1426 {
1427 if (LocaleCompare("edge",option+1) == 0)
1428 {
1429 if (*option == '+')
1430 break;
1431 i++;
cristye81f5522014-05-07 01:25:59 +00001432 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001433 ThrowConvertException(OptionError,"MissingArgument",option);
1434 if (IsGeometry(argv[i]) == MagickFalse)
1435 ThrowConvertInvalidArgumentException(option,argv[i]);
1436 break;
1437 }
1438 if (LocaleCompare("emboss",option+1) == 0)
1439 {
1440 if (*option == '+')
1441 break;
1442 i++;
cristye81f5522014-05-07 01:25:59 +00001443 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001444 ThrowConvertException(OptionError,"MissingArgument",option);
1445 if (IsGeometry(argv[i]) == MagickFalse)
1446 ThrowConvertInvalidArgumentException(option,argv[i]);
1447 break;
1448 }
1449 if (LocaleCompare("encipher",option+1) == 0)
1450 {
1451 if (*option == '+')
1452 break;
1453 i++;
cristye81f5522014-05-07 01:25:59 +00001454 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001455 ThrowConvertException(OptionError,"MissingArgument",option);
1456 break;
1457 }
1458 if (LocaleCompare("encoding",option+1) == 0)
1459 {
1460 if (*option == '+')
1461 break;
1462 i++;
cristye81f5522014-05-07 01:25:59 +00001463 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001464 ThrowConvertException(OptionError,"MissingArgument",option);
1465 break;
1466 }
1467 if (LocaleCompare("endian",option+1) == 0)
1468 {
cristybb503372010-05-27 20:51:26 +00001469 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001470 endian;
1471
1472 if (*option == '+')
1473 break;
1474 i++;
cristye81f5522014-05-07 01:25:59 +00001475 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001476 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001477 endian=ParseCommandOption(MagickEndianOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001478 argv[i]);
1479 if (endian < 0)
1480 ThrowConvertException(OptionError,"UnrecognizedEndianType",
1481 argv[i]);
1482 break;
1483 }
1484 if (LocaleCompare("enhance",option+1) == 0)
1485 break;
1486 if (LocaleCompare("equalize",option+1) == 0)
1487 break;
1488 if (LocaleCompare("evaluate",option+1) == 0)
1489 {
cristybb503372010-05-27 20:51:26 +00001490 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001491 op;
1492
1493 if (*option == '+')
1494 break;
1495 i++;
cristybb503372010-05-27 20:51:26 +00001496 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001497 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001498 op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001499 if (op < 0)
1500 ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
1501 argv[i]);
1502 i++;
cristye81f5522014-05-07 01:25:59 +00001503 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001504 ThrowConvertException(OptionError,"MissingArgument",option);
1505 if (IsGeometry(argv[i]) == MagickFalse)
1506 ThrowConvertInvalidArgumentException(option,argv[i]);
1507 break;
1508 }
cristyd18ae7c2010-03-07 17:39:52 +00001509 if (LocaleCompare("evaluate-sequence",option+1) == 0)
1510 {
cristybb503372010-05-27 20:51:26 +00001511 ssize_t
cristyd18ae7c2010-03-07 17:39:52 +00001512 op;
1513
1514 if (*option == '+')
1515 break;
1516 i++;
cristybb503372010-05-27 20:51:26 +00001517 if (i == (ssize_t) argc)
cristyd18ae7c2010-03-07 17:39:52 +00001518 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001519 op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
cristyd18ae7c2010-03-07 17:39:52 +00001520 if (op < 0)
1521 ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
1522 argv[i]);
1523 break;
1524 }
cristy3ed852e2009-09-05 21:47:34 +00001525 if (LocaleCompare("extent",option+1) == 0)
1526 {
1527 if (*option == '+')
1528 break;
1529 i++;
cristye81f5522014-05-07 01:25:59 +00001530 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001531 ThrowConvertException(OptionError,"MissingArgument",option);
1532 if (IsGeometry(argv[i]) == MagickFalse)
1533 ThrowConvertInvalidArgumentException(option,argv[i]);
1534 break;
1535 }
1536 if (LocaleCompare("extract",option+1) == 0)
1537 {
1538 if (*option == '+')
1539 break;
1540 i++;
cristye81f5522014-05-07 01:25:59 +00001541 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001542 ThrowConvertException(OptionError,"MissingArgument",option);
1543 if (IsGeometry(argv[i]) == MagickFalse)
1544 ThrowConvertInvalidArgumentException(option,argv[i]);
1545 break;
1546 }
1547 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1548 }
1549 case 'f':
1550 {
1551 if (LocaleCompare("family",option+1) == 0)
1552 {
1553 if (*option == '+')
1554 break;
1555 i++;
cristye81f5522014-05-07 01:25:59 +00001556 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001557 ThrowConvertException(OptionError,"MissingArgument",option);
1558 break;
1559 }
cristy14154222012-06-15 23:21:49 +00001560 if (LocaleCompare("features",option+1) == 0)
1561 {
1562 if (*option == '+')
1563 break;
1564 i++;
cristye81f5522014-05-07 01:25:59 +00001565 if (i == (ssize_t) argc)
cristy14154222012-06-15 23:21:49 +00001566 ThrowConvertException(OptionError,"MissingArgument",option);
1567 if (IsGeometry(argv[i]) == MagickFalse)
1568 ThrowConvertInvalidArgumentException(option,argv[i]);
1569 break;
1570 }
cristy3ed852e2009-09-05 21:47:34 +00001571 if (LocaleCompare("fft",option+1) == 0)
1572 break;
1573 if (LocaleCompare("fill",option+1) == 0)
1574 {
1575 if (*option == '+')
1576 break;
1577 i++;
cristye81f5522014-05-07 01:25:59 +00001578 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001579 ThrowConvertException(OptionError,"MissingArgument",option);
1580 break;
1581 }
1582 if (LocaleCompare("filter",option+1) == 0)
1583 {
cristybb503372010-05-27 20:51:26 +00001584 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001585 filter;
1586
1587 if (*option == '+')
1588 break;
1589 i++;
cristye81f5522014-05-07 01:25:59 +00001590 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001591 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001592 filter=ParseCommandOption(MagickFilterOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001593 if (filter < 0)
1594 ThrowConvertException(OptionError,"UnrecognizedImageFilter",
1595 argv[i]);
1596 break;
1597 }
1598 if (LocaleCompare("flatten",option+1) == 0)
1599 break;
1600 if (LocaleCompare("flip",option+1) == 0)
1601 break;
1602 if (LocaleCompare("flop",option+1) == 0)
1603 break;
1604 if (LocaleCompare("floodfill",option+1) == 0)
1605 {
1606 if (*option == '+')
1607 break;
1608 i++;
cristye81f5522014-05-07 01:25:59 +00001609 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001610 ThrowConvertException(OptionError,"MissingArgument",option);
1611 if (IsGeometry(argv[i]) == MagickFalse)
1612 ThrowConvertInvalidArgumentException(option,argv[i]);
1613 i++;
cristye81f5522014-05-07 01:25:59 +00001614 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001615 ThrowConvertException(OptionError,"MissingArgument",option);
1616 break;
1617 }
1618 if (LocaleCompare("font",option+1) == 0)
1619 {
1620 if (*option == '+')
1621 break;
1622 i++;
cristye81f5522014-05-07 01:25:59 +00001623 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001624 ThrowConvertException(OptionError,"MissingArgument",option);
1625 break;
1626 }
1627 if (LocaleCompare("format",option+1) == 0)
1628 {
1629 if (*option == '+')
1630 break;
1631 i++;
cristye81f5522014-05-07 01:25:59 +00001632 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001633 ThrowConvertException(OptionError,"MissingArgument",option);
1634 format=argv[i];
1635 break;
1636 }
1637 if (LocaleCompare("frame",option+1) == 0)
1638 {
1639 if (*option == '+')
1640 break;
1641 i++;
cristye81f5522014-05-07 01:25:59 +00001642 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001643 ThrowConvertException(OptionError,"MissingArgument",option);
1644 if (IsGeometry(argv[i]) == MagickFalse)
1645 ThrowConvertInvalidArgumentException(option,argv[i]);
1646 break;
1647 }
1648 if (LocaleCompare("function",option+1) == 0)
1649 {
cristybb503372010-05-27 20:51:26 +00001650 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001651 op;
1652
1653 if (*option == '+')
1654 break;
1655 i++;
cristybb503372010-05-27 20:51:26 +00001656 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001657 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001658 op=ParseCommandOption(MagickFunctionOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001659 if (op < 0)
1660 ThrowConvertException(OptionError,"UnrecognizedFunction",argv[i]);
1661 i++;
cristye81f5522014-05-07 01:25:59 +00001662 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001663 ThrowConvertException(OptionError,"MissingArgument",option);
1664 break;
1665 }
1666 if (LocaleCompare("fuzz",option+1) == 0)
1667 {
1668 if (*option == '+')
1669 break;
1670 i++;
cristye81f5522014-05-07 01:25:59 +00001671 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001672 ThrowConvertException(OptionError,"MissingArgument",option);
1673 if (IsGeometry(argv[i]) == MagickFalse)
1674 ThrowConvertInvalidArgumentException(option,argv[i]);
1675 break;
1676 }
1677 if (LocaleCompare("fx",option+1) == 0)
1678 {
1679 if (*option == '+')
1680 break;
1681 i++;
cristye81f5522014-05-07 01:25:59 +00001682 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001683 ThrowConvertException(OptionError,"MissingArgument",option);
1684 break;
1685 }
1686 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1687 }
1688 case 'g':
1689 {
1690 if (LocaleCompare("gamma",option+1) == 0)
1691 {
1692 i++;
cristye81f5522014-05-07 01:25:59 +00001693 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001694 ThrowConvertException(OptionError,"MissingArgument",option);
1695 if (IsGeometry(argv[i]) == MagickFalse)
1696 ThrowConvertInvalidArgumentException(option,argv[i]);
1697 break;
1698 }
1699 if ((LocaleCompare("gaussian-blur",option+1) == 0) ||
1700 (LocaleCompare("gaussian",option+1) == 0))
1701 {
1702 i++;
cristye81f5522014-05-07 01:25:59 +00001703 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001704 ThrowConvertException(OptionError,"MissingArgument",option);
1705 if (IsGeometry(argv[i]) == MagickFalse)
1706 ThrowConvertInvalidArgumentException(option,argv[i]);
1707 break;
1708 }
1709 if (LocaleCompare("geometry",option+1) == 0)
1710 {
1711 if (*option == '+')
1712 break;
1713 i++;
cristye81f5522014-05-07 01:25:59 +00001714 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001715 ThrowConvertException(OptionError,"MissingArgument",option);
1716 if (IsGeometry(argv[i]) == MagickFalse)
1717 ThrowConvertInvalidArgumentException(option,argv[i]);
1718 break;
1719 }
1720 if (LocaleCompare("gravity",option+1) == 0)
1721 {
cristybb503372010-05-27 20:51:26 +00001722 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001723 gravity;
1724
1725 if (*option == '+')
1726 break;
1727 i++;
cristye81f5522014-05-07 01:25:59 +00001728 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001729 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001730 gravity=ParseCommandOption(MagickGravityOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001731 argv[i]);
1732 if (gravity < 0)
1733 ThrowConvertException(OptionError,"UnrecognizedGravityType",
1734 argv[i]);
1735 break;
1736 }
cristybc008152013-03-28 16:52:59 +00001737 if (LocaleCompare("grayscale",option+1) == 0)
1738 {
1739 ssize_t
1740 method;
1741
1742 if (*option == '+')
1743 break;
1744 i++;
cristye81f5522014-05-07 01:25:59 +00001745 if (i == (ssize_t) argc)
cristybc008152013-03-28 16:52:59 +00001746 ThrowConvertException(OptionError,"MissingArgument",option);
1747 method=ParseCommandOption(MagickPixelIntensityOptions,MagickFalse,
1748 argv[i]);
1749 if (method < 0)
1750 ThrowConvertException(OptionError,"UnrecognizedIntensityMethod",
1751 argv[i]);
1752 break;
1753 }
cristy3ed852e2009-09-05 21:47:34 +00001754 if (LocaleCompare("green-primary",option+1) == 0)
1755 {
1756 if (*option == '+')
1757 break;
1758 i++;
cristye81f5522014-05-07 01:25:59 +00001759 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001760 ThrowConvertException(OptionError,"MissingArgument",option);
1761 if (IsGeometry(argv[i]) == MagickFalse)
1762 ThrowConvertInvalidArgumentException(option,argv[i]);
1763 break;
1764 }
1765 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1766 }
1767 case 'h':
1768 {
1769 if (LocaleCompare("hald-clut",option+1) == 0)
1770 break;
1771 if ((LocaleCompare("help",option+1) == 0) ||
1772 (LocaleCompare("-help",option+1) == 0))
1773 return(ConvertUsage());
cristy4e215022014-04-19 18:02:35 +00001774 if (LocaleCompare("hough-lines",option+1) == 0)
1775 {
1776 if (*option == '+')
1777 break;
1778 i++;
cristye81f5522014-05-07 01:25:59 +00001779 if (i == (ssize_t) argc)
cristy4e215022014-04-19 18:02:35 +00001780 ThrowConvertException(OptionError,"MissingArgument",option);
1781 if (IsGeometry(argv[i]) == MagickFalse)
1782 ThrowConvertInvalidArgumentException(option,argv[i]);
1783 break;
1784 }
cristy3ed852e2009-09-05 21:47:34 +00001785 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1786 }
1787 case 'i':
1788 {
1789 if (LocaleCompare("identify",option+1) == 0)
1790 break;
1791 if (LocaleCompare("ift",option+1) == 0)
1792 break;
1793 if (LocaleCompare("implode",option+1) == 0)
1794 {
1795 if (*option == '+')
1796 break;
1797 i++;
cristye81f5522014-05-07 01:25:59 +00001798 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001799 ThrowConvertException(OptionError,"MissingArgument",option);
1800 if (IsGeometry(argv[i]) == MagickFalse)
1801 ThrowConvertInvalidArgumentException(option,argv[i]);
1802 break;
1803 }
1804 if (LocaleCompare("insert",option+1) == 0)
1805 {
1806 if (*option == '+')
1807 break;
1808 i++;
cristye81f5522014-05-07 01:25:59 +00001809 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001810 ThrowConvertException(OptionError,"MissingArgument",option);
1811 if (IsGeometry(argv[i]) == MagickFalse)
1812 ThrowConvertInvalidArgumentException(option,argv[i]);
1813 break;
1814 }
cristy70e9f682013-03-12 22:31:22 +00001815 if (LocaleCompare("intensity",option+1) == 0)
1816 {
1817 ssize_t
1818 intensity;
1819
1820 if (*option == '+')
1821 break;
1822 i++;
cristye81f5522014-05-07 01:25:59 +00001823 if (i == (ssize_t) argc)
cristy70e9f682013-03-12 22:31:22 +00001824 ThrowConvertException(OptionError,"MissingArgument",option);
cristy8f84fdd2013-03-28 17:52:55 +00001825 intensity=ParseCommandOption(MagickPixelIntensityOptions,
1826 MagickFalse,argv[i]);
cristy70e9f682013-03-12 22:31:22 +00001827 if (intensity < 0)
cristy8f84fdd2013-03-28 17:52:55 +00001828 ThrowConvertException(OptionError,"UnrecognizedIntensityMethod",
1829 argv[i]);
cristy70e9f682013-03-12 22:31:22 +00001830 break;
1831 }
cristy3ed852e2009-09-05 21:47:34 +00001832 if (LocaleCompare("intent",option+1) == 0)
1833 {
cristybb503372010-05-27 20:51:26 +00001834 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001835 intent;
1836
1837 if (*option == '+')
1838 break;
1839 i++;
cristye81f5522014-05-07 01:25:59 +00001840 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001841 ThrowConvertException(OptionError,"MissingArgument",option);
cristy70e9f682013-03-12 22:31:22 +00001842 intent=ParseCommandOption(MagickIntentOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001843 if (intent < 0)
cristy70e9f682013-03-12 22:31:22 +00001844 ThrowConvertException(OptionError,"UnrecognizedIntentType",argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001845 break;
1846 }
1847 if (LocaleCompare("interlace",option+1) == 0)
1848 {
cristybb503372010-05-27 20:51:26 +00001849 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001850 interlace;
1851
1852 if (*option == '+')
1853 break;
1854 i++;
cristye81f5522014-05-07 01:25:59 +00001855 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001856 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001857 interlace=ParseCommandOption(MagickInterlaceOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001858 argv[i]);
1859 if (interlace < 0)
1860 ThrowConvertException(OptionError,"UnrecognizedInterlaceType",
1861 argv[i]);
1862 break;
1863 }
cristyb32b90a2009-09-07 21:45:48 +00001864 if (LocaleCompare("interline-spacing",option+1) == 0)
1865 {
1866 if (*option == '+')
1867 break;
1868 i++;
cristye81f5522014-05-07 01:25:59 +00001869 if (i == (ssize_t) argc)
cristyb32b90a2009-09-07 21:45:48 +00001870 ThrowConvertException(OptionError,"MissingArgument",option);
1871 if (IsGeometry(argv[i]) == MagickFalse)
1872 ThrowConvertInvalidArgumentException(option,argv[i]);
1873 break;
1874 }
cristy3ed852e2009-09-05 21:47:34 +00001875 if (LocaleCompare("interpolate",option+1) == 0)
1876 {
cristybb503372010-05-27 20:51:26 +00001877 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001878 interpolate;
1879
1880 if (*option == '+')
1881 break;
1882 i++;
cristybb503372010-05-27 20:51:26 +00001883 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001884 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001885 interpolate=ParseCommandOption(MagickInterpolateOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001886 argv[i]);
1887 if (interpolate < 0)
1888 ThrowConvertException(OptionError,"UnrecognizedInterpolateMethod",
1889 argv[i]);
1890 break;
1891 }
1892 if (LocaleCompare("interword-spacing",option+1) == 0)
1893 {
1894 if (*option == '+')
1895 break;
1896 i++;
cristye81f5522014-05-07 01:25:59 +00001897 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001898 ThrowConvertException(OptionError,"MissingArgument",option);
1899 if (IsGeometry(argv[i]) == MagickFalse)
1900 ThrowConvertInvalidArgumentException(option,argv[i]);
1901 break;
1902 }
1903 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1904 }
1905 case 'k':
1906 {
1907 if (LocaleCompare("kerning",option+1) == 0)
1908 {
1909 if (*option == '+')
1910 break;
1911 i++;
cristye81f5522014-05-07 01:25:59 +00001912 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001913 ThrowConvertException(OptionError,"MissingArgument",option);
1914 if (IsGeometry(argv[i]) == MagickFalse)
1915 ThrowConvertInvalidArgumentException(option,argv[i]);
1916 break;
1917 }
cristy3b207f82014-09-27 14:21:20 +00001918 if (LocaleCompare("kuwahara",option+1) == 0)
1919 {
1920 if (*option == '+')
1921 break;
1922 i++;
1923 if (i == (ssize_t) argc)
1924 ThrowConvertException(OptionError,"MissingArgument",option);
1925 if (IsGeometry(argv[i]) == MagickFalse)
1926 ThrowConvertInvalidArgumentException(option,argv[i]);
1927 break;
1928 }
cristy3ed852e2009-09-05 21:47:34 +00001929 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1930 }
1931 case 'l':
1932 {
1933 if (LocaleCompare("label",option+1) == 0)
1934 {
1935 if (*option == '+')
1936 break;
1937 i++;
cristybb503372010-05-27 20:51:26 +00001938 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001939 ThrowConvertException(OptionError,"MissingArgument",option);
1940 break;
1941 }
1942 if (LocaleCompare("lat",option+1) == 0)
1943 {
1944 if (*option == '+')
1945 break;
1946 i++;
cristye81f5522014-05-07 01:25:59 +00001947 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001948 ThrowConvertException(OptionError,"MissingArgument",option);
1949 if (IsGeometry(argv[i]) == MagickFalse)
1950 ThrowConvertInvalidArgumentException(option,argv[i]);
1951 break;
1952 }
1953 if (LocaleCompare("layers",option+1) == 0)
1954 {
cristybb503372010-05-27 20:51:26 +00001955 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001956 type;
1957
1958 if (*option == '+')
1959 break;
1960 i++;
cristye81f5522014-05-07 01:25:59 +00001961 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001962 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001963 type=ParseCommandOption(MagickLayerOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001964 if (type < 0)
1965 ThrowConvertException(OptionError,"UnrecognizedLayerMethod",
1966 argv[i]);
1967 break;
1968 }
1969 if (LocaleCompare("level",option+1) == 0)
1970 {
1971 i++;
cristye81f5522014-05-07 01:25:59 +00001972 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001973 ThrowConvertException(OptionError,"MissingArgument",option);
1974 if (IsGeometry(argv[i]) == MagickFalse)
1975 ThrowConvertInvalidArgumentException(option,argv[i]);
1976 break;
1977 }
1978 if (LocaleCompare("level-colors",option+1) == 0)
1979 {
1980 i++;
cristye81f5522014-05-07 01:25:59 +00001981 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001982 ThrowConvertException(OptionError,"MissingArgument",option);
1983 break;
1984 }
cristy3ed852e2009-09-05 21:47:34 +00001985 if (LocaleCompare("limit",option+1) == 0)
1986 {
1987 char
1988 *p;
1989
1990 double
1991 value;
1992
cristybb503372010-05-27 20:51:26 +00001993 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001994 resource;
1995
1996 if (*option == '+')
1997 break;
1998 i++;
cristybb503372010-05-27 20:51:26 +00001999 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002000 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002001 resource=ParseCommandOption(MagickResourceOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002002 argv[i]);
2003 if (resource < 0)
2004 ThrowConvertException(OptionError,"UnrecognizedResourceType",
2005 argv[i]);
2006 i++;
cristybb503372010-05-27 20:51:26 +00002007 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002008 ThrowConvertException(OptionError,"MissingArgument",option);
cristydbdd0e32011-11-04 23:29:40 +00002009 value=StringToDouble(argv[i],&p);
cristyda16f162011-02-19 23:52:17 +00002010 (void) value;
cristy3ed852e2009-09-05 21:47:34 +00002011 if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
2012 ThrowConvertInvalidArgumentException(option,argv[i]);
2013 break;
2014 }
2015 if (LocaleCompare("linear-stretch",option+1) == 0)
2016 {
2017 i++;
cristye81f5522014-05-07 01:25:59 +00002018 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002019 ThrowConvertException(OptionError,"MissingArgument",option);
2020 if (IsGeometry(argv[i]) == MagickFalse)
2021 ThrowConvertInvalidArgumentException(option,argv[i]);
2022 break;
2023 }
anthonyef0daa62012-03-24 13:43:59 +00002024 if (LocaleCompare("liquid-rescale",option+1) == 0)
2025 {
2026 i++;
cristye81f5522014-05-07 01:25:59 +00002027 if (i == (ssize_t) argc)
anthonyef0daa62012-03-24 13:43:59 +00002028 ThrowConvertException(OptionError,"MissingArgument",option);
2029 if (IsGeometry(argv[i]) == MagickFalse)
2030 ThrowConvertInvalidArgumentException(option,argv[i]);
2031 break;
2032 }
cristy3ed852e2009-09-05 21:47:34 +00002033 if (LocaleCompare("list",option+1) == 0)
2034 {
cristybb503372010-05-27 20:51:26 +00002035 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002036 list;
2037
2038 if (*option == '+')
2039 break;
2040 i++;
cristybb503372010-05-27 20:51:26 +00002041 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002042 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002043 list=ParseCommandOption(MagickListOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002044 if (list < 0)
2045 ThrowConvertException(OptionError,"UnrecognizedListType",argv[i]);
cristyaeb2cbc2010-05-07 13:28:58 +00002046 status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
cristy3ed852e2009-09-05 21:47:34 +00002047 argv+j,exception);
2048 DestroyConvert();
cristy32ce2392014-09-24 19:08:53 +00002049 return(status == 0 ? MagickTrue : MagickFalse);
cristy3ed852e2009-09-05 21:47:34 +00002050 }
2051 if (LocaleCompare("log",option+1) == 0)
2052 {
2053 if (*option == '+')
2054 break;
2055 i++;
cristybb503372010-05-27 20:51:26 +00002056 if ((i == (ssize_t) argc) ||
cristy3ed852e2009-09-05 21:47:34 +00002057 (strchr(argv[i],'%') == (char *) NULL))
2058 ThrowConvertException(OptionError,"MissingArgument",option);
2059 break;
2060 }
2061 if (LocaleCompare("loop",option+1) == 0)
2062 {
2063 if (*option == '+')
2064 break;
2065 i++;
cristye81f5522014-05-07 01:25:59 +00002066 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002067 ThrowConvertException(OptionError,"MissingArgument",option);
2068 if (IsGeometry(argv[i]) == MagickFalse)
2069 ThrowConvertInvalidArgumentException(option,argv[i]);
2070 break;
2071 }
2072 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2073 }
2074 case 'm':
2075 {
2076 if (LocaleCompare("map",option+1) == 0)
2077 {
2078 if (*option == '+')
2079 break;
2080 i++;
cristye81f5522014-05-07 01:25:59 +00002081 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002082 ThrowConvertException(OptionError,"MissingArgument",option);
2083 break;
2084 }
2085 if (LocaleCompare("mask",option+1) == 0)
2086 {
2087 if (*option == '+')
2088 break;
2089 i++;
cristye81f5522014-05-07 01:25:59 +00002090 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002091 ThrowConvertException(OptionError,"MissingArgument",option);
2092 break;
2093 }
2094 if (LocaleCompare("matte",option+1) == 0)
2095 break;
2096 if (LocaleCompare("mattecolor",option+1) == 0)
2097 {
2098 if (*option == '+')
2099 break;
2100 i++;
cristye81f5522014-05-07 01:25:59 +00002101 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002102 ThrowConvertException(OptionError,"MissingArgument",option);
2103 break;
2104 }
cristy52ad9e92013-02-08 23:23:29 +00002105 if (LocaleCompare("maximum",option+1) == 0)
2106 break;
cristy2fc10e52014-04-26 14:13:53 +00002107 if (LocaleCompare("mean-shift",option+1) == 0)
2108 {
2109 if (*option == '+')
2110 break;
2111 i++;
cristye81f5522014-05-07 01:25:59 +00002112 if (i == (ssize_t) argc)
cristy2fc10e52014-04-26 14:13:53 +00002113 ThrowConvertException(OptionError,"MissingArgument",option);
2114 if (IsGeometry(argv[i]) == MagickFalse)
2115 ThrowConvertInvalidArgumentException(option,argv[i]);
2116 break;
2117 }
cristy52ad9e92013-02-08 23:23:29 +00002118 if (LocaleCompare("median",option+1) == 0)
2119 {
2120 if (*option == '+')
2121 break;
2122 i++;
cristye81f5522014-05-07 01:25:59 +00002123 if (i == (ssize_t) argc)
cristy52ad9e92013-02-08 23:23:29 +00002124 ThrowConvertException(OptionError,"MissingArgument",option);
2125 if (IsGeometry(argv[i]) == MagickFalse)
2126 ThrowConvertInvalidArgumentException(option,argv[i]);
2127 break;
2128 }
cristyb92495a2013-08-20 00:10:59 +00002129 if (LocaleCompare("metric",option+1) == 0)
2130 {
2131 ssize_t
2132 type;
2133
2134 if (*option == '+')
2135 break;
2136 i++;
2137 if (i == (ssize_t) argc)
2138 ThrowConvertException(OptionError,"MissingArgument",option);
2139 type=ParseCommandOption(MagickMetricOptions,MagickTrue,argv[i]);
2140 if (type < 0)
2141 ThrowConvertException(OptionError,"UnrecognizedMetricType",
2142 argv[i]);
2143 break;
2144 }
cristy52ad9e92013-02-08 23:23:29 +00002145 if (LocaleCompare("minimum",option+1) == 0)
2146 break;
2147 if (LocaleCompare("mode",option+1) == 0)
2148 {
2149 if (*option == '+')
2150 break;
2151 i++;
cristye81f5522014-05-07 01:25:59 +00002152 if (i == (ssize_t) argc)
cristy52ad9e92013-02-08 23:23:29 +00002153 ThrowConvertException(OptionError,"MissingArgument",option);
2154 if (IsGeometry(argv[i]) == MagickFalse)
2155 ThrowConvertInvalidArgumentException(option,argv[i]);
2156 break;
2157 }
cristy3ed852e2009-09-05 21:47:34 +00002158 if (LocaleCompare("modulate",option+1) == 0)
2159 {
2160 if (*option == '+')
2161 break;
2162 i++;
cristye81f5522014-05-07 01:25:59 +00002163 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002164 ThrowConvertException(OptionError,"MissingArgument",option);
2165 if (IsGeometry(argv[i]) == MagickFalse)
2166 ThrowConvertInvalidArgumentException(option,argv[i]);
2167 break;
2168 }
cristy80b1dee2014-01-09 11:27:24 +00002169 if (LocaleCompare("moments",option+1) == 0)
2170 break;
cristy3ed852e2009-09-05 21:47:34 +00002171 if (LocaleCompare("monitor",option+1) == 0)
2172 break;
2173 if (LocaleCompare("monochrome",option+1) == 0)
2174 break;
2175 if (LocaleCompare("morph",option+1) == 0)
2176 {
2177 if (*option == '+')
2178 break;
2179 i++;
cristye81f5522014-05-07 01:25:59 +00002180 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002181 ThrowConvertException(OptionError,"MissingArgument",option);
2182 if (IsGeometry(argv[i]) == MagickFalse)
2183 ThrowConvertInvalidArgumentException(option,argv[i]);
2184 break;
2185 }
anthony29188a82010-01-22 10:12:34 +00002186 if (LocaleCompare("morphology",option+1) == 0)
2187 {
anthony29188a82010-01-22 10:12:34 +00002188 char
cristy151b66d2015-04-15 10:50:31 +00002189 token[MagickPathExtent];
anthony29188a82010-01-22 10:12:34 +00002190
cristyb6bd4ad2010-08-08 01:12:27 +00002191 KernelInfo
2192 *kernel_info;
2193
cristybb503372010-05-27 20:51:26 +00002194 ssize_t
cristye6365592010-04-02 17:31:23 +00002195 op;
2196
anthony29188a82010-01-22 10:12:34 +00002197 i++;
cristybb503372010-05-27 20:51:26 +00002198 if (i == (ssize_t) argc)
anthony29188a82010-01-22 10:12:34 +00002199 ThrowConvertException(OptionError,"MissingArgument",option);
2200 GetMagickToken(argv[i],NULL,token);
cristy042ee782011-04-22 18:48:30 +00002201 op=ParseCommandOption(MagickMorphologyOptions,MagickFalse,token);
anthony29188a82010-01-22 10:12:34 +00002202 if (op < 0)
2203 ThrowConvertException(OptionError,"UnrecognizedMorphologyMethod",
cristye6365592010-04-02 17:31:23 +00002204 token);
anthony29188a82010-01-22 10:12:34 +00002205 i++;
cristye81f5522014-05-07 01:25:59 +00002206 if (i == (ssize_t) argc)
anthony29188a82010-01-22 10:12:34 +00002207 ThrowConvertException(OptionError,"MissingArgument",option);
cristy2c57b742014-10-31 00:40:34 +00002208 kernel_info=AcquireKernelInfo(argv[i],exception);
cristyb6bd4ad2010-08-08 01:12:27 +00002209 if (kernel_info == (KernelInfo *) NULL)
anthony29188a82010-01-22 10:12:34 +00002210 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00002211 kernel_info=DestroyKernelInfo(kernel_info);
anthony29188a82010-01-22 10:12:34 +00002212 break;
2213 }
cristy3ed852e2009-09-05 21:47:34 +00002214 if (LocaleCompare("mosaic",option+1) == 0)
2215 break;
2216 if (LocaleCompare("motion-blur",option+1) == 0)
2217 {
2218 if (*option == '+')
2219 break;
2220 i++;
cristye81f5522014-05-07 01:25:59 +00002221 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002222 ThrowConvertException(OptionError,"MissingArgument",option);
2223 if (IsGeometry(argv[i]) == MagickFalse)
2224 ThrowConvertInvalidArgumentException(option,argv[i]);
2225 break;
2226 }
2227 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2228 }
2229 case 'n':
2230 {
2231 if (LocaleCompare("negate",option+1) == 0)
2232 break;
2233 if (LocaleCompare("noise",option+1) == 0)
2234 {
2235 i++;
cristye81f5522014-05-07 01:25:59 +00002236 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002237 ThrowConvertException(OptionError,"MissingArgument",option);
2238 if (*option == '+')
2239 {
cristybb503372010-05-27 20:51:26 +00002240 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002241 noise;
2242
cristy042ee782011-04-22 18:48:30 +00002243 noise=ParseCommandOption(MagickNoiseOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002244 if (noise < 0)
2245 ThrowConvertException(OptionError,"UnrecognizedNoiseType",
2246 argv[i]);
2247 break;
2248 }
2249 if (IsGeometry(argv[i]) == MagickFalse)
2250 ThrowConvertInvalidArgumentException(option,argv[i]);
2251 break;
2252 }
2253 if (LocaleCompare("noop",option+1) == 0)
2254 break;
2255 if (LocaleCompare("normalize",option+1) == 0)
2256 break;
2257 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2258 }
2259 case 'o':
2260 {
2261 if (LocaleCompare("opaque",option+1) == 0)
2262 {
2263 i++;
cristye81f5522014-05-07 01:25:59 +00002264 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002265 ThrowConvertException(OptionError,"MissingArgument",option);
2266 break;
2267 }
2268 if (LocaleCompare("ordered-dither",option+1) == 0)
2269 {
2270 if (*option == '+')
2271 break;
2272 i++;
cristye81f5522014-05-07 01:25:59 +00002273 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002274 ThrowConvertException(OptionError,"MissingArgument",option);
2275 break;
2276 }
2277 if (LocaleCompare("orient",option+1) == 0)
2278 {
cristybb503372010-05-27 20:51:26 +00002279 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002280 orientation;
2281
2282 if (*option == '+')
2283 break;
2284 i++;
cristye81f5522014-05-07 01:25:59 +00002285 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002286 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002287 orientation=ParseCommandOption(MagickOrientationOptions,
cristy3ed852e2009-09-05 21:47:34 +00002288 MagickFalse,argv[i]);
2289 if (orientation < 0)
2290 ThrowConvertException(OptionError,"UnrecognizedImageOrientation",
2291 argv[i]);
2292 break;
2293 }
2294 ThrowConvertException(OptionError,"UnrecognizedOption",argv[i])
2295 }
2296 case 'p':
2297 {
2298 if (LocaleCompare("page",option+1) == 0)
2299 {
2300 if (*option == '+')
2301 break;
2302 i++;
cristybb503372010-05-27 20:51:26 +00002303 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002304 ThrowConvertException(OptionError,"MissingArgument",option);
2305 break;
2306 }
2307 if (LocaleCompare("paint",option+1) == 0)
2308 {
2309 if (*option == '+')
2310 break;
2311 i++;
cristye81f5522014-05-07 01:25:59 +00002312 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002313 ThrowConvertException(OptionError,"MissingArgument",option);
2314 if (IsGeometry(argv[i]) == MagickFalse)
2315 ThrowConvertInvalidArgumentException(option,argv[i]);
2316 break;
2317 }
cristyab2b40a2012-11-04 01:43:29 +00002318 if (LocaleCompare("perceptible",option+1) == 0)
2319 {
2320 if (*option == '+')
2321 break;
2322 i++;
cristye81f5522014-05-07 01:25:59 +00002323 if (i == (ssize_t) argc)
cristyab2b40a2012-11-04 01:43:29 +00002324 ThrowConvertException(OptionError,"MissingArgument",option);
2325 if (IsGeometry(argv[i]) == MagickFalse)
2326 ThrowConvertInvalidArgumentException(option,argv[i]);
2327 break;
2328 }
cristy3ed852e2009-09-05 21:47:34 +00002329 if (LocaleCompare("ping",option+1) == 0)
2330 break;
2331 if (LocaleCompare("pointsize",option+1) == 0)
2332 {
2333 if (*option == '+')
2334 break;
2335 i++;
cristye81f5522014-05-07 01:25:59 +00002336 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002337 ThrowConvertException(OptionError,"MissingArgument",option);
2338 if (IsGeometry(argv[i]) == MagickFalse)
2339 ThrowConvertInvalidArgumentException(option,argv[i]);
2340 break;
2341 }
2342 if (LocaleCompare("polaroid",option+1) == 0)
2343 {
2344 if (*option == '+')
2345 break;
2346 i++;
cristye81f5522014-05-07 01:25:59 +00002347 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002348 ThrowConvertException(OptionError,"MissingArgument",option);
2349 if (IsGeometry(argv[i]) == MagickFalse)
2350 ThrowConvertInvalidArgumentException(option,argv[i]);
2351 break;
2352 }
cristy8cdfb342012-11-11 21:44:36 +00002353 if (LocaleCompare("poly",option+1) == 0)
2354 {
2355 if (*option == '+')
2356 break;
2357 i++;
cristye81f5522014-05-07 01:25:59 +00002358 if (i == (ssize_t) argc)
cristy8cdfb342012-11-11 21:44:36 +00002359 ThrowConvertException(OptionError,"MissingArgument",option);
2360 if (IsGeometry(argv[i]) == MagickFalse)
2361 ThrowConvertInvalidArgumentException(option,argv[i]);
2362 break;
2363 }
cristy3ed852e2009-09-05 21:47:34 +00002364 if (LocaleCompare("posterize",option+1) == 0)
2365 {
2366 if (*option == '+')
2367 break;
2368 i++;
cristye81f5522014-05-07 01:25:59 +00002369 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002370 ThrowConvertException(OptionError,"MissingArgument",option);
2371 if (IsGeometry(argv[i]) == MagickFalse)
2372 ThrowConvertInvalidArgumentException(option,argv[i]);
2373 break;
2374 }
cristye7f51092010-01-17 00:39:37 +00002375 if (LocaleCompare("precision",option+1) == 0)
2376 {
2377 if (*option == '+')
2378 break;
2379 i++;
cristye81f5522014-05-07 01:25:59 +00002380 if (i == (ssize_t) argc)
cristye7f51092010-01-17 00:39:37 +00002381 ThrowConvertException(OptionError,"MissingArgument",option);
2382 if (IsGeometry(argv[i]) == MagickFalse)
2383 ThrowConvertInvalidArgumentException(option,argv[i]);
2384 break;
2385 }
cristy3ed852e2009-09-05 21:47:34 +00002386 if (LocaleCompare("preview",option+1) == 0)
2387 {
cristybb503372010-05-27 20:51:26 +00002388 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002389 preview;
2390
2391 if (*option == '+')
2392 break;
2393 i++;
cristye81f5522014-05-07 01:25:59 +00002394 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002395 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002396 preview=ParseCommandOption(MagickPreviewOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002397 argv[i]);
2398 if (preview < 0)
2399 ThrowConvertException(OptionError,"UnrecognizedPreviewType",
2400 argv[i]);
2401 break;
2402 }
2403 if (LocaleCompare("print",option+1) == 0)
2404 {
2405 if (*option == '+')
2406 break;
2407 i++;
cristye81f5522014-05-07 01:25:59 +00002408 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002409 ThrowConvertException(OptionError,"MissingArgument",option);
2410 break;
2411 }
2412 if (LocaleCompare("process",option+1) == 0)
2413 {
2414 if (*option == '+')
2415 break;
2416 i++;
cristye81f5522014-05-07 01:25:59 +00002417 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002418 ThrowConvertException(OptionError,"MissingArgument",option);
2419 break;
2420 }
2421 if (LocaleCompare("profile",option+1) == 0)
2422 {
2423 i++;
cristye81f5522014-05-07 01:25:59 +00002424 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002425 ThrowConvertException(OptionError,"MissingArgument",option);
2426 break;
2427 }
2428 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2429 }
2430 case 'q':
2431 {
2432 if (LocaleCompare("quality",option+1) == 0)
2433 {
2434 if (*option == '+')
2435 break;
2436 i++;
cristye81f5522014-05-07 01:25:59 +00002437 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002438 ThrowConvertException(OptionError,"MissingArgument",option);
2439 if (IsGeometry(argv[i]) == MagickFalse)
2440 ThrowConvertInvalidArgumentException(option,argv[i]);
2441 break;
2442 }
2443 if (LocaleCompare("quantize",option+1) == 0)
2444 {
cristybb503372010-05-27 20:51:26 +00002445 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002446 colorspace;
2447
2448 if (*option == '+')
2449 break;
2450 i++;
cristye81f5522014-05-07 01:25:59 +00002451 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002452 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002453 colorspace=ParseCommandOption(MagickColorspaceOptions,
cristy3ed852e2009-09-05 21:47:34 +00002454 MagickFalse,argv[i]);
2455 if (colorspace < 0)
2456 ThrowConvertException(OptionError,"UnrecognizedColorspace",
2457 argv[i]);
2458 break;
2459 }
2460 if (LocaleCompare("quiet",option+1) == 0)
2461 break;
2462 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2463 }
2464 case 'r':
2465 {
dirk6d612cf2014-03-13 21:17:23 +00002466 if (LocaleCompare("rotational-blur",option+1) == 0)
cristy3ed852e2009-09-05 21:47:34 +00002467 {
2468 i++;
cristye81f5522014-05-07 01:25:59 +00002469 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002470 ThrowConvertException(OptionError,"MissingArgument",option);
2471 if (IsGeometry(argv[i]) == MagickFalse)
2472 ThrowConvertInvalidArgumentException(option,argv[i]);
2473 break;
2474 }
2475 if (LocaleCompare("raise",option+1) == 0)
2476 {
2477 i++;
cristye81f5522014-05-07 01:25:59 +00002478 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002479 ThrowConvertException(OptionError,"MissingArgument",option);
2480 if (IsGeometry(argv[i]) == MagickFalse)
2481 ThrowConvertInvalidArgumentException(option,argv[i]);
2482 break;
2483 }
2484 if (LocaleCompare("random-threshold",option+1) == 0)
2485 {
2486 if (*option == '+')
2487 break;
2488 i++;
cristye81f5522014-05-07 01:25:59 +00002489 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002490 ThrowConvertException(OptionError,"MissingArgument",option);
2491 if (IsGeometry(argv[i]) == MagickFalse)
2492 ThrowConvertInvalidArgumentException(option,argv[i]);
2493 break;
2494 }
cristy3ed852e2009-09-05 21:47:34 +00002495 if (LocaleCompare("red-primary",option+1) == 0)
2496 {
2497 if (*option == '+')
2498 break;
2499 i++;
cristye81f5522014-05-07 01:25:59 +00002500 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002501 ThrowConvertException(OptionError,"MissingArgument",option);
2502 if (IsGeometry(argv[i]) == MagickFalse)
2503 ThrowConvertInvalidArgumentException(option,argv[i]);
2504 break;
2505 }
2506 if (LocaleCompare("regard-warnings",option+1) == 0)
2507 break;
2508 if (LocaleCompare("region",option+1) == 0)
2509 {
2510 if (*option == '+')
2511 break;
2512 i++;
cristye81f5522014-05-07 01:25:59 +00002513 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002514 ThrowConvertException(OptionError,"MissingArgument",option);
2515 if (IsGeometry(argv[i]) == MagickFalse)
2516 ThrowConvertInvalidArgumentException(option,argv[i]);
2517 break;
2518 }
2519 if (LocaleCompare("remap",option+1) == 0)
2520 {
2521 if (*option == '+')
2522 break;
2523 i++;
cristye81f5522014-05-07 01:25:59 +00002524 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002525 ThrowConvertException(OptionError,"MissingArgument",option);
2526 break;
2527 }
2528 if (LocaleCompare("render",option+1) == 0)
2529 break;
2530 if (LocaleCompare("repage",option+1) == 0)
2531 {
2532 if (*option == '+')
2533 break;
2534 i++;
cristye81f5522014-05-07 01:25:59 +00002535 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002536 ThrowConvertException(OptionError,"MissingArgument",option);
2537 if (IsGeometry(argv[i]) == MagickFalse)
2538 ThrowConvertInvalidArgumentException(option,argv[i]);
2539 break;
2540 }
2541 if (LocaleCompare("resample",option+1) == 0)
2542 {
2543 if (*option == '+')
2544 break;
2545 i++;
cristye81f5522014-05-07 01:25:59 +00002546 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002547 ThrowConvertException(OptionError,"MissingArgument",option);
2548 if (IsGeometry(argv[i]) == MagickFalse)
2549 ThrowConvertInvalidArgumentException(option,argv[i]);
2550 break;
2551 }
2552 if (LocaleCompare("resize",option+1) == 0)
2553 {
2554 if (*option == '+')
2555 break;
2556 i++;
cristye81f5522014-05-07 01:25:59 +00002557 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002558 ThrowConvertException(OptionError,"MissingArgument",option);
2559 if (IsGeometry(argv[i]) == MagickFalse)
2560 ThrowConvertInvalidArgumentException(option,argv[i]);
2561 break;
2562 }
2563 if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
2564 {
2565 respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
2566 break;
2567 }
2568 if (LocaleCompare("reverse",option+1) == 0)
2569 break;
2570 if (LocaleCompare("roll",option+1) == 0)
2571 {
2572 if (*option == '+')
2573 break;
2574 i++;
cristye81f5522014-05-07 01:25:59 +00002575 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002576 ThrowConvertException(OptionError,"MissingArgument",option);
2577 if (IsGeometry(argv[i]) == MagickFalse)
2578 ThrowConvertInvalidArgumentException(option,argv[i]);
2579 break;
2580 }
2581 if (LocaleCompare("rotate",option+1) == 0)
2582 {
2583 i++;
cristye81f5522014-05-07 01:25:59 +00002584 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002585 ThrowConvertException(OptionError,"MissingArgument",option);
2586 if (IsGeometry(argv[i]) == MagickFalse)
2587 ThrowConvertInvalidArgumentException(option,argv[i]);
2588 break;
2589 }
2590 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2591 }
2592 case 's':
2593 {
2594 if (LocaleCompare("sample",option+1) == 0)
2595 {
2596 if (*option == '+')
2597 break;
2598 i++;
cristye81f5522014-05-07 01:25:59 +00002599 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002600 ThrowConvertException(OptionError,"MissingArgument",option);
2601 if (IsGeometry(argv[i]) == MagickFalse)
2602 ThrowConvertInvalidArgumentException(option,argv[i]);
2603 break;
2604 }
2605 if (LocaleCompare("sampling-factor",option+1) == 0)
2606 {
2607 if (*option == '+')
2608 break;
2609 i++;
cristye81f5522014-05-07 01:25:59 +00002610 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002611 ThrowConvertException(OptionError,"MissingArgument",option);
2612 if (IsGeometry(argv[i]) == MagickFalse)
2613 ThrowConvertInvalidArgumentException(option,argv[i]);
2614 break;
2615 }
2616 if (LocaleCompare("scale",option+1) == 0)
2617 {
2618 if (*option == '+')
2619 break;
2620 i++;
cristye81f5522014-05-07 01:25:59 +00002621 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002622 ThrowConvertException(OptionError,"MissingArgument",option);
2623 if (IsGeometry(argv[i]) == MagickFalse)
2624 ThrowConvertInvalidArgumentException(option,argv[i]);
2625 break;
2626 }
2627 if (LocaleCompare("scene",option+1) == 0)
2628 {
2629 if (*option == '+')
2630 break;
2631 i++;
cristye81f5522014-05-07 01:25:59 +00002632 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002633 ThrowConvertException(OptionError,"MissingArgument",option);
2634 if (IsGeometry(argv[i]) == MagickFalse)
2635 ThrowConvertInvalidArgumentException(option,argv[i]);
2636 break;
2637 }
2638 if (LocaleCompare("seed",option+1) == 0)
2639 {
2640 if (*option == '+')
2641 break;
2642 i++;
cristye81f5522014-05-07 01:25:59 +00002643 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002644 ThrowConvertException(OptionError,"MissingArgument",option);
2645 if (IsGeometry(argv[i]) == MagickFalse)
2646 ThrowConvertInvalidArgumentException(option,argv[i]);
2647 break;
2648 }
2649 if (LocaleCompare("segment",option+1) == 0)
2650 {
2651 if (*option == '+')
2652 break;
2653 i++;
cristye81f5522014-05-07 01:25:59 +00002654 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002655 ThrowConvertException(OptionError,"MissingArgument",option);
2656 if (IsGeometry(argv[i]) == MagickFalse)
2657 ThrowConvertInvalidArgumentException(option,argv[i]);
2658 break;
2659 }
2660 if (LocaleCompare("selective-blur",option+1) == 0)
2661 {
2662 i++;
cristye81f5522014-05-07 01:25:59 +00002663 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002664 ThrowConvertException(OptionError,"MissingArgument",option);
2665 if (IsGeometry(argv[i]) == MagickFalse)
2666 ThrowConvertInvalidArgumentException(option,argv[i]);
2667 break;
2668 }
2669 if (LocaleCompare("separate",option+1) == 0)
2670 break;
2671 if (LocaleCompare("sepia-tone",option+1) == 0)
2672 {
2673 if (*option == '+')
2674 break;
2675 i++;
cristye81f5522014-05-07 01:25:59 +00002676 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002677 ThrowConvertException(OptionError,"MissingArgument",option);
2678 if (IsGeometry(argv[i]) == MagickFalse)
2679 ThrowConvertInvalidArgumentException(option,argv[i]);
2680 break;
2681 }
2682 if (LocaleCompare("set",option+1) == 0)
2683 {
2684 i++;
cristybb503372010-05-27 20:51:26 +00002685 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002686 ThrowConvertException(OptionError,"MissingArgument",option);
2687 if (*option == '+')
2688 break;
2689 i++;
cristybb503372010-05-27 20:51:26 +00002690 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002691 ThrowConvertException(OptionError,"MissingArgument",option);
2692 break;
2693 }
2694 if (LocaleCompare("shade",option+1) == 0)
2695 {
2696 i++;
cristye81f5522014-05-07 01:25:59 +00002697 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002698 ThrowConvertException(OptionError,"MissingArgument",option);
2699 if (IsGeometry(argv[i]) == MagickFalse)
2700 ThrowConvertInvalidArgumentException(option,argv[i]);
2701 break;
2702 }
2703 if (LocaleCompare("shadow",option+1) == 0)
2704 {
2705 if (*option == '+')
2706 break;
2707 i++;
cristye81f5522014-05-07 01:25:59 +00002708 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002709 ThrowConvertException(OptionError,"MissingArgument",option);
2710 if (IsGeometry(argv[i]) == MagickFalse)
2711 ThrowConvertInvalidArgumentException(option,argv[i]);
2712 break;
2713 }
2714 if (LocaleCompare("sharpen",option+1) == 0)
2715 {
2716 i++;
cristye81f5522014-05-07 01:25:59 +00002717 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002718 ThrowConvertException(OptionError,"MissingArgument",option);
2719 if (IsGeometry(argv[i]) == MagickFalse)
2720 ThrowConvertInvalidArgumentException(option,argv[i]);
2721 break;
2722 }
2723 if (LocaleCompare("shave",option+1) == 0)
2724 {
2725 if (*option == '+')
2726 break;
2727 i++;
cristye81f5522014-05-07 01:25:59 +00002728 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002729 ThrowConvertException(OptionError,"MissingArgument",option);
2730 if (IsGeometry(argv[i]) == MagickFalse)
2731 ThrowConvertInvalidArgumentException(option,argv[i]);
2732 break;
2733 }
2734 if (LocaleCompare("shear",option+1) == 0)
2735 {
2736 i++;
cristye81f5522014-05-07 01:25:59 +00002737 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002738 ThrowConvertException(OptionError,"MissingArgument",option);
2739 if (IsGeometry(argv[i]) == MagickFalse)
2740 ThrowConvertInvalidArgumentException(option,argv[i]);
2741 break;
2742 }
2743 if (LocaleCompare("sigmoidal-contrast",option+1) == 0)
2744 {
2745 i++;
cristye81f5522014-05-07 01:25:59 +00002746 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002747 ThrowConvertException(OptionError,"MissingArgument",option);
2748 if (IsGeometry(argv[i]) == MagickFalse)
2749 ThrowConvertInvalidArgumentException(option,argv[i]);
2750 break;
2751 }
2752 if (LocaleCompare("size",option+1) == 0)
2753 {
2754 if (*option == '+')
2755 break;
2756 i++;
cristye81f5522014-05-07 01:25:59 +00002757 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002758 ThrowConvertException(OptionError,"MissingArgument",option);
2759 if (IsGeometry(argv[i]) == MagickFalse)
2760 ThrowConvertInvalidArgumentException(option,argv[i]);
2761 break;
2762 }
2763 if (LocaleCompare("sketch",option+1) == 0)
2764 {
2765 if (*option == '+')
2766 break;
2767 i++;
cristye81f5522014-05-07 01:25:59 +00002768 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002769 ThrowConvertException(OptionError,"MissingArgument",option);
2770 if (IsGeometry(argv[i]) == MagickFalse)
2771 ThrowConvertInvalidArgumentException(option,argv[i]);
2772 break;
2773 }
cristy4285d782011-02-09 20:12:28 +00002774 if (LocaleCompare("smush",option+1) == 0)
2775 {
cristy4285d782011-02-09 20:12:28 +00002776 i++;
cristye81f5522014-05-07 01:25:59 +00002777 if (i == (ssize_t) argc)
cristy4285d782011-02-09 20:12:28 +00002778 ThrowConvertException(OptionError,"MissingArgument",option);
2779 if (IsGeometry(argv[i]) == MagickFalse)
2780 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy4285d782011-02-09 20:12:28 +00002781 break;
2782 }
cristy3ed852e2009-09-05 21:47:34 +00002783 if (LocaleCompare("solarize",option+1) == 0)
2784 {
2785 if (*option == '+')
2786 break;
2787 i++;
cristye81f5522014-05-07 01:25:59 +00002788 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002789 ThrowConvertException(OptionError,"MissingArgument",option);
2790 if (IsGeometry(argv[i]) == MagickFalse)
2791 ThrowConvertInvalidArgumentException(option,argv[i]);
2792 break;
2793 }
2794 if (LocaleCompare("sparse-color",option+1) == 0)
2795 {
cristybb503372010-05-27 20:51:26 +00002796 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002797 op;
2798
2799 i++;
cristybb503372010-05-27 20:51:26 +00002800 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002801 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002802 op=ParseCommandOption(MagickSparseColorOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002803 if (op < 0)
2804 ThrowConvertException(OptionError,"UnrecognizedSparseColorMethod",
2805 argv[i]);
2806 i++;
cristye81f5522014-05-07 01:25:59 +00002807 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002808 ThrowConvertException(OptionError,"MissingArgument",option);
2809 break;
2810 }
2811 if (LocaleCompare("splice",option+1) == 0)
2812 {
2813 if (*option == '+')
2814 break;
2815 i++;
cristye81f5522014-05-07 01:25:59 +00002816 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002817 ThrowConvertException(OptionError,"MissingArgument",option);
2818 if (IsGeometry(argv[i]) == MagickFalse)
2819 ThrowConvertInvalidArgumentException(option,argv[i]);
2820 break;
2821 }
2822 if (LocaleCompare("spread",option+1) == 0)
2823 {
2824 if (*option == '+')
2825 break;
2826 i++;
cristye81f5522014-05-07 01:25:59 +00002827 if ((i == (ssize_t) argc) ||
cristy3ed852e2009-09-05 21:47:34 +00002828 (IsGeometry(argv[i]) == MagickFalse))
2829 ThrowConvertException(OptionError,"MissingArgument",option);
2830 break;
2831 }
cristy0834d642011-03-18 18:26:08 +00002832 if (LocaleCompare("statistic",option+1) == 0)
2833 {
2834 ssize_t
2835 op;
2836
2837 if (*option == '+')
2838 break;
2839 i++;
2840 if (i == (ssize_t) argc)
2841 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002842 op=ParseCommandOption(MagickStatisticOptions,MagickFalse,argv[i]);
cristy0834d642011-03-18 18:26:08 +00002843 if (op < 0)
2844 ThrowConvertException(OptionError,"UnrecognizedStatisticType",
2845 argv[i]);
2846 i++;
cristye81f5522014-05-07 01:25:59 +00002847 if (i == (ssize_t) argc)
cristy0834d642011-03-18 18:26:08 +00002848 ThrowConvertException(OptionError,"MissingArgument",option);
2849 if (IsGeometry(argv[i]) == MagickFalse)
2850 ThrowConvertInvalidArgumentException(option,argv[i]);
2851 break;
2852 }
cristy3ed852e2009-09-05 21:47:34 +00002853 if (LocaleCompare("stretch",option+1) == 0)
2854 {
cristybb503372010-05-27 20:51:26 +00002855 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002856 stretch;
2857
2858 if (*option == '+')
2859 break;
2860 i++;
cristye81f5522014-05-07 01:25:59 +00002861 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002862 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002863 stretch=ParseCommandOption(MagickStretchOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002864 argv[i]);
2865 if (stretch < 0)
2866 ThrowConvertException(OptionError,"UnrecognizedStyleType",
2867 argv[i]);
2868 break;
2869 }
2870 if (LocaleCompare("strip",option+1) == 0)
2871 break;
2872 if (LocaleCompare("stroke",option+1) == 0)
2873 {
2874 if (*option == '+')
2875 break;
2876 i++;
cristye81f5522014-05-07 01:25:59 +00002877 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002878 ThrowConvertException(OptionError,"MissingArgument",option);
2879 break;
2880 }
2881 if (LocaleCompare("strokewidth",option+1) == 0)
2882 {
2883 if (*option == '+')
2884 break;
2885 i++;
cristye81f5522014-05-07 01:25:59 +00002886 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002887 ThrowConvertException(OptionError,"MissingArgument",option);
2888 if (IsGeometry(argv[i]) == MagickFalse)
2889 ThrowConvertInvalidArgumentException(option,argv[i]);
2890 break;
2891 }
2892 if (LocaleCompare("style",option+1) == 0)
2893 {
cristybb503372010-05-27 20:51:26 +00002894 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002895 style;
2896
2897 if (*option == '+')
2898 break;
2899 i++;
cristye81f5522014-05-07 01:25:59 +00002900 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002901 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002902 style=ParseCommandOption(MagickStyleOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002903 if (style < 0)
2904 ThrowConvertException(OptionError,"UnrecognizedStyleType",
2905 argv[i]);
2906 break;
2907 }
cristy52ad9e92013-02-08 23:23:29 +00002908 if (LocaleCompare("support",option+1) == 0)
2909 {
2910 i++; /* deprecated */
2911 break;
2912 }
cristy3ed852e2009-09-05 21:47:34 +00002913 if (LocaleCompare("swap",option+1) == 0)
2914 {
2915 if (*option == '+')
2916 break;
2917 i++;
cristye81f5522014-05-07 01:25:59 +00002918 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002919 ThrowConvertException(OptionError,"MissingArgument",option);
2920 if (IsGeometry(argv[i]) == MagickFalse)
2921 ThrowConvertInvalidArgumentException(option,argv[i]);
2922 break;
2923 }
2924 if (LocaleCompare("swirl",option+1) == 0)
2925 {
2926 if (*option == '+')
2927 break;
2928 i++;
cristye81f5522014-05-07 01:25:59 +00002929 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002930 ThrowConvertException(OptionError,"MissingArgument",option);
2931 if (IsGeometry(argv[i]) == MagickFalse)
2932 ThrowConvertInvalidArgumentException(option,argv[i]);
2933 break;
2934 }
cristyd9a29192010-10-16 16:49:53 +00002935 if (LocaleCompare("synchronize",option+1) == 0)
2936 break;
cristy3ed852e2009-09-05 21:47:34 +00002937 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2938 }
2939 case 't':
2940 {
2941 if (LocaleCompare("taint",option+1) == 0)
2942 break;
2943 if (LocaleCompare("texture",option+1) == 0)
2944 {
2945 if (*option == '+')
2946 break;
2947 i++;
cristye81f5522014-05-07 01:25:59 +00002948 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002949 ThrowConvertException(OptionError,"MissingArgument",option);
2950 break;
2951 }
anthony52bef752012-03-27 13:54:47 +00002952 if (LocaleCompare("threshold",option+1) == 0)
cristy3ed852e2009-09-05 21:47:34 +00002953 {
2954 if (*option == '+')
2955 break;
2956 i++;
cristye81f5522014-05-07 01:25:59 +00002957 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002958 ThrowConvertException(OptionError,"MissingArgument",option);
2959 if (IsGeometry(argv[i]) == MagickFalse)
2960 ThrowConvertInvalidArgumentException(option,argv[i]);
2961 break;
2962 }
anthony52bef752012-03-27 13:54:47 +00002963 if (LocaleCompare("thumbnail",option+1) == 0)
cristy3ed852e2009-09-05 21:47:34 +00002964 {
2965 if (*option == '+')
2966 break;
2967 i++;
cristye81f5522014-05-07 01:25:59 +00002968 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002969 ThrowConvertException(OptionError,"MissingArgument",option);
2970 if (IsGeometry(argv[i]) == MagickFalse)
2971 ThrowConvertInvalidArgumentException(option,argv[i]);
2972 break;
2973 }
2974 if (LocaleCompare("tile",option+1) == 0)
2975 {
2976 if (*option == '+')
2977 break;
2978 i++;
cristye81f5522014-05-07 01:25:59 +00002979 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002980 ThrowConvertException(OptionError,"MissingArgument",option);
2981 break;
2982 }
2983 if (LocaleCompare("tile-offset",option+1) == 0)
2984 {
2985 if (*option == '+')
2986 break;
2987 i++;
cristye81f5522014-05-07 01:25:59 +00002988 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002989 ThrowConvertException(OptionError,"MissingArgument",option);
2990 if (IsGeometry(argv[i]) == MagickFalse)
2991 ThrowConvertInvalidArgumentException(option,argv[i]);
2992 break;
2993 }
2994 if (LocaleCompare("tint",option+1) == 0)
2995 {
2996 if (*option == '+')
2997 break;
2998 i++;
cristye81f5522014-05-07 01:25:59 +00002999 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003000 ThrowConvertException(OptionError,"MissingArgument",option);
3001 if (IsGeometry(argv[i]) == MagickFalse)
3002 ThrowConvertInvalidArgumentException(option,argv[i]);
3003 break;
3004 }
3005 if (LocaleCompare("transform",option+1) == 0)
3006 break;
3007 if (LocaleCompare("transparent",option+1) == 0)
3008 {
3009 i++;
cristye81f5522014-05-07 01:25:59 +00003010 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003011 ThrowConvertException(OptionError,"MissingArgument",option);
3012 break;
3013 }
3014 if (LocaleCompare("transparent-color",option+1) == 0)
3015 {
3016 if (*option == '+')
3017 break;
3018 i++;
cristye81f5522014-05-07 01:25:59 +00003019 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003020 ThrowConvertException(OptionError,"MissingArgument",option);
3021 break;
3022 }
3023 if (LocaleCompare("transpose",option+1) == 0)
3024 break;
3025 if (LocaleCompare("transverse",option+1) == 0)
3026 break;
3027 if (LocaleCompare("treedepth",option+1) == 0)
3028 {
3029 if (*option == '+')
3030 break;
3031 i++;
cristye81f5522014-05-07 01:25:59 +00003032 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003033 ThrowConvertException(OptionError,"MissingArgument",option);
3034 if (IsGeometry(argv[i]) == MagickFalse)
3035 ThrowConvertInvalidArgumentException(option,argv[i]);
3036 break;
3037 }
3038 if (LocaleCompare("trim",option+1) == 0)
3039 break;
3040 if (LocaleCompare("type",option+1) == 0)
3041 {
cristybb503372010-05-27 20:51:26 +00003042 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00003043 type;
3044
3045 if (*option == '+')
3046 break;
3047 i++;
cristye81f5522014-05-07 01:25:59 +00003048 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003049 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00003050 type=ParseCommandOption(MagickTypeOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00003051 if (type < 0)
3052 ThrowConvertException(OptionError,"UnrecognizedImageType",
3053 argv[i]);
3054 break;
3055 }
3056 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3057 }
3058 case 'u':
3059 {
3060 if (LocaleCompare("undercolor",option+1) == 0)
3061 {
3062 if (*option == '+')
3063 break;
3064 i++;
cristye81f5522014-05-07 01:25:59 +00003065 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003066 ThrowConvertException(OptionError,"MissingArgument",option);
3067 break;
3068 }
3069 if (LocaleCompare("unique-colors",option+1) == 0)
3070 break;
3071 if (LocaleCompare("units",option+1) == 0)
3072 {
cristybb503372010-05-27 20:51:26 +00003073 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00003074 units;
3075
3076 if (*option == '+')
3077 break;
3078 i++;
cristye81f5522014-05-07 01:25:59 +00003079 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003080 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00003081 units=ParseCommandOption(MagickResolutionOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00003082 argv[i]);
3083 if (units < 0)
3084 ThrowConvertException(OptionError,"UnrecognizedUnitsType",
3085 argv[i]);
3086 break;
3087 }
3088 if (LocaleCompare("unsharp",option+1) == 0)
3089 {
3090 if (*option == '+')
3091 break;
3092 i++;
cristye81f5522014-05-07 01:25:59 +00003093 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003094 ThrowConvertException(OptionError,"MissingArgument",option);
3095 if (IsGeometry(argv[i]) == MagickFalse)
3096 ThrowConvertInvalidArgumentException(option,argv[i]);
3097 break;
3098 }
3099 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3100 }
3101 case 'v':
3102 {
3103 if (LocaleCompare("verbose",option+1) == 0)
3104 break;
3105 if ((LocaleCompare("version",option+1) == 0) ||
3106 (LocaleCompare("-version",option+1) == 0))
3107 {
cristy4f7a6132012-12-23 00:35:19 +00003108 ListMagickVersion(stdout);
cristy3ed852e2009-09-05 21:47:34 +00003109 break;
3110 }
3111 if (LocaleCompare("view",option+1) == 0)
3112 {
3113 if (*option == '+')
3114 break;
3115 i++;
cristye81f5522014-05-07 01:25:59 +00003116 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003117 ThrowConvertException(OptionError,"MissingArgument",option);
3118 break;
3119 }
3120 if (LocaleCompare("vignette",option+1) == 0)
3121 {
3122 if (*option == '+')
3123 break;
3124 i++;
cristye81f5522014-05-07 01:25:59 +00003125 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003126 ThrowConvertException(OptionError,"MissingArgument",option);
3127 if (IsGeometry(argv[i]) == MagickFalse)
3128 ThrowConvertInvalidArgumentException(option,argv[i]);
3129 break;
3130 }
3131 if (LocaleCompare("virtual-pixel",option+1) == 0)
3132 {
cristybb503372010-05-27 20:51:26 +00003133 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00003134 method;
3135
3136 if (*option == '+')
3137 break;
3138 i++;
cristye81f5522014-05-07 01:25:59 +00003139 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003140 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00003141 method=ParseCommandOption(MagickVirtualPixelOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00003142 argv[i]);
3143 if (method < 0)
3144 ThrowConvertException(OptionError,
3145 "UnrecognizedVirtualPixelMethod",argv[i]);
3146 break;
3147 }
3148 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3149 }
3150 case 'w':
3151 {
3152 if (LocaleCompare("wave",option+1) == 0)
3153 {
3154 i++;
cristye81f5522014-05-07 01:25:59 +00003155 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003156 ThrowConvertException(OptionError,"MissingArgument",option);
3157 if (IsGeometry(argv[i]) == MagickFalse)
3158 ThrowConvertInvalidArgumentException(option,argv[i]);
3159 break;
3160 }
3161 if (LocaleCompare("weight",option+1) == 0)
3162 {
3163 if (*option == '+')
3164 break;
3165 i++;
cristye81f5522014-05-07 01:25:59 +00003166 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003167 ThrowConvertException(OptionError,"MissingArgument",option);
3168 break;
3169 }
3170 if (LocaleCompare("white-point",option+1) == 0)
3171 {
3172 if (*option == '+')
3173 break;
3174 i++;
cristye81f5522014-05-07 01:25:59 +00003175 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003176 ThrowConvertException(OptionError,"MissingArgument",option);
3177 if (IsGeometry(argv[i]) == MagickFalse)
3178 ThrowConvertInvalidArgumentException(option,argv[i]);
3179 break;
3180 }
3181 if (LocaleCompare("white-threshold",option+1) == 0)
3182 {
3183 if (*option == '+')
3184 break;
3185 i++;
cristye81f5522014-05-07 01:25:59 +00003186 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003187 ThrowConvertException(OptionError,"MissingArgument",option);
3188 if (IsGeometry(argv[i]) == MagickFalse)
3189 ThrowConvertInvalidArgumentException(option,argv[i]);
3190 break;
3191 }
3192 if (LocaleCompare("write",option+1) == 0)
3193 {
3194 i++;
cristye81f5522014-05-07 01:25:59 +00003195 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003196 ThrowConvertException(OptionError,"MissingArgument",option);
3197 break;
3198 }
3199 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3200 }
3201 case '?':
3202 break;
3203 default:
3204 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3205 }
cristy042ee782011-04-22 18:48:30 +00003206 fire=(GetCommandOptionFlags(MagickCommandOptions,MagickFalse,option) &
3207 FireOptionFlag) == 0 ? MagickFalse : MagickTrue;
cristy3ed852e2009-09-05 21:47:34 +00003208 if (fire != MagickFalse)
3209 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
3210 }
3211 if (k != 0)
3212 ThrowConvertException(OptionError,"UnbalancedParenthesis",argv[i]);
cristybb503372010-05-27 20:51:26 +00003213 if (i-- != (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00003214 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
cristy3ed852e2009-09-05 21:47:34 +00003215 FinalizeImageSettings(image_info,image,MagickTrue);
cristy94f20072009-09-12 02:12:36 +00003216 if (image == (Image *) NULL)
anthonye5b39652012-04-21 05:37:29 +00003217 ThrowConvertException(OptionError,"NoImagesDefined",argv[argc-1]);
3218 if (IsCommandOption(argv[argc-1]))
3219 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
3220 if (LocaleCompare(" ",argv[argc-1])==0) /* common line continuation error */
cristy94f20072009-09-12 02:12:36 +00003221 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
cristy3ed852e2009-09-05 21:47:34 +00003222 status&=WriteImages(image_info,image,argv[argc-1],exception);
3223 if (metadata != (char **) NULL)
3224 {
3225 char
3226 *text;
3227
cristy018f07f2011-09-04 21:15:19 +00003228 text=InterpretImageProperties(image_info,image,format,exception);
cristy3ed852e2009-09-05 21:47:34 +00003229 if (text == (char *) NULL)
3230 ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
3231 GetExceptionMessage(errno));
3232 (void) ConcatenateString(&(*metadata),text);
3233 text=DestroyString(text);
3234 }
3235 DestroyConvert();
3236 return(status != 0 ? MagickTrue : MagickFalse);
3237}