blob: e9e7db64edef623c07f970711a1b8b1f2444fc18 [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% %
Cristy7ce65e72015-12-12 18:03:16 -050020% Copyright 1999-2016 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",
dirk3505d872015-11-01 23:30:09 +0100241 "-local-contrast geometry",
242 " enhance local contrast",
cristy2fc10e52014-04-26 14:13:53 +0000243 "-mean-shift geometry delineate arbitrarily shaped clusters in the image",
cristy52ad9e92013-02-08 23:23:29 +0000244 "-median geometry apply a median filter to the image",
245 "-mode geometry make each pixel the 'predominant color' of the",
246 " neighborhood",
cristy3ed852e2009-09-05 21:47:34 +0000247 "-modulate value vary the brightness, saturation, and hue",
248 "-monochrome transform image to black and white",
cristy7c1b9fd2010-02-02 14:36:00 +0000249 "-morphology method kernel",
anthony29188a82010-01-22 10:12:34 +0000250 " apply a morphology method to the image",
cristy3ed852e2009-09-05 21:47:34 +0000251 "-motion-blur geometry",
252 " simulate motion blur",
253 "-negate replace every pixel with its complementary color ",
cristy3c741502011-04-01 23:21:16 +0000254 "-noise geometry add or reduce noise in an image",
cristy3ed852e2009-09-05 21:47:34 +0000255 "-normalize transform image to span the full range of colors",
256 "-opaque color change this color to the fill color",
257 "-ordered-dither NxN",
258 " add a noise pattern to the image with specific",
259 " amplitudes",
260 "-paint radius simulate an oil painting",
cristy3d629e22012-11-04 01:32:13 +0000261 "-perceptible epsilon",
cristyb4671fc2012-11-04 15:02:10 +0000262 " pixel value less than |epsilon| become epsilon or",
263 " -epsilon",
cristy3ed852e2009-09-05 21:47:34 +0000264 "-polaroid angle simulate a Polaroid picture",
265 "-posterize levels reduce the image to a limited number of color levels",
cristy3ed852e2009-09-05 21:47:34 +0000266 "-profile filename add, delete, or apply an image profile",
267 "-quantize colorspace reduce colors in this colorspace",
cristy3ed852e2009-09-05 21:47:34 +0000268 "-raise value lighten/darken image edges to create a 3-D effect",
269 "-random-threshold low,high",
270 " random threshold the image",
cristy3ed852e2009-09-05 21:47:34 +0000271 "-region geometry apply options to a portion of the image",
272 "-render render vector graphics",
273 "-repage geometry size and location of an image canvas",
274 "-resample geometry change the resolution of an image",
275 "-resize geometry resize the image",
276 "-roll geometry roll an image vertically or horizontally",
277 "-rotate degrees apply Paeth rotation to the image",
dirk6d612cf2014-03-13 21:17:23 +0000278 "-rotational-blur angle",
279 " rotational blur the image",
cristy3ed852e2009-09-05 21:47:34 +0000280 "-sample geometry scale image with pixel sampling",
281 "-scale geometry scale the image",
282 "-segment values segment an image",
283 "-selective-blur geometry",
284 " selectively blur pixels within a contrast threshold",
285 "-sepia-tone threshold",
286 " simulate a sepia-toned photo",
287 "-set property value set an image property",
288 "-shade degrees shade the image using a distant light source",
289 "-shadow geometry simulate an image shadow",
290 "-sharpen geometry sharpen the image",
291 "-shave geometry shave pixels from the image edges",
cristycee97112010-05-28 00:44:52 +0000292 "-shear geometry slide one edge of the image along the X or Y axis",
cristy3ed852e2009-09-05 21:47:34 +0000293 "-sigmoidal-contrast geometry",
cristyb4671fc2012-11-04 15:02:10 +0000294 " increase the contrast without saturating highlights or",
295 " shadows",
cristy3ed852e2009-09-05 21:47:34 +0000296 "-sketch geometry simulate a pencil sketch",
297 "-solarize threshold negate all pixels above the threshold level",
298 "-sparse-color method args",
299 " fill in a image based on a few color points",
300 "-splice geometry splice the background color into the image",
301 "-spread radius displace image pixels by a random amount",
cristy95c38342011-03-18 22:39:51 +0000302 "-statistic type geometry",
cristyb4671fc2012-11-04 15:02:10 +0000303 " replace each pixel with corresponding statistic from the",
304 " neighborhood",
cristy3ed852e2009-09-05 21:47:34 +0000305 "-strip strip image of all profiles and comments",
306 "-swirl degrees swirl image pixels about the center",
307 "-threshold value threshold the image",
308 "-thumbnail geometry create a thumbnail of the image",
309 "-tile filename tile image when filling a graphic primitive",
310 "-tint value tint the image with the fill color",
311 "-transform affine transform image",
312 "-transparent color make this color transparent within the image",
313 "-transpose flip image vertically and rotate 90 degrees",
314 "-transverse flop image horizontally and rotate 270 degrees",
315 "-trim trim image edges",
316 "-type type image type",
317 "-unique-colors discard all but one of any pixel color",
318 "-unsharp geometry sharpen the image",
319 "-vignette geometry soften the edges of the image in vignette style",
cristycee97112010-05-28 00:44:52 +0000320 "-wave geometry alter an image along a sine wave",
cristy3ed852e2009-09-05 21:47:34 +0000321 "-white-threshold value",
322 " force all pixels above the threshold into white",
323 (char *) NULL
324 },
325 *sequence_operators[]=
326 {
cristy4285d782011-02-09 20:12:28 +0000327 "-append append an image sequence",
cristy3ed852e2009-09-05 21:47:34 +0000328 "-clut apply a color lookup table to the image",
329 "-coalesce merge a sequence of images",
330 "-combine combine a sequence of images",
cristyb92495a2013-08-20 00:10:59 +0000331 "-compare mathematically and visually annotate the difference between an image and its reconstruction",
cristy790190d2013-10-04 00:51:51 +0000332 "-complex operator perform complex mathematics on an image sequence",
cristy3ed852e2009-09-05 21:47:34 +0000333 "-composite composite image",
cristy2a0cfbe2015-06-22 23:53:25 +0000334 "-copy geometry offset",
335 " copy pixels from one area of an image to another",
cristy3ed852e2009-09-05 21:47:34 +0000336 "-crop geometry cut out a rectangular region of the image",
337 "-deconstruct break down an image sequence into constituent parts",
cristyd18ae7c2010-03-07 17:39:52 +0000338 "-evaluate-sequence operator",
339 " evaluate an arithmetic, relational, or logical expression",
cristy3ed852e2009-09-05 21:47:34 +0000340 "-flatten flatten a sequence of images",
341 "-fx expression apply mathematical expression to an image channel(s)",
342 "-hald-clut apply a Hald color lookup table to the image",
cristye0b9b8f2013-03-28 12:39:39 +0000343 "-layers method optimize, merge, or compare image layers",
cristy3ed852e2009-09-05 21:47:34 +0000344 "-morph value morph an image sequence",
345 "-mosaic create a mosaic from an image sequence",
cristy8cdfb342012-11-11 21:44:36 +0000346 "-poly terms build a polynomial from the image sequence and the corresponding",
cristydbc2da92012-11-12 13:16:07 +0000347 " terms (coefficients and degree pairs).",
cristy36b94822010-05-20 12:48:16 +0000348 "-print string interpret string and print to console",
cristy3ed852e2009-09-05 21:47:34 +0000349 "-process arguments process the image with a custom image filter",
cristy4285d782011-02-09 20:12:28 +0000350 "-smush geometry smush an image sequence together",
cristy3ed852e2009-09-05 21:47:34 +0000351 "-write filename write images to this file",
352 (char *) NULL
353 },
354 *settings[]=
355 {
356 "-adjoin join images into a single multi-image file",
357 "-affine matrix affine transform matrix",
358 "-alpha option activate, deactivate, reset, or set the alpha channel",
359 "-antialias remove pixel-aliasing",
360 "-authenticate password",
361 " decipher image with this password",
362 "-attenuate value lessen (or intensify) when adding noise to an image",
363 "-background color background color",
364 "-bias value add bias when convolving an image",
365 "-black-point-compensation",
366 " use black point compensation",
367 "-blue-primary point chromaticity blue primary point",
368 "-bordercolor color border color",
369 "-caption string assign a caption to an image",
cristy1e618102013-03-17 14:52:31 +0000370 "-clip clip along the first path from the 8BIM profile",
371 "-clip-mask filename associate a clip mask with the image",
372 "-clip-path id clip along a named path from the 8BIM profile",
cristy3ed852e2009-09-05 21:47:34 +0000373 "-colors value preferred number of colors in the image",
374 "-colorspace type alternate image colorspace",
375 "-comment string annotate image with comment",
376 "-compose operator set image composite operator",
377 "-compress type type of pixel compression when writing the image",
378 "-define format:option",
379 " define one or more image format options",
380 "-delay value display the next image after pausing",
381 "-density geometry horizontal and vertical density of the image",
382 "-depth value image depth",
cristyc9b12952010-03-28 01:12:28 +0000383 "-direction type render text right-to-left or left-to-right",
cristy3ed852e2009-09-05 21:47:34 +0000384 "-display server get image or font from this X server",
385 "-dispose method layer disposal method",
386 "-dither method apply error diffusion to image",
387 "-encoding type text encoding type",
388 "-endian type endianness (MSB or LSB) of the image",
389 "-family name render text with this font family",
cristy14154222012-06-15 23:21:49 +0000390 "-features distance analyze image features (e.g. contrast, correlation)",
cristy3ed852e2009-09-05 21:47:34 +0000391 "-fill color color to use when filling a graphic primitive",
392 "-filter type use this filter when resizing an image",
393 "-font name render text with this font",
394 "-format \"string\" output formatted image characteristics",
395 "-fuzz distance colors within this distance are considered equal",
396 "-gravity type horizontal and vertical text placement",
397 "-green-primary point chromaticity green primary point",
cristy70e9f682013-03-12 22:31:22 +0000398 "-intensity method method to generate an intensity value from a pixel",
cristy3ed852e2009-09-05 21:47:34 +0000399 "-intent type type of rendering intent when managing the image color",
400 "-interlace type type of image interlacing scheme",
cristyb32b90a2009-09-07 21:45:48 +0000401 "-interline-spacing value",
402 " set the space between two text lines",
cristy3ed852e2009-09-05 21:47:34 +0000403 "-interpolate method pixel color interpolation method",
404 "-interword-spacing value",
405 " set the space between two words",
406 "-kerning value set the space between two letters",
407 "-label string assign a label to an image",
408 "-limit type value pixel cache resource limit",
409 "-loop iterations add Netscape loop extension to your GIF animation",
cristye9252c22013-07-30 15:43:21 +0000410 "-matte store matte channel if the image has one",
cristy3ed852e2009-09-05 21:47:34 +0000411 "-mattecolor color frame color",
cristy80b1dee2014-01-09 11:27:24 +0000412 "-moments report image moments",
cristy3ed852e2009-09-05 21:47:34 +0000413 "-monitor monitor progress",
414 "-orient type image orientation",
415 "-page geometry size and location of an image canvas (setting)",
416 "-ping efficiently determine image attributes",
417 "-pointsize value font point size",
cristy7c1b9fd2010-02-02 14:36:00 +0000418 "-precision value maximum number of significant digits to print",
cristy3ed852e2009-09-05 21:47:34 +0000419 "-preview type image preview type",
420 "-quality value JPEG/MIFF/PNG compression level",
421 "-quiet suppress all warning messages",
cristy327030c2015-07-25 18:05:50 +0000422 "-read-mask filename associate a read mask with the image",
cristy3ed852e2009-09-05 21:47:34 +0000423 "-red-primary point chromaticity red primary point",
424 "-regard-warnings pay attention to warning messages",
425 "-remap filename transform image colors to match this set of colors",
426 "-respect-parentheses settings remain in effect until parenthesis boundary",
427 "-sampling-factor geometry",
428 " horizontal and vertical sampling factor",
429 "-scene value image scene number",
430 "-seed value seed a new sequence of pseudo-random numbers",
431 "-size geometry width and height of image",
432 "-stretch type render text with this font stretch",
433 "-stroke color graphic primitive stroke color",
434 "-strokewidth value graphic primitive stroke width",
435 "-style type render text with this font style",
cristye9252c22013-07-30 15:43:21 +0000436 "-support factor resize support: > 1.0 is blurry, < 1.0 is sharp",
cristyd9a29192010-10-16 16:49:53 +0000437 "-synchronize synchronize image to storage device",
438 "-taint declare the image as modified",
cristy3ed852e2009-09-05 21:47:34 +0000439 "-texture filename name of texture to tile onto the image background",
440 "-tile-offset geometry",
441 " tile offset",
442 "-treedepth value color tree depth",
443 "-transparent-color color",
444 " transparent color",
445 "-undercolor color annotation bounding box color",
446 "-units type the units of image resolution",
447 "-verbose print detailed information about the image",
448 "-view FlashPix viewing transforms",
449 "-virtual-pixel method",
450 " virtual pixel access method",
451 "-weight type render text with this font weight",
452 "-white-point point chromaticity white point",
cristy327030c2015-07-25 18:05:50 +0000453 "-write-mask filename associate a write mask with the image",
cristy3ed852e2009-09-05 21:47:34 +0000454 (char *) NULL
455 },
456 *stack_operators[]=
457 {
anthonyb69c4b32011-03-23 04:37:44 +0000458 "-clone indexes clone an image",
459 "-delete indexes delete the image from the image sequence",
460 "-duplicate count,indexes",
cristy5d28d482011-03-20 21:59:40 +0000461 " duplicate an image one or more times",
cristy3ed852e2009-09-05 21:47:34 +0000462 "-insert index insert last image into the image sequence",
anthony9bd15492011-03-23 02:11:13 +0000463 "-reverse reverse image sequence",
cristy3ed852e2009-09-05 21:47:34 +0000464 "-swap indexes swap two images in the image sequence",
465 (char *) NULL
466 };
467
468 const char
469 **p;
470
cristy4f7a6132012-12-23 00:35:19 +0000471 ListMagickVersion(stdout);
cristy3ed852e2009-09-05 21:47:34 +0000472 (void) printf("Usage: %s [options ...] file [ [options ...] "
473 "file ...] [options ...] file\n",GetClientName());
474 (void) printf("\nImage Settings:\n");
475 for (p=settings; *p != (char *) NULL; p++)
476 (void) printf(" %s\n",*p);
477 (void) printf("\nImage Operators:\n");
478 for (p=operators; *p != (char *) NULL; p++)
479 (void) printf(" %s\n",*p);
cristy87c02f42012-02-24 00:19:10 +0000480 (void) printf("\nImage Channel Operators:\n");
481 for (p=channel_operators; *p != (char *) NULL; p++)
482 (void) printf(" %s\n",*p);
cristy3ed852e2009-09-05 21:47:34 +0000483 (void) printf("\nImage Sequence Operators:\n");
484 for (p=sequence_operators; *p != (char *) NULL; p++)
485 (void) printf(" %s\n",*p);
486 (void) printf("\nImage Stack Operators:\n");
487 for (p=stack_operators; *p != (char *) NULL; p++)
488 (void) printf(" %s\n",*p);
489 (void) printf("\nMiscellaneous Options:\n");
490 for (p=miscellaneous; *p != (char *) NULL; p++)
491 (void) printf(" %s\n",*p);
492 (void) printf(
anthonye5b39652012-04-21 05:37:29 +0000493 "\nBy default, the image format of 'file' is determined by its magic\n");
cristy3ed852e2009-09-05 21:47:34 +0000494 (void) printf(
495 "number. To specify a particular image format, precede the filename\n");
496 (void) printf(
497 "with an image format name and a colon (i.e. ps:image) or specify the\n");
498 (void) printf(
499 "image type as the filename suffix (i.e. image.ps). Specify 'file' as\n");
500 (void) printf("'-' for standard input or output.\n");
501 return(MagickFalse);
502}
503
504WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
505 int argc,char **argv,char **metadata,ExceptionInfo *exception)
506{
507#define NotInitialized (unsigned int) (~0)
508#define DestroyConvert() \
509{ \
510 DestroyImageStack(); \
cristybb503372010-05-27 20:51:26 +0000511 for (i=0; i < (ssize_t) argc; i++) \
cristy3ed852e2009-09-05 21:47:34 +0000512 argv[i]=DestroyString(argv[i]); \
513 argv=(char **) RelinquishMagickMemory(argv); \
514}
515#define ThrowConvertException(asperity,tag,option) \
516{ \
cristyefe601c2013-01-05 17:51:12 +0000517 (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
cristy3ed852e2009-09-05 21:47:34 +0000518 option); \
519 DestroyConvert(); \
520 return(MagickFalse); \
521}
522#define ThrowConvertInvalidArgumentException(option,argument) \
523{ \
524 (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
anthonye5b39652012-04-21 05:37:29 +0000525 "InvalidArgument","'%s': %s",option,argument); \
cristy3ed852e2009-09-05 21:47:34 +0000526 DestroyConvert(); \
527 return(MagickFalse); \
528}
529
530 char
531 *filename,
532 *option;
533
534 const char
535 *format;
536
537 Image
538 *image;
539
540 ImageStack
541 image_stack[MaxImageStackDepth+1];
542
cristy3ed852e2009-09-05 21:47:34 +0000543 MagickBooleanType
544 fire,
cristyebbcfea2011-02-25 02:43:54 +0000545 pend,
546 respect_parenthesis;
cristy3ed852e2009-09-05 21:47:34 +0000547
548 MagickStatusType
549 status;
550
cristybb503372010-05-27 20:51:26 +0000551 register ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000552 i;
553
cristy9d314ff2011-03-09 01:30:28 +0000554 ssize_t
555 j,
556 k;
557
cristy3ed852e2009-09-05 21:47:34 +0000558 /*
559 Set defaults.
560 */
561 assert(image_info != (ImageInfo *) NULL);
cristye1c94d92015-06-28 12:16:33 +0000562 assert(image_info->signature == MagickCoreSignature);
cristy3ed852e2009-09-05 21:47:34 +0000563 if (image_info->debug != MagickFalse)
564 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
565 assert(exception != (ExceptionInfo *) NULL);
566 if (argc == 2)
567 {
568 option=argv[1];
569 if ((LocaleCompare("version",option+1) == 0) ||
570 (LocaleCompare("-version",option+1) == 0))
571 {
cristy4f7a6132012-12-23 00:35:19 +0000572 ListMagickVersion(stdout);
cristy3ed852e2009-09-05 21:47:34 +0000573 return(MagickFalse);
574 }
575 }
576 if (argc < 3)
cristy13e61a12010-02-04 20:19:00 +0000577 return(ConvertUsage());
cristy3ed852e2009-09-05 21:47:34 +0000578 filename=(char *) NULL;
579 format="%w,%h,%m";
580 j=1;
581 k=0;
582 NewImageStack();
583 option=(char *) NULL;
584 pend=MagickFalse;
cristyebbcfea2011-02-25 02:43:54 +0000585 respect_parenthesis=MagickFalse;
cristy3ed852e2009-09-05 21:47:34 +0000586 status=MagickTrue;
587 /*
588 Parse command-line arguments.
589 */
590 ReadCommandlLine(argc,&argv);
591 status=ExpandFilenames(&argc,&argv);
592 if (status == MagickFalse)
593 ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
594 GetExceptionMessage(errno));
595 if ((argc > 2) && (LocaleCompare("-concatenate",argv[1]) == 0))
596 return(ConcatenateImages(argc,argv,exception));
cristybb503372010-05-27 20:51:26 +0000597 for (i=1; i < (ssize_t) (argc-1); i++)
cristy3ed852e2009-09-05 21:47:34 +0000598 {
599 option=argv[i];
600 if (LocaleCompare(option,"(") == 0)
601 {
602 FireImageStack(MagickTrue,MagickTrue,pend);
603 if (k == MaxImageStackDepth)
604 ThrowConvertException(OptionError,"ParenthesisNestedTooDeeply",
605 option);
606 PushImageStack();
607 continue;
608 }
609 if (LocaleCompare(option,")") == 0)
610 {
611 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
612 if (k == 0)
613 ThrowConvertException(OptionError,"UnableToParseExpression",option);
614 PopImageStack();
615 continue;
616 }
cristy042ee782011-04-22 18:48:30 +0000617 if (IsCommandOption(option) == MagickFalse)
cristy3ed852e2009-09-05 21:47:34 +0000618 {
619 Image
620 *images;
621
622 /*
623 Read input image.
624 */
625 FireImageStack(MagickTrue,MagickTrue,pend);
626 filename=argv[i];
cristycee97112010-05-28 00:44:52 +0000627 if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
cristy3ed852e2009-09-05 21:47:34 +0000628 filename=argv[++i];
cristy3ed852e2009-09-05 21:47:34 +0000629 if (image_info->ping != MagickFalse)
cristy1b58f252012-03-01 01:41:41 +0000630 images=PingImages(image_info,filename,exception);
cristy3ed852e2009-09-05 21:47:34 +0000631 else
cristy1b58f252012-03-01 01:41:41 +0000632 images=ReadImages(image_info,filename,exception);
cristy3ed852e2009-09-05 21:47:34 +0000633 status&=(images != (Image *) NULL) &&
634 (exception->severity < ErrorException);
635 if (images == (Image *) NULL)
636 continue;
637 AppendImageStack(images);
638 continue;
639 }
640 pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
641 switch (*(option+1))
642 {
643 case 'a':
644 {
645 if (LocaleCompare("adaptive-blur",option+1) == 0)
646 {
647 i++;
cristye81f5522014-05-07 01:25:59 +0000648 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000649 ThrowConvertException(OptionError,"MissingArgument",option);
650 if (IsGeometry(argv[i]) == MagickFalse)
651 ThrowConvertInvalidArgumentException(option,argv[i]);
652 break;
653 }
654 if (LocaleCompare("adaptive-resize",option+1) == 0)
655 {
656 i++;
cristye81f5522014-05-07 01:25:59 +0000657 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000658 ThrowConvertException(OptionError,"MissingArgument",option);
659 if (IsGeometry(argv[i]) == MagickFalse)
660 ThrowConvertInvalidArgumentException(option,argv[i]);
661 break;
662 }
663 if (LocaleCompare("adaptive-sharpen",option+1) == 0)
664 {
665 i++;
cristye81f5522014-05-07 01:25:59 +0000666 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000667 ThrowConvertException(OptionError,"MissingArgument",option);
668 if (IsGeometry(argv[i]) == MagickFalse)
669 ThrowConvertInvalidArgumentException(option,argv[i]);
670 break;
671 }
672 if (LocaleCompare("adjoin",option+1) == 0)
673 break;
674 if (LocaleCompare("affine",option+1) == 0)
675 {
676 if (*option == '+')
677 break;
678 i++;
cristye81f5522014-05-07 01:25:59 +0000679 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000680 ThrowConvertException(OptionError,"MissingArgument",option);
cristy8cdfb342012-11-11 21:44:36 +0000681 if (IsGeometry(argv[i]) == MagickFalse)
682 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000683 break;
684 }
685 if (LocaleCompare("alpha",option+1) == 0)
686 {
cristybb503372010-05-27 20:51:26 +0000687 ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000688 type;
689
690 if (*option == '+')
691 break;
692 i++;
cristybb503372010-05-27 20:51:26 +0000693 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000694 ThrowConvertException(OptionError,"MissingArgument",option);
cristy3476df82015-06-22 18:43:46 +0000695 type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,
696 argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000697 if (type < 0)
cristy3476df82015-06-22 18:43:46 +0000698 ThrowConvertException(OptionError,
699 "UnrecognizedAlphaChannelOption",argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000700 break;
701 }
702 if (LocaleCompare("annotate",option+1) == 0)
703 {
704 if (*option == '+')
705 break;
706 i++;
cristye81f5522014-05-07 01:25:59 +0000707 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000708 ThrowConvertException(OptionError,"MissingArgument",option);
709 if (IsGeometry(argv[i]) == MagickFalse)
710 ThrowConvertInvalidArgumentException(option,argv[i]);
711 i++;
cristye81f5522014-05-07 01:25:59 +0000712 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000713 ThrowConvertException(OptionError,"MissingArgument",option);
714 break;
715 }
716 if (LocaleCompare("antialias",option+1) == 0)
717 break;
718 if (LocaleCompare("append",option+1) == 0)
719 break;
720 if (LocaleCompare("attenuate",option+1) == 0)
721 {
722 if (*option == '+')
723 break;
724 i++;
cristye81f5522014-05-07 01:25:59 +0000725 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000726 ThrowConvertException(OptionError,"MissingArgument",option);
727 if (IsGeometry(argv[i]) == MagickFalse)
728 ThrowConvertInvalidArgumentException(option,argv[i]);
729 break;
730 }
731 if (LocaleCompare("authenticate",option+1) == 0)
732 {
733 if (*option == '+')
734 break;
735 i++;
cristye81f5522014-05-07 01:25:59 +0000736 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000737 ThrowConvertException(OptionError,"MissingArgument",option);
738 break;
739 }
740 if (LocaleCompare("auto-gamma",option+1) == 0)
741 break;
742 if (LocaleCompare("auto-level",option+1) == 0)
743 break;
744 if (LocaleCompare("auto-orient",option+1) == 0)
745 break;
cristy52ad9e92013-02-08 23:23:29 +0000746 if (LocaleCompare("average",option+1) == 0)
747 break;
cristy3ed852e2009-09-05 21:47:34 +0000748 ThrowConvertException(OptionError,"UnrecognizedOption",option)
749 }
750 case 'b':
751 {
752 if (LocaleCompare("background",option+1) == 0)
753 {
754 if (*option == '+')
755 break;
756 i++;
cristye81f5522014-05-07 01:25:59 +0000757 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000758 ThrowConvertException(OptionError,"MissingArgument",option);
759 break;
760 }
761 if (LocaleCompare("bench",option+1) == 0)
762 {
763 if (*option == '+')
764 break;
765 i++;
cristye81f5522014-05-07 01:25:59 +0000766 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000767 ThrowConvertException(OptionError,"MissingArgument",option);
768 if (IsGeometry(argv[i]) == MagickFalse)
769 ThrowConvertInvalidArgumentException(option,argv[i]);
770 break;
771 }
772 if (LocaleCompare("bias",option+1) == 0)
773 {
774 if (*option == '+')
775 break;
776 i++;
cristye81f5522014-05-07 01:25:59 +0000777 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000778 ThrowConvertException(OptionError,"MissingArgument",option);
779 if (IsGeometry(argv[i]) == MagickFalse)
780 ThrowConvertInvalidArgumentException(option,argv[i]);
781 break;
782 }
783 if (LocaleCompare("black-point-compensation",option+1) == 0)
784 break;
785 if (LocaleCompare("black-threshold",option+1) == 0)
786 {
787 if (*option == '+')
788 break;
789 i++;
cristye81f5522014-05-07 01:25:59 +0000790 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000791 ThrowConvertException(OptionError,"MissingArgument",option);
792 if (IsGeometry(argv[i]) == MagickFalse)
793 ThrowConvertInvalidArgumentException(option,argv[i]);
794 break;
795 }
796 if (LocaleCompare("blue-primary",option+1) == 0)
797 {
798 if (*option == '+')
799 break;
800 i++;
cristye81f5522014-05-07 01:25:59 +0000801 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000802 ThrowConvertException(OptionError,"MissingArgument",option);
803 if (IsGeometry(argv[i]) == MagickFalse)
804 ThrowConvertInvalidArgumentException(option,argv[i]);
805 break;
806 }
807 if (LocaleCompare("blue-shift",option+1) == 0)
808 {
809 if (*option == '+')
810 break;
811 i++;
cristye81f5522014-05-07 01:25:59 +0000812 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000813 ThrowConvertException(OptionError,"MissingArgument",option);
814 if (IsGeometry(argv[i]) == MagickFalse)
815 ThrowConvertInvalidArgumentException(option,argv[i]);
816 break;
817 }
818 if (LocaleCompare("blur",option+1) == 0)
819 {
820 if (*option == '+')
821 break;
822 i++;
cristye81f5522014-05-07 01:25:59 +0000823 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000824 ThrowConvertException(OptionError,"MissingArgument",option);
825 if (IsGeometry(argv[i]) == MagickFalse)
826 ThrowConvertInvalidArgumentException(option,argv[i]);
827 break;
828 }
829 if (LocaleCompare("border",option+1) == 0)
830 {
831 if (*option == '+')
832 break;
833 i++;
cristye81f5522014-05-07 01:25:59 +0000834 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000835 ThrowConvertException(OptionError,"MissingArgument",option);
836 if (IsGeometry(argv[i]) == MagickFalse)
837 ThrowConvertInvalidArgumentException(option,argv[i]);
838 break;
839 }
840 if (LocaleCompare("bordercolor",option+1) == 0)
841 {
842 if (*option == '+')
843 break;
844 i++;
cristye81f5522014-05-07 01:25:59 +0000845 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000846 ThrowConvertException(OptionError,"MissingArgument",option);
847 break;
848 }
849 if (LocaleCompare("box",option+1) == 0)
850 {
851 if (*option == '+')
852 break;
853 i++;
cristye81f5522014-05-07 01:25:59 +0000854 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000855 ThrowConvertException(OptionError,"MissingArgument",option);
856 break;
857 }
cristya28d6b82010-01-11 20:03:47 +0000858 if (LocaleCompare("brightness-contrast",option+1) == 0)
859 {
860 i++;
cristye81f5522014-05-07 01:25:59 +0000861 if (i == (ssize_t) argc)
cristya28d6b82010-01-11 20:03:47 +0000862 ThrowConvertException(OptionError,"MissingArgument",option);
863 if (IsGeometry(argv[i]) == MagickFalse)
864 ThrowConvertInvalidArgumentException(option,argv[i]);
865 break;
866 }
cristy3ed852e2009-09-05 21:47:34 +0000867 ThrowConvertException(OptionError,"UnrecognizedOption",option)
868 }
869 case 'c':
870 {
871 if (LocaleCompare("cache",option+1) == 0)
872 {
873 if (*option == '+')
874 break;
875 i++;
cristye81f5522014-05-07 01:25:59 +0000876 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000877 ThrowConvertException(OptionError,"MissingArgument",option);
878 if (IsGeometry(argv[i]) == MagickFalse)
879 ThrowConvertInvalidArgumentException(option,argv[i]);
880 break;
881 }
cristy4ceadb82014-03-29 15:30:43 +0000882 if (LocaleCompare("canny",option+1) == 0)
883 {
884 if (*option == '+')
885 break;
886 i++;
cristye81f5522014-05-07 01:25:59 +0000887 if (i == (ssize_t) argc)
cristy4ceadb82014-03-29 15:30:43 +0000888 ThrowConvertException(OptionError,"MissingArgument",option);
889 if (IsGeometry(argv[i]) == MagickFalse)
890 ThrowConvertInvalidArgumentException(option,argv[i]);
891 break;
892 }
cristy3ed852e2009-09-05 21:47:34 +0000893 if (LocaleCompare("caption",option+1) == 0)
894 {
895 if (*option == '+')
896 break;
897 i++;
cristybb503372010-05-27 20:51:26 +0000898 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000899 ThrowConvertException(OptionError,"MissingArgument",option);
900 break;
901 }
902 if (LocaleCompare("cdl",option+1) == 0)
903 {
904 if (*option == '+')
905 break;
906 i++;
cristye81f5522014-05-07 01:25:59 +0000907 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000908 ThrowConvertException(OptionError,"MissingArgument",option);
909 break;
910 }
911 if (LocaleCompare("channel",option+1) == 0)
912 {
cristybb503372010-05-27 20:51:26 +0000913 ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000914 channel;
915
916 if (*option == '+')
917 break;
918 i++;
cristye81f5522014-05-07 01:25:59 +0000919 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000920 ThrowConvertException(OptionError,"MissingArgument",option);
921 channel=ParseChannelOption(argv[i]);
922 if (channel < 0)
923 ThrowConvertException(OptionError,"UnrecognizedChannelType",
924 argv[i]);
925 break;
926 }
cristy5f257b22012-03-07 00:27:29 +0000927 if (LocaleCompare("channel-fx",option+1) == 0)
cristy87c02f42012-02-24 00:19:10 +0000928 {
929 ssize_t
930 channel;
931
932 if (*option == '+')
933 break;
934 i++;
cristye81f5522014-05-07 01:25:59 +0000935 if (i == (ssize_t) argc)
cristy87c02f42012-02-24 00:19:10 +0000936 ThrowConvertException(OptionError,"MissingArgument",option);
cristy953c4bd2012-02-24 01:04:04 +0000937 channel=ParsePixelChannelOption(argv[i]);
cristy87c02f42012-02-24 00:19:10 +0000938 if (channel < 0)
939 ThrowConvertException(OptionError,"UnrecognizedChannelType",
940 argv[i]);
941 break;
942 }
cristy3ed852e2009-09-05 21:47:34 +0000943 if (LocaleCompare("charcoal",option+1) == 0)
944 {
945 if (*option == '+')
946 break;
947 i++;
cristye81f5522014-05-07 01:25:59 +0000948 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000949 ThrowConvertException(OptionError,"MissingArgument",option);
950 if (IsGeometry(argv[i]) == MagickFalse)
951 ThrowConvertInvalidArgumentException(option,argv[i]);
952 break;
953 }
954 if (LocaleCompare("chop",option+1) == 0)
955 {
956 if (*option == '+')
957 break;
958 i++;
cristye81f5522014-05-07 01:25:59 +0000959 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000960 ThrowConvertException(OptionError,"MissingArgument",option);
961 if (IsGeometry(argv[i]) == MagickFalse)
962 ThrowConvertInvalidArgumentException(option,argv[i]);
963 break;
964 }
cristy1eb45dd2009-09-25 16:38:06 +0000965 if (LocaleCompare("clamp",option+1) == 0)
966 break;
cristy3ed852e2009-09-05 21:47:34 +0000967 if (LocaleCompare("clip",option+1) == 0)
968 break;
969 if (LocaleCompare("clip-mask",option+1) == 0)
970 {
971 if (*option == '+')
972 break;
973 i++;
cristye81f5522014-05-07 01:25:59 +0000974 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000975 ThrowConvertException(OptionError,"MissingArgument",option);
976 break;
977 }
978 if (LocaleCompare("clip-path",option+1) == 0)
979 {
980 i++;
cristye81f5522014-05-07 01:25:59 +0000981 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000982 ThrowConvertException(OptionError,"MissingArgument",option);
983 break;
984 }
985 if (LocaleCompare("clone",option+1) == 0)
986 {
987 Image
cristy9a883692015-01-14 00:55:37 +0000988 *clone_images,
989 *clone_list;
990
991 clone_list=CloneImageList(image,exception);
cristy3ed852e2009-09-05 21:47:34 +0000992 if (k != 0)
cristy9a883692015-01-14 00:55:37 +0000993 clone_list=CloneImageList(image_stack[k-1].image,exception);
994 if (clone_list == (Image *) NULL)
995 ThrowConvertException(ImageError,"ImageSequenceRequired",option);
cristy3ed852e2009-09-05 21:47:34 +0000996 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
997 if (*option == '+')
cristy9a883692015-01-14 00:55:37 +0000998 clone_images=CloneImages(clone_list,"-1",exception);
cristy3ed852e2009-09-05 21:47:34 +0000999 else
cristy9a883692015-01-14 00:55:37 +00001000 {
cristy3ed852e2009-09-05 21:47:34 +00001001 i++;
cristye81f5522014-05-07 01:25:59 +00001002 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001003 ThrowConvertException(OptionError,"MissingArgument",option);
1004 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
1005 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy9a883692015-01-14 00:55:37 +00001006 clone_images=CloneImages(clone_list,argv[i],exception);
cristy3ed852e2009-09-05 21:47:34 +00001007 }
1008 if (clone_images == (Image *) NULL)
1009 ThrowConvertException(OptionError,"NoSuchImage",option);
1010 AppendImageStack(clone_images);
cristy9a883692015-01-14 00:55:37 +00001011 clone_list=DestroyImageList(clone_list);
cristy3ed852e2009-09-05 21:47:34 +00001012 break;
1013 }
1014 if (LocaleCompare("clut",option+1) == 0)
1015 break;
1016 if (LocaleCompare("coalesce",option+1) == 0)
1017 break;
1018 if (LocaleCompare("colorize",option+1) == 0)
1019 {
1020 if (*option == '+')
1021 break;
1022 i++;
cristye81f5522014-05-07 01:25:59 +00001023 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001024 ThrowConvertException(OptionError,"MissingArgument",option);
1025 if (IsGeometry(argv[i]) == MagickFalse)
1026 ThrowConvertInvalidArgumentException(option,argv[i]);
1027 break;
1028 }
cristye6365592010-04-02 17:31:23 +00001029 if (LocaleCompare("color-matrix",option+1) == 0)
1030 {
cristyb6bd4ad2010-08-08 01:12:27 +00001031 KernelInfo
1032 *kernel_info;
1033
cristye6365592010-04-02 17:31:23 +00001034 if (*option == '+')
1035 break;
1036 i++;
cristye81f5522014-05-07 01:25:59 +00001037 if (i == (ssize_t) argc)
cristye6365592010-04-02 17:31:23 +00001038 ThrowConvertException(OptionError,"MissingArgument",option);
cristy2c57b742014-10-31 00:40:34 +00001039 kernel_info=AcquireKernelInfo(argv[i],exception);
cristyb6bd4ad2010-08-08 01:12:27 +00001040 if (kernel_info == (KernelInfo *) NULL)
cristye6365592010-04-02 17:31:23 +00001041 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00001042 kernel_info=DestroyKernelInfo(kernel_info);
cristye6365592010-04-02 17:31:23 +00001043 break;
1044 }
cristy3ed852e2009-09-05 21:47:34 +00001045 if (LocaleCompare("colors",option+1) == 0)
1046 {
1047 if (*option == '+')
1048 break;
1049 i++;
cristye81f5522014-05-07 01:25:59 +00001050 if ((i == (ssize_t) argc) ||
cristy3ed852e2009-09-05 21:47:34 +00001051 (IsGeometry(argv[i]) == MagickFalse))
1052 ThrowConvertException(OptionError,"MissingArgument",option);
1053 break;
1054 }
1055 if (LocaleCompare("colorspace",option+1) == 0)
1056 {
cristybb503372010-05-27 20:51:26 +00001057 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001058 colorspace;
1059
1060 if (*option == '+')
1061 break;
1062 i++;
cristye81f5522014-05-07 01:25:59 +00001063 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001064 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001065 colorspace=ParseCommandOption(MagickColorspaceOptions,
cristy3ed852e2009-09-05 21:47:34 +00001066 MagickFalse,argv[i]);
1067 if (colorspace < 0)
1068 ThrowConvertException(OptionError,"UnrecognizedColorspace",
1069 argv[i]);
1070 break;
1071 }
1072 if (LocaleCompare("combine",option+1) == 0)
1073 break;
1074 if (LocaleCompare("comment",option+1) == 0)
1075 {
1076 if (*option == '+')
1077 break;
1078 i++;
cristybb503372010-05-27 20:51:26 +00001079 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001080 ThrowConvertException(OptionError,"MissingArgument",option);
1081 break;
1082 }
cristyb92495a2013-08-20 00:10:59 +00001083 if (LocaleCompare("compare",option+1) == 0)
1084 break;
cristy790190d2013-10-04 00:51:51 +00001085 if (LocaleCompare("complex",option+1) == 0)
1086 {
1087 ssize_t
cristy6398ec72013-11-28 02:00:27 +00001088 op;
cristy790190d2013-10-04 00:51:51 +00001089
1090 if (*option == '+')
1091 break;
1092 i++;
1093 if (i == (ssize_t) argc)
1094 ThrowConvertException(OptionError,"MissingArgument",option);
cristy6398ec72013-11-28 02:00:27 +00001095 op=ParseCommandOption(MagickComplexOptions,MagickFalse,argv[i]);
1096 if (op < 0)
cristy790190d2013-10-04 00:51:51 +00001097 ThrowConvertException(OptionError,"UnrecognizedComplexOperator",
1098 argv[i]);
1099 break;
1100 }
cristy3ed852e2009-09-05 21:47:34 +00001101 if (LocaleCompare("compose",option+1) == 0)
1102 {
cristybb503372010-05-27 20:51:26 +00001103 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001104 compose;
1105
1106 if (*option == '+')
1107 break;
1108 i++;
cristybb503372010-05-27 20:51:26 +00001109 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001110 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001111 compose=ParseCommandOption(MagickComposeOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001112 argv[i]);
1113 if (compose < 0)
1114 ThrowConvertException(OptionError,"UnrecognizedComposeOperator",
1115 argv[i]);
1116 break;
1117 }
1118 if (LocaleCompare("composite",option+1) == 0)
1119 break;
1120 if (LocaleCompare("compress",option+1) == 0)
1121 {
cristybb503372010-05-27 20:51:26 +00001122 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001123 compress;
1124
1125 if (*option == '+')
1126 break;
1127 i++;
cristye81f5522014-05-07 01:25:59 +00001128 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001129 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001130 compress=ParseCommandOption(MagickCompressOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001131 argv[i]);
1132 if (compress < 0)
1133 ThrowConvertException(OptionError,"UnrecognizedImageCompression",
1134 argv[i]);
1135 break;
1136 }
cristy22879752009-10-25 23:55:40 +00001137 if (LocaleCompare("concurrent",option+1) == 0)
1138 break;
dirk7182bd12016-01-01 13:10:03 +01001139 if (LocaleCompare("connected-components",option+1) == 0)
cristy6e0b3bc2014-10-19 17:51:42 +00001140 {
1141 i++;
1142 if (i == (ssize_t) argc)
1143 ThrowConvertException(OptionError,"MissingArgument",option);
1144 if (IsGeometry(argv[i]) == MagickFalse)
1145 ThrowConvertInvalidArgumentException(option,argv[i]);
1146 break;
1147 }
cristy3ed852e2009-09-05 21:47:34 +00001148 if (LocaleCompare("contrast",option+1) == 0)
1149 break;
1150 if (LocaleCompare("contrast-stretch",option+1) == 0)
1151 {
1152 i++;
cristye81f5522014-05-07 01:25:59 +00001153 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001154 ThrowConvertException(OptionError,"MissingArgument",option);
1155 if (IsGeometry(argv[i]) == MagickFalse)
1156 ThrowConvertInvalidArgumentException(option,argv[i]);
1157 break;
1158 }
1159 if (LocaleCompare("convolve",option+1) == 0)
1160 {
cristyb6bd4ad2010-08-08 01:12:27 +00001161 KernelInfo
1162 *kernel_info;
1163
cristy3ed852e2009-09-05 21:47:34 +00001164 if (*option == '+')
1165 break;
1166 i++;
cristye81f5522014-05-07 01:25:59 +00001167 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001168 ThrowConvertException(OptionError,"MissingArgument",option);
cristy2c57b742014-10-31 00:40:34 +00001169 kernel_info=AcquireKernelInfo(argv[i],exception);
cristyb6bd4ad2010-08-08 01:12:27 +00001170 if (kernel_info == (KernelInfo *) NULL)
cristy3ed852e2009-09-05 21:47:34 +00001171 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00001172 kernel_info=DestroyKernelInfo(kernel_info);
cristy3ed852e2009-09-05 21:47:34 +00001173 break;
1174 }
cristy3476df82015-06-22 18:43:46 +00001175 if (LocaleCompare("copy",option+1) == 0)
1176 {
1177 if (*option == '+')
1178 break;
1179 i++;
1180 if (i == (ssize_t) argc)
1181 ThrowConvertException(OptionError,"MissingArgument",option);
1182 if (IsGeometry(argv[i]) == MagickFalse)
1183 ThrowConvertInvalidArgumentException(option,argv[i]);
1184 i++;
1185 if (i == (ssize_t) argc)
1186 ThrowConvertException(OptionError,"MissingArgument",option);
1187 if (IsGeometry(argv[i]) == MagickFalse)
1188 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy3476df82015-06-22 18:43:46 +00001189 break;
1190 }
cristy3ed852e2009-09-05 21:47:34 +00001191 if (LocaleCompare("crop",option+1) == 0)
1192 {
1193 if (*option == '+')
1194 break;
1195 i++;
cristye81f5522014-05-07 01:25:59 +00001196 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001197 ThrowConvertException(OptionError,"MissingArgument",option);
1198 if (IsGeometry(argv[i]) == MagickFalse)
1199 ThrowConvertInvalidArgumentException(option,argv[i]);
1200 break;
1201 }
1202 if (LocaleCompare("cycle",option+1) == 0)
1203 {
1204 if (*option == '+')
1205 break;
1206 i++;
cristye81f5522014-05-07 01:25:59 +00001207 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001208 ThrowConvertException(OptionError,"MissingArgument",option);
1209 if (IsGeometry(argv[i]) == MagickFalse)
1210 ThrowConvertInvalidArgumentException(option,argv[i]);
1211 break;
1212 }
1213 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1214 }
1215 case 'd':
1216 {
1217 if (LocaleCompare("decipher",option+1) == 0)
1218 {
1219 if (*option == '+')
1220 break;
1221 i++;
cristye81f5522014-05-07 01:25:59 +00001222 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001223 ThrowConvertException(OptionError,"MissingArgument",option);
1224 break;
1225 }
1226 if (LocaleCompare("deconstruct",option+1) == 0)
1227 break;
1228 if (LocaleCompare("debug",option+1) == 0)
1229 {
cristybb503372010-05-27 20:51:26 +00001230 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001231 event;
1232
1233 if (*option == '+')
1234 break;
1235 i++;
cristybb503372010-05-27 20:51:26 +00001236 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001237 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001238 event=ParseCommandOption(MagickLogEventOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001239 if (event < 0)
1240 ThrowConvertException(OptionError,"UnrecognizedEventType",
1241 argv[i]);
1242 (void) SetLogEventMask(argv[i]);
1243 break;
1244 }
1245 if (LocaleCompare("define",option+1) == 0)
1246 {
1247 i++;
cristybb503372010-05-27 20:51:26 +00001248 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001249 ThrowConvertException(OptionError,"MissingArgument",option);
1250 if (*option == '+')
1251 {
1252 const char
1253 *define;
1254
1255 define=GetImageOption(image_info,argv[i]);
1256 if (define == (const char *) NULL)
1257 ThrowConvertException(OptionError,"NoSuchOption",argv[i]);
1258 break;
1259 }
1260 break;
1261 }
1262 if (LocaleCompare("delay",option+1) == 0)
1263 {
1264 if (*option == '+')
1265 break;
1266 i++;
cristybb503372010-05-27 20:51:26 +00001267 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001268 ThrowConvertException(OptionError,"MissingArgument",option);
1269 if (IsGeometry(argv[i]) == MagickFalse)
1270 ThrowConvertInvalidArgumentException(option,argv[i]);
1271 break;
1272 }
1273 if (LocaleCompare("density",option+1) == 0)
1274 {
1275 if (*option == '+')
1276 break;
1277 i++;
cristye81f5522014-05-07 01:25:59 +00001278 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001279 ThrowConvertException(OptionError,"MissingArgument",option);
1280 if (IsGeometry(argv[i]) == MagickFalse)
1281 ThrowConvertInvalidArgumentException(option,argv[i]);
1282 break;
1283 }
1284 if (LocaleCompare("depth",option+1) == 0)
1285 {
1286 if (*option == '+')
1287 break;
1288 i++;
cristye81f5522014-05-07 01:25:59 +00001289 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001290 ThrowConvertException(OptionError,"MissingArgument",option);
1291 if (IsGeometry(argv[i]) == MagickFalse)
1292 ThrowConvertInvalidArgumentException(option,argv[i]);
1293 break;
1294 }
1295 if (LocaleCompare("delete",option+1) == 0)
1296 {
1297 if (*option == '+')
1298 break;
1299 i++;
cristye81f5522014-05-07 01:25:59 +00001300 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001301 ThrowConvertException(OptionError,"MissingArgument",option);
1302 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
1303 ThrowConvertInvalidArgumentException(option,argv[i]);
1304 break;
1305 }
1306 if (LocaleCompare("deskew",option+1) == 0)
1307 {
1308 if (*option == '+')
1309 break;
1310 i++;
cristye81f5522014-05-07 01:25:59 +00001311 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001312 ThrowConvertException(OptionError,"MissingArgument",option);
1313 if (IsGeometry(argv[i]) == MagickFalse)
1314 ThrowConvertInvalidArgumentException(option,argv[i]);
1315 break;
1316 }
1317 if (LocaleCompare("despeckle",option+1) == 0)
1318 break;
cristyc9b12952010-03-28 01:12:28 +00001319 if (LocaleCompare("direction",option+1) == 0)
1320 {
cristybb503372010-05-27 20:51:26 +00001321 ssize_t
cristyc9b12952010-03-28 01:12:28 +00001322 direction;
1323
1324 if (*option == '+')
1325 break;
1326 i++;
cristybb503372010-05-27 20:51:26 +00001327 if (i == (ssize_t) argc)
cristyc9b12952010-03-28 01:12:28 +00001328 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001329 direction=ParseCommandOption(MagickDirectionOptions,MagickFalse,
cristyc9b12952010-03-28 01:12:28 +00001330 argv[i]);
1331 if (direction < 0)
1332 ThrowConvertException(OptionError,"UnrecognizedDirectionType",
1333 argv[i]);
1334 break;
1335 }
cristy3ed852e2009-09-05 21:47:34 +00001336 if (LocaleCompare("display",option+1) == 0)
1337 {
1338 if (*option == '+')
1339 break;
1340 i++;
cristye81f5522014-05-07 01:25:59 +00001341 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001342 ThrowConvertException(OptionError,"MissingArgument",option);
1343 break;
1344 }
1345 if (LocaleCompare("dispose",option+1) == 0)
1346 {
cristybb503372010-05-27 20:51:26 +00001347 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001348 dispose;
1349
1350 if (*option == '+')
1351 break;
1352 i++;
cristybb503372010-05-27 20:51:26 +00001353 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001354 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001355 dispose=ParseCommandOption(MagickDisposeOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001356 if (dispose < 0)
1357 ThrowConvertException(OptionError,"UnrecognizedDisposeMethod",
1358 argv[i]);
1359 break;
1360 }
1361 if (LocaleCompare("distort",option+1) == 0)
1362 {
cristybb503372010-05-27 20:51:26 +00001363 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001364 op;
1365
1366 i++;
cristybb503372010-05-27 20:51:26 +00001367 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001368 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001369 op=ParseCommandOption(MagickDistortOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001370 if (op < 0)
1371 ThrowConvertException(OptionError,"UnrecognizedDistortMethod",
1372 argv[i]);
1373 i++;
cristye81f5522014-05-07 01:25:59 +00001374 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001375 ThrowConvertException(OptionError,"MissingArgument",option);
1376 break;
1377 }
1378 if (LocaleCompare("dither",option+1) == 0)
1379 {
cristybb503372010-05-27 20:51:26 +00001380 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001381 method;
1382
1383 if (*option == '+')
1384 break;
1385 i++;
cristybb503372010-05-27 20:51:26 +00001386 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001387 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001388 method=ParseCommandOption(MagickDitherOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001389 if (method < 0)
1390 ThrowConvertException(OptionError,"UnrecognizedDitherMethod",
1391 argv[i]);
1392 break;
1393 }
1394 if (LocaleCompare("draw",option+1) == 0)
1395 {
1396 if (*option == '+')
1397 break;
1398 i++;
cristye81f5522014-05-07 01:25:59 +00001399 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001400 ThrowConvertException(OptionError,"MissingArgument",option);
1401 break;
1402 }
cristy5d28d482011-03-20 21:59:40 +00001403 if (LocaleCompare("duplicate",option+1) == 0)
1404 {
cristy5d28d482011-03-20 21:59:40 +00001405 if (*option == '+')
cristyecb10ff2011-03-22 13:14:03 +00001406 break;
1407 i++;
cristye81f5522014-05-07 01:25:59 +00001408 if (i == (ssize_t) argc)
cristyecb10ff2011-03-22 13:14:03 +00001409 ThrowConvertException(OptionError,"MissingArgument",option);
1410 if (IsGeometry(argv[i]) == MagickFalse)
1411 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy5d28d482011-03-20 21:59:40 +00001412 break;
1413 }
cristy22879752009-10-25 23:55:40 +00001414 if (LocaleCompare("duration",option+1) == 0)
1415 {
1416 if (*option == '+')
1417 break;
1418 i++;
cristye81f5522014-05-07 01:25:59 +00001419 if (i == (ssize_t) argc)
cristy22879752009-10-25 23:55:40 +00001420 ThrowConvertException(OptionError,"MissingArgument",option);
1421 if (IsGeometry(argv[i]) == MagickFalse)
1422 ThrowConvertInvalidArgumentException(option,argv[i]);
1423 break;
1424 }
cristy3ed852e2009-09-05 21:47:34 +00001425 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1426 }
1427 case 'e':
1428 {
1429 if (LocaleCompare("edge",option+1) == 0)
1430 {
1431 if (*option == '+')
1432 break;
1433 i++;
cristye81f5522014-05-07 01:25:59 +00001434 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001435 ThrowConvertException(OptionError,"MissingArgument",option);
1436 if (IsGeometry(argv[i]) == MagickFalse)
1437 ThrowConvertInvalidArgumentException(option,argv[i]);
1438 break;
1439 }
1440 if (LocaleCompare("emboss",option+1) == 0)
1441 {
1442 if (*option == '+')
1443 break;
1444 i++;
cristye81f5522014-05-07 01:25:59 +00001445 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001446 ThrowConvertException(OptionError,"MissingArgument",option);
1447 if (IsGeometry(argv[i]) == MagickFalse)
1448 ThrowConvertInvalidArgumentException(option,argv[i]);
1449 break;
1450 }
1451 if (LocaleCompare("encipher",option+1) == 0)
1452 {
1453 if (*option == '+')
1454 break;
1455 i++;
cristye81f5522014-05-07 01:25:59 +00001456 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001457 ThrowConvertException(OptionError,"MissingArgument",option);
1458 break;
1459 }
1460 if (LocaleCompare("encoding",option+1) == 0)
1461 {
1462 if (*option == '+')
1463 break;
1464 i++;
cristye81f5522014-05-07 01:25:59 +00001465 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001466 ThrowConvertException(OptionError,"MissingArgument",option);
1467 break;
1468 }
1469 if (LocaleCompare("endian",option+1) == 0)
1470 {
cristybb503372010-05-27 20:51:26 +00001471 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001472 endian;
1473
1474 if (*option == '+')
1475 break;
1476 i++;
cristye81f5522014-05-07 01:25:59 +00001477 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001478 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001479 endian=ParseCommandOption(MagickEndianOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001480 argv[i]);
1481 if (endian < 0)
1482 ThrowConvertException(OptionError,"UnrecognizedEndianType",
1483 argv[i]);
1484 break;
1485 }
1486 if (LocaleCompare("enhance",option+1) == 0)
1487 break;
1488 if (LocaleCompare("equalize",option+1) == 0)
1489 break;
1490 if (LocaleCompare("evaluate",option+1) == 0)
1491 {
cristybb503372010-05-27 20:51:26 +00001492 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001493 op;
1494
1495 if (*option == '+')
1496 break;
1497 i++;
cristybb503372010-05-27 20:51:26 +00001498 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001499 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001500 op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001501 if (op < 0)
1502 ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
1503 argv[i]);
1504 i++;
cristye81f5522014-05-07 01:25:59 +00001505 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001506 ThrowConvertException(OptionError,"MissingArgument",option);
1507 if (IsGeometry(argv[i]) == MagickFalse)
1508 ThrowConvertInvalidArgumentException(option,argv[i]);
1509 break;
1510 }
cristyd18ae7c2010-03-07 17:39:52 +00001511 if (LocaleCompare("evaluate-sequence",option+1) == 0)
1512 {
cristybb503372010-05-27 20:51:26 +00001513 ssize_t
cristyd18ae7c2010-03-07 17:39:52 +00001514 op;
1515
1516 if (*option == '+')
1517 break;
1518 i++;
cristybb503372010-05-27 20:51:26 +00001519 if (i == (ssize_t) argc)
cristyd18ae7c2010-03-07 17:39:52 +00001520 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001521 op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
cristyd18ae7c2010-03-07 17:39:52 +00001522 if (op < 0)
1523 ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
1524 argv[i]);
1525 break;
1526 }
cristy3ed852e2009-09-05 21:47:34 +00001527 if (LocaleCompare("extent",option+1) == 0)
1528 {
1529 if (*option == '+')
1530 break;
1531 i++;
cristye81f5522014-05-07 01:25:59 +00001532 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001533 ThrowConvertException(OptionError,"MissingArgument",option);
1534 if (IsGeometry(argv[i]) == MagickFalse)
1535 ThrowConvertInvalidArgumentException(option,argv[i]);
1536 break;
1537 }
1538 if (LocaleCompare("extract",option+1) == 0)
1539 {
1540 if (*option == '+')
1541 break;
1542 i++;
cristye81f5522014-05-07 01:25:59 +00001543 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001544 ThrowConvertException(OptionError,"MissingArgument",option);
1545 if (IsGeometry(argv[i]) == MagickFalse)
1546 ThrowConvertInvalidArgumentException(option,argv[i]);
1547 break;
1548 }
1549 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1550 }
1551 case 'f':
1552 {
1553 if (LocaleCompare("family",option+1) == 0)
1554 {
1555 if (*option == '+')
1556 break;
1557 i++;
cristye81f5522014-05-07 01:25:59 +00001558 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001559 ThrowConvertException(OptionError,"MissingArgument",option);
1560 break;
1561 }
cristy14154222012-06-15 23:21:49 +00001562 if (LocaleCompare("features",option+1) == 0)
1563 {
1564 if (*option == '+')
1565 break;
1566 i++;
cristye81f5522014-05-07 01:25:59 +00001567 if (i == (ssize_t) argc)
cristy14154222012-06-15 23:21:49 +00001568 ThrowConvertException(OptionError,"MissingArgument",option);
1569 if (IsGeometry(argv[i]) == MagickFalse)
1570 ThrowConvertInvalidArgumentException(option,argv[i]);
1571 break;
1572 }
cristy3ed852e2009-09-05 21:47:34 +00001573 if (LocaleCompare("fft",option+1) == 0)
1574 break;
1575 if (LocaleCompare("fill",option+1) == 0)
1576 {
1577 if (*option == '+')
1578 break;
1579 i++;
cristye81f5522014-05-07 01:25:59 +00001580 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001581 ThrowConvertException(OptionError,"MissingArgument",option);
1582 break;
1583 }
1584 if (LocaleCompare("filter",option+1) == 0)
1585 {
cristybb503372010-05-27 20:51:26 +00001586 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001587 filter;
1588
1589 if (*option == '+')
1590 break;
1591 i++;
cristye81f5522014-05-07 01:25:59 +00001592 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001593 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001594 filter=ParseCommandOption(MagickFilterOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001595 if (filter < 0)
1596 ThrowConvertException(OptionError,"UnrecognizedImageFilter",
1597 argv[i]);
1598 break;
1599 }
1600 if (LocaleCompare("flatten",option+1) == 0)
1601 break;
1602 if (LocaleCompare("flip",option+1) == 0)
1603 break;
1604 if (LocaleCompare("flop",option+1) == 0)
1605 break;
1606 if (LocaleCompare("floodfill",option+1) == 0)
1607 {
1608 if (*option == '+')
1609 break;
1610 i++;
cristye81f5522014-05-07 01:25:59 +00001611 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001612 ThrowConvertException(OptionError,"MissingArgument",option);
1613 if (IsGeometry(argv[i]) == MagickFalse)
1614 ThrowConvertInvalidArgumentException(option,argv[i]);
1615 i++;
cristye81f5522014-05-07 01:25:59 +00001616 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001617 ThrowConvertException(OptionError,"MissingArgument",option);
1618 break;
1619 }
1620 if (LocaleCompare("font",option+1) == 0)
1621 {
1622 if (*option == '+')
1623 break;
1624 i++;
cristye81f5522014-05-07 01:25:59 +00001625 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001626 ThrowConvertException(OptionError,"MissingArgument",option);
1627 break;
1628 }
1629 if (LocaleCompare("format",option+1) == 0)
1630 {
1631 if (*option == '+')
1632 break;
1633 i++;
cristye81f5522014-05-07 01:25:59 +00001634 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001635 ThrowConvertException(OptionError,"MissingArgument",option);
1636 format=argv[i];
1637 break;
1638 }
1639 if (LocaleCompare("frame",option+1) == 0)
1640 {
1641 if (*option == '+')
1642 break;
1643 i++;
cristye81f5522014-05-07 01:25:59 +00001644 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001645 ThrowConvertException(OptionError,"MissingArgument",option);
1646 if (IsGeometry(argv[i]) == MagickFalse)
1647 ThrowConvertInvalidArgumentException(option,argv[i]);
1648 break;
1649 }
1650 if (LocaleCompare("function",option+1) == 0)
1651 {
cristybb503372010-05-27 20:51:26 +00001652 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001653 op;
1654
1655 if (*option == '+')
1656 break;
1657 i++;
cristybb503372010-05-27 20:51:26 +00001658 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001659 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001660 op=ParseCommandOption(MagickFunctionOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001661 if (op < 0)
1662 ThrowConvertException(OptionError,"UnrecognizedFunction",argv[i]);
1663 i++;
cristye81f5522014-05-07 01:25:59 +00001664 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001665 ThrowConvertException(OptionError,"MissingArgument",option);
1666 break;
1667 }
1668 if (LocaleCompare("fuzz",option+1) == 0)
1669 {
1670 if (*option == '+')
1671 break;
1672 i++;
cristye81f5522014-05-07 01:25:59 +00001673 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001674 ThrowConvertException(OptionError,"MissingArgument",option);
1675 if (IsGeometry(argv[i]) == MagickFalse)
1676 ThrowConvertInvalidArgumentException(option,argv[i]);
1677 break;
1678 }
1679 if (LocaleCompare("fx",option+1) == 0)
1680 {
1681 if (*option == '+')
1682 break;
1683 i++;
cristye81f5522014-05-07 01:25:59 +00001684 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001685 ThrowConvertException(OptionError,"MissingArgument",option);
1686 break;
1687 }
1688 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1689 }
1690 case 'g':
1691 {
1692 if (LocaleCompare("gamma",option+1) == 0)
1693 {
1694 i++;
cristye81f5522014-05-07 01:25:59 +00001695 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001696 ThrowConvertException(OptionError,"MissingArgument",option);
1697 if (IsGeometry(argv[i]) == MagickFalse)
1698 ThrowConvertInvalidArgumentException(option,argv[i]);
1699 break;
1700 }
1701 if ((LocaleCompare("gaussian-blur",option+1) == 0) ||
1702 (LocaleCompare("gaussian",option+1) == 0))
1703 {
1704 i++;
cristye81f5522014-05-07 01:25:59 +00001705 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001706 ThrowConvertException(OptionError,"MissingArgument",option);
1707 if (IsGeometry(argv[i]) == MagickFalse)
1708 ThrowConvertInvalidArgumentException(option,argv[i]);
1709 break;
1710 }
1711 if (LocaleCompare("geometry",option+1) == 0)
1712 {
1713 if (*option == '+')
1714 break;
1715 i++;
cristye81f5522014-05-07 01:25:59 +00001716 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001717 ThrowConvertException(OptionError,"MissingArgument",option);
1718 if (IsGeometry(argv[i]) == MagickFalse)
1719 ThrowConvertInvalidArgumentException(option,argv[i]);
1720 break;
1721 }
1722 if (LocaleCompare("gravity",option+1) == 0)
1723 {
cristybb503372010-05-27 20:51:26 +00001724 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001725 gravity;
1726
1727 if (*option == '+')
1728 break;
1729 i++;
cristye81f5522014-05-07 01:25:59 +00001730 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001731 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001732 gravity=ParseCommandOption(MagickGravityOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001733 argv[i]);
1734 if (gravity < 0)
1735 ThrowConvertException(OptionError,"UnrecognizedGravityType",
1736 argv[i]);
1737 break;
1738 }
cristybc008152013-03-28 16:52:59 +00001739 if (LocaleCompare("grayscale",option+1) == 0)
1740 {
1741 ssize_t
1742 method;
1743
1744 if (*option == '+')
1745 break;
1746 i++;
cristye81f5522014-05-07 01:25:59 +00001747 if (i == (ssize_t) argc)
cristybc008152013-03-28 16:52:59 +00001748 ThrowConvertException(OptionError,"MissingArgument",option);
1749 method=ParseCommandOption(MagickPixelIntensityOptions,MagickFalse,
1750 argv[i]);
1751 if (method < 0)
1752 ThrowConvertException(OptionError,"UnrecognizedIntensityMethod",
1753 argv[i]);
1754 break;
1755 }
cristy3ed852e2009-09-05 21:47:34 +00001756 if (LocaleCompare("green-primary",option+1) == 0)
1757 {
1758 if (*option == '+')
1759 break;
1760 i++;
cristye81f5522014-05-07 01:25:59 +00001761 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001762 ThrowConvertException(OptionError,"MissingArgument",option);
1763 if (IsGeometry(argv[i]) == MagickFalse)
1764 ThrowConvertInvalidArgumentException(option,argv[i]);
1765 break;
1766 }
1767 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1768 }
1769 case 'h':
1770 {
1771 if (LocaleCompare("hald-clut",option+1) == 0)
1772 break;
1773 if ((LocaleCompare("help",option+1) == 0) ||
1774 (LocaleCompare("-help",option+1) == 0))
1775 return(ConvertUsage());
cristy4e215022014-04-19 18:02:35 +00001776 if (LocaleCompare("hough-lines",option+1) == 0)
1777 {
1778 if (*option == '+')
1779 break;
1780 i++;
cristye81f5522014-05-07 01:25:59 +00001781 if (i == (ssize_t) argc)
cristy4e215022014-04-19 18:02:35 +00001782 ThrowConvertException(OptionError,"MissingArgument",option);
1783 if (IsGeometry(argv[i]) == MagickFalse)
1784 ThrowConvertInvalidArgumentException(option,argv[i]);
1785 break;
1786 }
cristy3ed852e2009-09-05 21:47:34 +00001787 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1788 }
1789 case 'i':
1790 {
1791 if (LocaleCompare("identify",option+1) == 0)
1792 break;
1793 if (LocaleCompare("ift",option+1) == 0)
1794 break;
1795 if (LocaleCompare("implode",option+1) == 0)
1796 {
1797 if (*option == '+')
1798 break;
1799 i++;
cristye81f5522014-05-07 01:25:59 +00001800 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001801 ThrowConvertException(OptionError,"MissingArgument",option);
1802 if (IsGeometry(argv[i]) == MagickFalse)
1803 ThrowConvertInvalidArgumentException(option,argv[i]);
1804 break;
1805 }
1806 if (LocaleCompare("insert",option+1) == 0)
1807 {
1808 if (*option == '+')
1809 break;
1810 i++;
cristye81f5522014-05-07 01:25:59 +00001811 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001812 ThrowConvertException(OptionError,"MissingArgument",option);
1813 if (IsGeometry(argv[i]) == MagickFalse)
1814 ThrowConvertInvalidArgumentException(option,argv[i]);
1815 break;
1816 }
cristy70e9f682013-03-12 22:31:22 +00001817 if (LocaleCompare("intensity",option+1) == 0)
1818 {
1819 ssize_t
1820 intensity;
1821
1822 if (*option == '+')
1823 break;
1824 i++;
cristye81f5522014-05-07 01:25:59 +00001825 if (i == (ssize_t) argc)
cristy70e9f682013-03-12 22:31:22 +00001826 ThrowConvertException(OptionError,"MissingArgument",option);
cristy8f84fdd2013-03-28 17:52:55 +00001827 intensity=ParseCommandOption(MagickPixelIntensityOptions,
1828 MagickFalse,argv[i]);
cristy70e9f682013-03-12 22:31:22 +00001829 if (intensity < 0)
cristy8f84fdd2013-03-28 17:52:55 +00001830 ThrowConvertException(OptionError,"UnrecognizedIntensityMethod",
1831 argv[i]);
cristy70e9f682013-03-12 22:31:22 +00001832 break;
1833 }
cristy3ed852e2009-09-05 21:47:34 +00001834 if (LocaleCompare("intent",option+1) == 0)
1835 {
cristybb503372010-05-27 20:51:26 +00001836 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001837 intent;
1838
1839 if (*option == '+')
1840 break;
1841 i++;
cristye81f5522014-05-07 01:25:59 +00001842 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001843 ThrowConvertException(OptionError,"MissingArgument",option);
cristy70e9f682013-03-12 22:31:22 +00001844 intent=ParseCommandOption(MagickIntentOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001845 if (intent < 0)
cristy70e9f682013-03-12 22:31:22 +00001846 ThrowConvertException(OptionError,"UnrecognizedIntentType",argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001847 break;
1848 }
1849 if (LocaleCompare("interlace",option+1) == 0)
1850 {
cristybb503372010-05-27 20:51:26 +00001851 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001852 interlace;
1853
1854 if (*option == '+')
1855 break;
1856 i++;
cristye81f5522014-05-07 01:25:59 +00001857 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001858 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001859 interlace=ParseCommandOption(MagickInterlaceOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001860 argv[i]);
1861 if (interlace < 0)
1862 ThrowConvertException(OptionError,"UnrecognizedInterlaceType",
1863 argv[i]);
1864 break;
1865 }
cristyb32b90a2009-09-07 21:45:48 +00001866 if (LocaleCompare("interline-spacing",option+1) == 0)
1867 {
1868 if (*option == '+')
1869 break;
1870 i++;
cristye81f5522014-05-07 01:25:59 +00001871 if (i == (ssize_t) argc)
cristyb32b90a2009-09-07 21:45:48 +00001872 ThrowConvertException(OptionError,"MissingArgument",option);
1873 if (IsGeometry(argv[i]) == MagickFalse)
1874 ThrowConvertInvalidArgumentException(option,argv[i]);
1875 break;
1876 }
cristy3ed852e2009-09-05 21:47:34 +00001877 if (LocaleCompare("interpolate",option+1) == 0)
1878 {
cristybb503372010-05-27 20:51:26 +00001879 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001880 interpolate;
1881
1882 if (*option == '+')
1883 break;
1884 i++;
cristybb503372010-05-27 20:51:26 +00001885 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001886 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001887 interpolate=ParseCommandOption(MagickInterpolateOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001888 argv[i]);
1889 if (interpolate < 0)
1890 ThrowConvertException(OptionError,"UnrecognizedInterpolateMethod",
1891 argv[i]);
1892 break;
1893 }
1894 if (LocaleCompare("interword-spacing",option+1) == 0)
1895 {
1896 if (*option == '+')
1897 break;
1898 i++;
cristye81f5522014-05-07 01:25:59 +00001899 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001900 ThrowConvertException(OptionError,"MissingArgument",option);
1901 if (IsGeometry(argv[i]) == MagickFalse)
1902 ThrowConvertInvalidArgumentException(option,argv[i]);
1903 break;
1904 }
1905 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1906 }
1907 case 'k':
1908 {
1909 if (LocaleCompare("kerning",option+1) == 0)
1910 {
1911 if (*option == '+')
1912 break;
1913 i++;
cristye81f5522014-05-07 01:25:59 +00001914 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001915 ThrowConvertException(OptionError,"MissingArgument",option);
1916 if (IsGeometry(argv[i]) == MagickFalse)
1917 ThrowConvertInvalidArgumentException(option,argv[i]);
1918 break;
1919 }
cristy3b207f82014-09-27 14:21:20 +00001920 if (LocaleCompare("kuwahara",option+1) == 0)
1921 {
1922 if (*option == '+')
1923 break;
1924 i++;
1925 if (i == (ssize_t) argc)
1926 ThrowConvertException(OptionError,"MissingArgument",option);
1927 if (IsGeometry(argv[i]) == MagickFalse)
1928 ThrowConvertInvalidArgumentException(option,argv[i]);
1929 break;
1930 }
cristy3ed852e2009-09-05 21:47:34 +00001931 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1932 }
1933 case 'l':
1934 {
1935 if (LocaleCompare("label",option+1) == 0)
1936 {
1937 if (*option == '+')
1938 break;
1939 i++;
cristybb503372010-05-27 20:51:26 +00001940 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001941 ThrowConvertException(OptionError,"MissingArgument",option);
1942 break;
1943 }
1944 if (LocaleCompare("lat",option+1) == 0)
1945 {
1946 if (*option == '+')
1947 break;
1948 i++;
cristye81f5522014-05-07 01:25:59 +00001949 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001950 ThrowConvertException(OptionError,"MissingArgument",option);
1951 if (IsGeometry(argv[i]) == MagickFalse)
1952 ThrowConvertInvalidArgumentException(option,argv[i]);
1953 break;
1954 }
1955 if (LocaleCompare("layers",option+1) == 0)
1956 {
cristybb503372010-05-27 20:51:26 +00001957 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001958 type;
1959
1960 if (*option == '+')
1961 break;
1962 i++;
cristye81f5522014-05-07 01:25:59 +00001963 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001964 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001965 type=ParseCommandOption(MagickLayerOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001966 if (type < 0)
1967 ThrowConvertException(OptionError,"UnrecognizedLayerMethod",
1968 argv[i]);
1969 break;
1970 }
1971 if (LocaleCompare("level",option+1) == 0)
1972 {
1973 i++;
cristye81f5522014-05-07 01:25:59 +00001974 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001975 ThrowConvertException(OptionError,"MissingArgument",option);
1976 if (IsGeometry(argv[i]) == MagickFalse)
1977 ThrowConvertInvalidArgumentException(option,argv[i]);
1978 break;
1979 }
1980 if (LocaleCompare("level-colors",option+1) == 0)
1981 {
1982 i++;
cristye81f5522014-05-07 01:25:59 +00001983 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001984 ThrowConvertException(OptionError,"MissingArgument",option);
1985 break;
1986 }
cristy3ed852e2009-09-05 21:47:34 +00001987 if (LocaleCompare("limit",option+1) == 0)
1988 {
1989 char
1990 *p;
1991
1992 double
1993 value;
1994
cristybb503372010-05-27 20:51:26 +00001995 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001996 resource;
1997
1998 if (*option == '+')
1999 break;
2000 i++;
cristybb503372010-05-27 20:51:26 +00002001 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002002 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002003 resource=ParseCommandOption(MagickResourceOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002004 argv[i]);
2005 if (resource < 0)
2006 ThrowConvertException(OptionError,"UnrecognizedResourceType",
2007 argv[i]);
2008 i++;
cristybb503372010-05-27 20:51:26 +00002009 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002010 ThrowConvertException(OptionError,"MissingArgument",option);
cristydbdd0e32011-11-04 23:29:40 +00002011 value=StringToDouble(argv[i],&p);
cristyda16f162011-02-19 23:52:17 +00002012 (void) value;
cristy3ed852e2009-09-05 21:47:34 +00002013 if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
2014 ThrowConvertInvalidArgumentException(option,argv[i]);
2015 break;
2016 }
2017 if (LocaleCompare("linear-stretch",option+1) == 0)
2018 {
2019 i++;
cristye81f5522014-05-07 01:25:59 +00002020 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002021 ThrowConvertException(OptionError,"MissingArgument",option);
2022 if (IsGeometry(argv[i]) == MagickFalse)
2023 ThrowConvertInvalidArgumentException(option,argv[i]);
2024 break;
2025 }
anthonyef0daa62012-03-24 13:43:59 +00002026 if (LocaleCompare("liquid-rescale",option+1) == 0)
2027 {
2028 i++;
cristye81f5522014-05-07 01:25:59 +00002029 if (i == (ssize_t) argc)
anthonyef0daa62012-03-24 13:43:59 +00002030 ThrowConvertException(OptionError,"MissingArgument",option);
2031 if (IsGeometry(argv[i]) == MagickFalse)
2032 ThrowConvertInvalidArgumentException(option,argv[i]);
2033 break;
2034 }
cristy3ed852e2009-09-05 21:47:34 +00002035 if (LocaleCompare("list",option+1) == 0)
2036 {
cristybb503372010-05-27 20:51:26 +00002037 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002038 list;
2039
2040 if (*option == '+')
2041 break;
2042 i++;
cristybb503372010-05-27 20:51:26 +00002043 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002044 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002045 list=ParseCommandOption(MagickListOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002046 if (list < 0)
2047 ThrowConvertException(OptionError,"UnrecognizedListType",argv[i]);
cristyaeb2cbc2010-05-07 13:28:58 +00002048 status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
cristy3ed852e2009-09-05 21:47:34 +00002049 argv+j,exception);
2050 DestroyConvert();
cristy32ce2392014-09-24 19:08:53 +00002051 return(status == 0 ? MagickTrue : MagickFalse);
cristy3ed852e2009-09-05 21:47:34 +00002052 }
dirk3505d872015-11-01 23:30:09 +01002053 if (LocaleCompare("local-contrast",option+1) == 0)
2054 {
dirk3505d872015-11-01 23:30:09 +01002055 i++;
2056 if (i == (ssize_t)argc)
2057 ThrowConvertException(OptionError, "MissingArgument", option);
2058 if (IsGeometry(argv[i]) == MagickFalse)
2059 ThrowConvertInvalidArgumentException(option,argv[i]);
2060 break;
2061 }
cristy3ed852e2009-09-05 21:47:34 +00002062 if (LocaleCompare("log",option+1) == 0)
2063 {
2064 if (*option == '+')
2065 break;
2066 i++;
cristybb503372010-05-27 20:51:26 +00002067 if ((i == (ssize_t) argc) ||
cristy3ed852e2009-09-05 21:47:34 +00002068 (strchr(argv[i],'%') == (char *) NULL))
2069 ThrowConvertException(OptionError,"MissingArgument",option);
2070 break;
2071 }
2072 if (LocaleCompare("loop",option+1) == 0)
2073 {
2074 if (*option == '+')
2075 break;
2076 i++;
cristye81f5522014-05-07 01:25:59 +00002077 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002078 ThrowConvertException(OptionError,"MissingArgument",option);
2079 if (IsGeometry(argv[i]) == MagickFalse)
2080 ThrowConvertInvalidArgumentException(option,argv[i]);
2081 break;
2082 }
2083 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2084 }
2085 case 'm':
2086 {
2087 if (LocaleCompare("map",option+1) == 0)
2088 {
2089 if (*option == '+')
2090 break;
2091 i++;
cristye81f5522014-05-07 01:25:59 +00002092 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002093 ThrowConvertException(OptionError,"MissingArgument",option);
2094 break;
2095 }
2096 if (LocaleCompare("mask",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 }
2105 if (LocaleCompare("matte",option+1) == 0)
2106 break;
2107 if (LocaleCompare("mattecolor",option+1) == 0)
2108 {
2109 if (*option == '+')
2110 break;
2111 i++;
cristye81f5522014-05-07 01:25:59 +00002112 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002113 ThrowConvertException(OptionError,"MissingArgument",option);
2114 break;
2115 }
cristy52ad9e92013-02-08 23:23:29 +00002116 if (LocaleCompare("maximum",option+1) == 0)
2117 break;
cristy2fc10e52014-04-26 14:13:53 +00002118 if (LocaleCompare("mean-shift",option+1) == 0)
2119 {
2120 if (*option == '+')
2121 break;
2122 i++;
cristye81f5522014-05-07 01:25:59 +00002123 if (i == (ssize_t) argc)
cristy2fc10e52014-04-26 14:13:53 +00002124 ThrowConvertException(OptionError,"MissingArgument",option);
2125 if (IsGeometry(argv[i]) == MagickFalse)
2126 ThrowConvertInvalidArgumentException(option,argv[i]);
2127 break;
2128 }
cristy52ad9e92013-02-08 23:23:29 +00002129 if (LocaleCompare("median",option+1) == 0)
2130 {
2131 if (*option == '+')
2132 break;
2133 i++;
cristye81f5522014-05-07 01:25:59 +00002134 if (i == (ssize_t) argc)
cristy52ad9e92013-02-08 23:23:29 +00002135 ThrowConvertException(OptionError,"MissingArgument",option);
2136 if (IsGeometry(argv[i]) == MagickFalse)
2137 ThrowConvertInvalidArgumentException(option,argv[i]);
2138 break;
2139 }
cristyb92495a2013-08-20 00:10:59 +00002140 if (LocaleCompare("metric",option+1) == 0)
2141 {
2142 ssize_t
2143 type;
2144
2145 if (*option == '+')
2146 break;
2147 i++;
2148 if (i == (ssize_t) argc)
2149 ThrowConvertException(OptionError,"MissingArgument",option);
2150 type=ParseCommandOption(MagickMetricOptions,MagickTrue,argv[i]);
2151 if (type < 0)
2152 ThrowConvertException(OptionError,"UnrecognizedMetricType",
2153 argv[i]);
2154 break;
2155 }
cristy52ad9e92013-02-08 23:23:29 +00002156 if (LocaleCompare("minimum",option+1) == 0)
2157 break;
2158 if (LocaleCompare("mode",option+1) == 0)
2159 {
2160 if (*option == '+')
2161 break;
2162 i++;
cristye81f5522014-05-07 01:25:59 +00002163 if (i == (ssize_t) argc)
cristy52ad9e92013-02-08 23:23:29 +00002164 ThrowConvertException(OptionError,"MissingArgument",option);
2165 if (IsGeometry(argv[i]) == MagickFalse)
2166 ThrowConvertInvalidArgumentException(option,argv[i]);
2167 break;
2168 }
cristy3ed852e2009-09-05 21:47:34 +00002169 if (LocaleCompare("modulate",option+1) == 0)
2170 {
2171 if (*option == '+')
2172 break;
2173 i++;
cristye81f5522014-05-07 01:25:59 +00002174 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002175 ThrowConvertException(OptionError,"MissingArgument",option);
2176 if (IsGeometry(argv[i]) == MagickFalse)
2177 ThrowConvertInvalidArgumentException(option,argv[i]);
2178 break;
2179 }
cristy80b1dee2014-01-09 11:27:24 +00002180 if (LocaleCompare("moments",option+1) == 0)
2181 break;
cristy3ed852e2009-09-05 21:47:34 +00002182 if (LocaleCompare("monitor",option+1) == 0)
2183 break;
2184 if (LocaleCompare("monochrome",option+1) == 0)
2185 break;
2186 if (LocaleCompare("morph",option+1) == 0)
2187 {
2188 if (*option == '+')
2189 break;
2190 i++;
cristye81f5522014-05-07 01:25:59 +00002191 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002192 ThrowConvertException(OptionError,"MissingArgument",option);
2193 if (IsGeometry(argv[i]) == MagickFalse)
2194 ThrowConvertInvalidArgumentException(option,argv[i]);
2195 break;
2196 }
anthony29188a82010-01-22 10:12:34 +00002197 if (LocaleCompare("morphology",option+1) == 0)
2198 {
anthony29188a82010-01-22 10:12:34 +00002199 char
cristy151b66d2015-04-15 10:50:31 +00002200 token[MagickPathExtent];
anthony29188a82010-01-22 10:12:34 +00002201
cristyb6bd4ad2010-08-08 01:12:27 +00002202 KernelInfo
2203 *kernel_info;
2204
cristybb503372010-05-27 20:51:26 +00002205 ssize_t
cristye6365592010-04-02 17:31:23 +00002206 op;
2207
anthony29188a82010-01-22 10:12:34 +00002208 i++;
cristybb503372010-05-27 20:51:26 +00002209 if (i == (ssize_t) argc)
anthony29188a82010-01-22 10:12:34 +00002210 ThrowConvertException(OptionError,"MissingArgument",option);
2211 GetMagickToken(argv[i],NULL,token);
cristy042ee782011-04-22 18:48:30 +00002212 op=ParseCommandOption(MagickMorphologyOptions,MagickFalse,token);
anthony29188a82010-01-22 10:12:34 +00002213 if (op < 0)
2214 ThrowConvertException(OptionError,"UnrecognizedMorphologyMethod",
cristye6365592010-04-02 17:31:23 +00002215 token);
anthony29188a82010-01-22 10:12:34 +00002216 i++;
cristye81f5522014-05-07 01:25:59 +00002217 if (i == (ssize_t) argc)
anthony29188a82010-01-22 10:12:34 +00002218 ThrowConvertException(OptionError,"MissingArgument",option);
cristy2c57b742014-10-31 00:40:34 +00002219 kernel_info=AcquireKernelInfo(argv[i],exception);
cristyb6bd4ad2010-08-08 01:12:27 +00002220 if (kernel_info == (KernelInfo *) NULL)
anthony29188a82010-01-22 10:12:34 +00002221 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00002222 kernel_info=DestroyKernelInfo(kernel_info);
anthony29188a82010-01-22 10:12:34 +00002223 break;
2224 }
cristy3ed852e2009-09-05 21:47:34 +00002225 if (LocaleCompare("mosaic",option+1) == 0)
2226 break;
2227 if (LocaleCompare("motion-blur",option+1) == 0)
2228 {
2229 if (*option == '+')
2230 break;
2231 i++;
cristye81f5522014-05-07 01:25:59 +00002232 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002233 ThrowConvertException(OptionError,"MissingArgument",option);
2234 if (IsGeometry(argv[i]) == MagickFalse)
2235 ThrowConvertInvalidArgumentException(option,argv[i]);
2236 break;
2237 }
2238 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2239 }
2240 case 'n':
2241 {
2242 if (LocaleCompare("negate",option+1) == 0)
2243 break;
2244 if (LocaleCompare("noise",option+1) == 0)
2245 {
2246 i++;
cristye81f5522014-05-07 01:25:59 +00002247 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002248 ThrowConvertException(OptionError,"MissingArgument",option);
2249 if (*option == '+')
2250 {
cristybb503372010-05-27 20:51:26 +00002251 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002252 noise;
2253
cristy042ee782011-04-22 18:48:30 +00002254 noise=ParseCommandOption(MagickNoiseOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002255 if (noise < 0)
2256 ThrowConvertException(OptionError,"UnrecognizedNoiseType",
2257 argv[i]);
2258 break;
2259 }
2260 if (IsGeometry(argv[i]) == MagickFalse)
2261 ThrowConvertInvalidArgumentException(option,argv[i]);
2262 break;
2263 }
2264 if (LocaleCompare("noop",option+1) == 0)
2265 break;
2266 if (LocaleCompare("normalize",option+1) == 0)
2267 break;
2268 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2269 }
2270 case 'o':
2271 {
2272 if (LocaleCompare("opaque",option+1) == 0)
2273 {
2274 i++;
cristye81f5522014-05-07 01:25:59 +00002275 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002276 ThrowConvertException(OptionError,"MissingArgument",option);
2277 break;
2278 }
2279 if (LocaleCompare("ordered-dither",option+1) == 0)
2280 {
2281 if (*option == '+')
2282 break;
2283 i++;
cristye81f5522014-05-07 01:25:59 +00002284 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002285 ThrowConvertException(OptionError,"MissingArgument",option);
2286 break;
2287 }
2288 if (LocaleCompare("orient",option+1) == 0)
2289 {
cristybb503372010-05-27 20:51:26 +00002290 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002291 orientation;
2292
2293 if (*option == '+')
2294 break;
2295 i++;
cristye81f5522014-05-07 01:25:59 +00002296 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002297 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002298 orientation=ParseCommandOption(MagickOrientationOptions,
cristy3ed852e2009-09-05 21:47:34 +00002299 MagickFalse,argv[i]);
2300 if (orientation < 0)
2301 ThrowConvertException(OptionError,"UnrecognizedImageOrientation",
2302 argv[i]);
2303 break;
2304 }
2305 ThrowConvertException(OptionError,"UnrecognizedOption",argv[i])
2306 }
2307 case 'p':
2308 {
2309 if (LocaleCompare("page",option+1) == 0)
2310 {
2311 if (*option == '+')
2312 break;
2313 i++;
cristybb503372010-05-27 20:51:26 +00002314 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002315 ThrowConvertException(OptionError,"MissingArgument",option);
2316 break;
2317 }
2318 if (LocaleCompare("paint",option+1) == 0)
2319 {
2320 if (*option == '+')
2321 break;
2322 i++;
cristye81f5522014-05-07 01:25:59 +00002323 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002324 ThrowConvertException(OptionError,"MissingArgument",option);
2325 if (IsGeometry(argv[i]) == MagickFalse)
2326 ThrowConvertInvalidArgumentException(option,argv[i]);
2327 break;
2328 }
cristyab2b40a2012-11-04 01:43:29 +00002329 if (LocaleCompare("perceptible",option+1) == 0)
2330 {
2331 if (*option == '+')
2332 break;
2333 i++;
cristye81f5522014-05-07 01:25:59 +00002334 if (i == (ssize_t) argc)
cristyab2b40a2012-11-04 01:43:29 +00002335 ThrowConvertException(OptionError,"MissingArgument",option);
2336 if (IsGeometry(argv[i]) == MagickFalse)
2337 ThrowConvertInvalidArgumentException(option,argv[i]);
2338 break;
2339 }
cristy3ed852e2009-09-05 21:47:34 +00002340 if (LocaleCompare("ping",option+1) == 0)
2341 break;
2342 if (LocaleCompare("pointsize",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 }
2353 if (LocaleCompare("polaroid",option+1) == 0)
2354 {
2355 if (*option == '+')
2356 break;
2357 i++;
cristye81f5522014-05-07 01:25:59 +00002358 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002359 ThrowConvertException(OptionError,"MissingArgument",option);
2360 if (IsGeometry(argv[i]) == MagickFalse)
2361 ThrowConvertInvalidArgumentException(option,argv[i]);
2362 break;
2363 }
cristy8cdfb342012-11-11 21:44:36 +00002364 if (LocaleCompare("poly",option+1) == 0)
2365 {
2366 if (*option == '+')
2367 break;
2368 i++;
cristye81f5522014-05-07 01:25:59 +00002369 if (i == (ssize_t) argc)
cristy8cdfb342012-11-11 21:44:36 +00002370 ThrowConvertException(OptionError,"MissingArgument",option);
2371 if (IsGeometry(argv[i]) == MagickFalse)
2372 ThrowConvertInvalidArgumentException(option,argv[i]);
2373 break;
2374 }
cristy3ed852e2009-09-05 21:47:34 +00002375 if (LocaleCompare("posterize",option+1) == 0)
2376 {
2377 if (*option == '+')
2378 break;
2379 i++;
cristye81f5522014-05-07 01:25:59 +00002380 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002381 ThrowConvertException(OptionError,"MissingArgument",option);
2382 if (IsGeometry(argv[i]) == MagickFalse)
2383 ThrowConvertInvalidArgumentException(option,argv[i]);
2384 break;
2385 }
cristye7f51092010-01-17 00:39:37 +00002386 if (LocaleCompare("precision",option+1) == 0)
2387 {
2388 if (*option == '+')
2389 break;
2390 i++;
cristye81f5522014-05-07 01:25:59 +00002391 if (i == (ssize_t) argc)
cristye7f51092010-01-17 00:39:37 +00002392 ThrowConvertException(OptionError,"MissingArgument",option);
2393 if (IsGeometry(argv[i]) == MagickFalse)
2394 ThrowConvertInvalidArgumentException(option,argv[i]);
2395 break;
2396 }
cristy3ed852e2009-09-05 21:47:34 +00002397 if (LocaleCompare("preview",option+1) == 0)
2398 {
cristybb503372010-05-27 20:51:26 +00002399 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002400 preview;
2401
2402 if (*option == '+')
2403 break;
2404 i++;
cristye81f5522014-05-07 01:25:59 +00002405 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002406 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002407 preview=ParseCommandOption(MagickPreviewOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002408 argv[i]);
2409 if (preview < 0)
2410 ThrowConvertException(OptionError,"UnrecognizedPreviewType",
2411 argv[i]);
2412 break;
2413 }
2414 if (LocaleCompare("print",option+1) == 0)
2415 {
2416 if (*option == '+')
2417 break;
2418 i++;
cristye81f5522014-05-07 01:25:59 +00002419 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002420 ThrowConvertException(OptionError,"MissingArgument",option);
2421 break;
2422 }
2423 if (LocaleCompare("process",option+1) == 0)
2424 {
2425 if (*option == '+')
2426 break;
2427 i++;
cristye81f5522014-05-07 01:25:59 +00002428 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002429 ThrowConvertException(OptionError,"MissingArgument",option);
2430 break;
2431 }
2432 if (LocaleCompare("profile",option+1) == 0)
2433 {
2434 i++;
cristye81f5522014-05-07 01:25:59 +00002435 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002436 ThrowConvertException(OptionError,"MissingArgument",option);
2437 break;
2438 }
2439 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2440 }
2441 case 'q':
2442 {
2443 if (LocaleCompare("quality",option+1) == 0)
2444 {
2445 if (*option == '+')
2446 break;
2447 i++;
cristye81f5522014-05-07 01:25:59 +00002448 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002449 ThrowConvertException(OptionError,"MissingArgument",option);
2450 if (IsGeometry(argv[i]) == MagickFalse)
2451 ThrowConvertInvalidArgumentException(option,argv[i]);
2452 break;
2453 }
2454 if (LocaleCompare("quantize",option+1) == 0)
2455 {
cristybb503372010-05-27 20:51:26 +00002456 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002457 colorspace;
2458
2459 if (*option == '+')
2460 break;
2461 i++;
cristye81f5522014-05-07 01:25:59 +00002462 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002463 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002464 colorspace=ParseCommandOption(MagickColorspaceOptions,
cristy3ed852e2009-09-05 21:47:34 +00002465 MagickFalse,argv[i]);
2466 if (colorspace < 0)
2467 ThrowConvertException(OptionError,"UnrecognizedColorspace",
2468 argv[i]);
2469 break;
2470 }
2471 if (LocaleCompare("quiet",option+1) == 0)
2472 break;
2473 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2474 }
2475 case 'r':
2476 {
dirk6d612cf2014-03-13 21:17:23 +00002477 if (LocaleCompare("rotational-blur",option+1) == 0)
cristy3ed852e2009-09-05 21:47:34 +00002478 {
2479 i++;
cristye81f5522014-05-07 01:25:59 +00002480 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002481 ThrowConvertException(OptionError,"MissingArgument",option);
2482 if (IsGeometry(argv[i]) == MagickFalse)
2483 ThrowConvertInvalidArgumentException(option,argv[i]);
2484 break;
2485 }
2486 if (LocaleCompare("raise",option+1) == 0)
2487 {
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 }
2495 if (LocaleCompare("random-threshold",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 }
cristy3ed852e2009-09-05 21:47:34 +00002506 if (LocaleCompare("red-primary",option+1) == 0)
2507 {
2508 if (*option == '+')
2509 break;
2510 i++;
cristye81f5522014-05-07 01:25:59 +00002511 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002512 ThrowConvertException(OptionError,"MissingArgument",option);
2513 if (IsGeometry(argv[i]) == MagickFalse)
2514 ThrowConvertInvalidArgumentException(option,argv[i]);
2515 break;
2516 }
2517 if (LocaleCompare("regard-warnings",option+1) == 0)
2518 break;
2519 if (LocaleCompare("region",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 if (IsGeometry(argv[i]) == MagickFalse)
2527 ThrowConvertInvalidArgumentException(option,argv[i]);
2528 break;
2529 }
2530 if (LocaleCompare("remap",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 break;
2538 }
2539 if (LocaleCompare("render",option+1) == 0)
2540 break;
2541 if (LocaleCompare("repage",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("resample",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 (LocaleCompare("resize",option+1) == 0)
2564 {
2565 if (*option == '+')
2566 break;
2567 i++;
cristye81f5522014-05-07 01:25:59 +00002568 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002569 ThrowConvertException(OptionError,"MissingArgument",option);
2570 if (IsGeometry(argv[i]) == MagickFalse)
2571 ThrowConvertInvalidArgumentException(option,argv[i]);
2572 break;
2573 }
2574 if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
2575 {
2576 respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
2577 break;
2578 }
2579 if (LocaleCompare("reverse",option+1) == 0)
2580 break;
2581 if (LocaleCompare("roll",option+1) == 0)
2582 {
2583 if (*option == '+')
2584 break;
2585 i++;
cristye81f5522014-05-07 01:25:59 +00002586 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002587 ThrowConvertException(OptionError,"MissingArgument",option);
2588 if (IsGeometry(argv[i]) == MagickFalse)
2589 ThrowConvertInvalidArgumentException(option,argv[i]);
2590 break;
2591 }
2592 if (LocaleCompare("rotate",option+1) == 0)
2593 {
2594 i++;
cristye81f5522014-05-07 01:25:59 +00002595 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002596 ThrowConvertException(OptionError,"MissingArgument",option);
2597 if (IsGeometry(argv[i]) == MagickFalse)
2598 ThrowConvertInvalidArgumentException(option,argv[i]);
2599 break;
2600 }
2601 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2602 }
2603 case 's':
2604 {
2605 if (LocaleCompare("sample",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("sampling-factor",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("scale",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("scene",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("seed",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("segment",option+1) == 0)
2661 {
2662 if (*option == '+')
2663 break;
2664 i++;
cristye81f5522014-05-07 01:25:59 +00002665 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002666 ThrowConvertException(OptionError,"MissingArgument",option);
2667 if (IsGeometry(argv[i]) == MagickFalse)
2668 ThrowConvertInvalidArgumentException(option,argv[i]);
2669 break;
2670 }
2671 if (LocaleCompare("selective-blur",option+1) == 0)
2672 {
2673 i++;
cristye81f5522014-05-07 01:25:59 +00002674 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002675 ThrowConvertException(OptionError,"MissingArgument",option);
2676 if (IsGeometry(argv[i]) == MagickFalse)
2677 ThrowConvertInvalidArgumentException(option,argv[i]);
2678 break;
2679 }
2680 if (LocaleCompare("separate",option+1) == 0)
2681 break;
2682 if (LocaleCompare("sepia-tone",option+1) == 0)
2683 {
2684 if (*option == '+')
2685 break;
2686 i++;
cristye81f5522014-05-07 01:25:59 +00002687 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002688 ThrowConvertException(OptionError,"MissingArgument",option);
2689 if (IsGeometry(argv[i]) == MagickFalse)
2690 ThrowConvertInvalidArgumentException(option,argv[i]);
2691 break;
2692 }
2693 if (LocaleCompare("set",option+1) == 0)
2694 {
2695 i++;
cristybb503372010-05-27 20:51:26 +00002696 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002697 ThrowConvertException(OptionError,"MissingArgument",option);
2698 if (*option == '+')
2699 break;
2700 i++;
cristybb503372010-05-27 20:51:26 +00002701 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002702 ThrowConvertException(OptionError,"MissingArgument",option);
2703 break;
2704 }
2705 if (LocaleCompare("shade",option+1) == 0)
2706 {
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("shadow",option+1) == 0)
2715 {
2716 if (*option == '+')
2717 break;
2718 i++;
cristye81f5522014-05-07 01:25:59 +00002719 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002720 ThrowConvertException(OptionError,"MissingArgument",option);
2721 if (IsGeometry(argv[i]) == MagickFalse)
2722 ThrowConvertInvalidArgumentException(option,argv[i]);
2723 break;
2724 }
2725 if (LocaleCompare("sharpen",option+1) == 0)
2726 {
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("shave",option+1) == 0)
2735 {
2736 if (*option == '+')
2737 break;
2738 i++;
cristye81f5522014-05-07 01:25:59 +00002739 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002740 ThrowConvertException(OptionError,"MissingArgument",option);
2741 if (IsGeometry(argv[i]) == MagickFalse)
2742 ThrowConvertInvalidArgumentException(option,argv[i]);
2743 break;
2744 }
2745 if (LocaleCompare("shear",option+1) == 0)
2746 {
2747 i++;
cristye81f5522014-05-07 01:25:59 +00002748 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002749 ThrowConvertException(OptionError,"MissingArgument",option);
2750 if (IsGeometry(argv[i]) == MagickFalse)
2751 ThrowConvertInvalidArgumentException(option,argv[i]);
2752 break;
2753 }
2754 if (LocaleCompare("sigmoidal-contrast",option+1) == 0)
2755 {
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("size",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 }
2774 if (LocaleCompare("sketch",option+1) == 0)
2775 {
2776 if (*option == '+')
2777 break;
2778 i++;
cristye81f5522014-05-07 01:25:59 +00002779 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002780 ThrowConvertException(OptionError,"MissingArgument",option);
2781 if (IsGeometry(argv[i]) == MagickFalse)
2782 ThrowConvertInvalidArgumentException(option,argv[i]);
2783 break;
2784 }
cristy4285d782011-02-09 20:12:28 +00002785 if (LocaleCompare("smush",option+1) == 0)
2786 {
cristy4285d782011-02-09 20:12:28 +00002787 i++;
cristye81f5522014-05-07 01:25:59 +00002788 if (i == (ssize_t) argc)
cristy4285d782011-02-09 20:12:28 +00002789 ThrowConvertException(OptionError,"MissingArgument",option);
2790 if (IsGeometry(argv[i]) == MagickFalse)
2791 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy4285d782011-02-09 20:12:28 +00002792 break;
2793 }
cristy3ed852e2009-09-05 21:47:34 +00002794 if (LocaleCompare("solarize",option+1) == 0)
2795 {
2796 if (*option == '+')
2797 break;
2798 i++;
cristye81f5522014-05-07 01:25:59 +00002799 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002800 ThrowConvertException(OptionError,"MissingArgument",option);
2801 if (IsGeometry(argv[i]) == MagickFalse)
2802 ThrowConvertInvalidArgumentException(option,argv[i]);
2803 break;
2804 }
2805 if (LocaleCompare("sparse-color",option+1) == 0)
2806 {
cristybb503372010-05-27 20:51:26 +00002807 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002808 op;
2809
2810 i++;
cristybb503372010-05-27 20:51:26 +00002811 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002812 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002813 op=ParseCommandOption(MagickSparseColorOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002814 if (op < 0)
2815 ThrowConvertException(OptionError,"UnrecognizedSparseColorMethod",
2816 argv[i]);
2817 i++;
cristye81f5522014-05-07 01:25:59 +00002818 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002819 ThrowConvertException(OptionError,"MissingArgument",option);
2820 break;
2821 }
2822 if (LocaleCompare("splice",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 ThrowConvertException(OptionError,"MissingArgument",option);
2829 if (IsGeometry(argv[i]) == MagickFalse)
2830 ThrowConvertInvalidArgumentException(option,argv[i]);
2831 break;
2832 }
2833 if (LocaleCompare("spread",option+1) == 0)
2834 {
2835 if (*option == '+')
2836 break;
2837 i++;
cristye81f5522014-05-07 01:25:59 +00002838 if ((i == (ssize_t) argc) ||
cristy3ed852e2009-09-05 21:47:34 +00002839 (IsGeometry(argv[i]) == MagickFalse))
2840 ThrowConvertException(OptionError,"MissingArgument",option);
2841 break;
2842 }
cristy0834d642011-03-18 18:26:08 +00002843 if (LocaleCompare("statistic",option+1) == 0)
2844 {
2845 ssize_t
2846 op;
2847
2848 if (*option == '+')
2849 break;
2850 i++;
2851 if (i == (ssize_t) argc)
2852 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002853 op=ParseCommandOption(MagickStatisticOptions,MagickFalse,argv[i]);
cristy0834d642011-03-18 18:26:08 +00002854 if (op < 0)
2855 ThrowConvertException(OptionError,"UnrecognizedStatisticType",
2856 argv[i]);
2857 i++;
cristye81f5522014-05-07 01:25:59 +00002858 if (i == (ssize_t) argc)
cristy0834d642011-03-18 18:26:08 +00002859 ThrowConvertException(OptionError,"MissingArgument",option);
2860 if (IsGeometry(argv[i]) == MagickFalse)
2861 ThrowConvertInvalidArgumentException(option,argv[i]);
2862 break;
2863 }
cristy3ed852e2009-09-05 21:47:34 +00002864 if (LocaleCompare("stretch",option+1) == 0)
2865 {
cristybb503372010-05-27 20:51:26 +00002866 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002867 stretch;
2868
2869 if (*option == '+')
2870 break;
2871 i++;
cristye81f5522014-05-07 01:25:59 +00002872 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002873 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002874 stretch=ParseCommandOption(MagickStretchOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002875 argv[i]);
2876 if (stretch < 0)
2877 ThrowConvertException(OptionError,"UnrecognizedStyleType",
2878 argv[i]);
2879 break;
2880 }
2881 if (LocaleCompare("strip",option+1) == 0)
2882 break;
2883 if (LocaleCompare("stroke",option+1) == 0)
2884 {
2885 if (*option == '+')
2886 break;
2887 i++;
cristye81f5522014-05-07 01:25:59 +00002888 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002889 ThrowConvertException(OptionError,"MissingArgument",option);
2890 break;
2891 }
2892 if (LocaleCompare("strokewidth",option+1) == 0)
2893 {
2894 if (*option == '+')
2895 break;
2896 i++;
cristye81f5522014-05-07 01:25:59 +00002897 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002898 ThrowConvertException(OptionError,"MissingArgument",option);
2899 if (IsGeometry(argv[i]) == MagickFalse)
2900 ThrowConvertInvalidArgumentException(option,argv[i]);
2901 break;
2902 }
2903 if (LocaleCompare("style",option+1) == 0)
2904 {
cristybb503372010-05-27 20:51:26 +00002905 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002906 style;
2907
2908 if (*option == '+')
2909 break;
2910 i++;
cristye81f5522014-05-07 01:25:59 +00002911 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002912 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002913 style=ParseCommandOption(MagickStyleOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002914 if (style < 0)
2915 ThrowConvertException(OptionError,"UnrecognizedStyleType",
2916 argv[i]);
2917 break;
2918 }
cristy52ad9e92013-02-08 23:23:29 +00002919 if (LocaleCompare("support",option+1) == 0)
2920 {
2921 i++; /* deprecated */
2922 break;
2923 }
cristy3ed852e2009-09-05 21:47:34 +00002924 if (LocaleCompare("swap",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 }
2935 if (LocaleCompare("swirl",option+1) == 0)
2936 {
2937 if (*option == '+')
2938 break;
2939 i++;
cristye81f5522014-05-07 01:25:59 +00002940 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002941 ThrowConvertException(OptionError,"MissingArgument",option);
2942 if (IsGeometry(argv[i]) == MagickFalse)
2943 ThrowConvertInvalidArgumentException(option,argv[i]);
2944 break;
2945 }
cristyd9a29192010-10-16 16:49:53 +00002946 if (LocaleCompare("synchronize",option+1) == 0)
2947 break;
cristy3ed852e2009-09-05 21:47:34 +00002948 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2949 }
2950 case 't':
2951 {
2952 if (LocaleCompare("taint",option+1) == 0)
2953 break;
2954 if (LocaleCompare("texture",option+1) == 0)
2955 {
2956 if (*option == '+')
2957 break;
2958 i++;
cristye81f5522014-05-07 01:25:59 +00002959 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002960 ThrowConvertException(OptionError,"MissingArgument",option);
2961 break;
2962 }
anthony52bef752012-03-27 13:54:47 +00002963 if (LocaleCompare("threshold",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 }
anthony52bef752012-03-27 13:54:47 +00002974 if (LocaleCompare("thumbnail",option+1) == 0)
cristy3ed852e2009-09-05 21:47:34 +00002975 {
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 if (IsGeometry(argv[i]) == MagickFalse)
2982 ThrowConvertInvalidArgumentException(option,argv[i]);
2983 break;
2984 }
2985 if (LocaleCompare("tile",option+1) == 0)
2986 {
2987 if (*option == '+')
2988 break;
2989 i++;
cristye81f5522014-05-07 01:25:59 +00002990 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002991 ThrowConvertException(OptionError,"MissingArgument",option);
2992 break;
2993 }
2994 if (LocaleCompare("tile-offset",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("tint",option+1) == 0)
3006 {
3007 if (*option == '+')
3008 break;
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 if (IsGeometry(argv[i]) == MagickFalse)
3013 ThrowConvertInvalidArgumentException(option,argv[i]);
3014 break;
3015 }
3016 if (LocaleCompare("transform",option+1) == 0)
3017 break;
3018 if (LocaleCompare("transparent",option+1) == 0)
3019 {
3020 i++;
cristye81f5522014-05-07 01:25:59 +00003021 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003022 ThrowConvertException(OptionError,"MissingArgument",option);
3023 break;
3024 }
3025 if (LocaleCompare("transparent-color",option+1) == 0)
3026 {
3027 if (*option == '+')
3028 break;
3029 i++;
cristye81f5522014-05-07 01:25:59 +00003030 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003031 ThrowConvertException(OptionError,"MissingArgument",option);
3032 break;
3033 }
3034 if (LocaleCompare("transpose",option+1) == 0)
3035 break;
3036 if (LocaleCompare("transverse",option+1) == 0)
3037 break;
3038 if (LocaleCompare("treedepth",option+1) == 0)
3039 {
3040 if (*option == '+')
3041 break;
3042 i++;
cristye81f5522014-05-07 01:25:59 +00003043 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003044 ThrowConvertException(OptionError,"MissingArgument",option);
3045 if (IsGeometry(argv[i]) == MagickFalse)
3046 ThrowConvertInvalidArgumentException(option,argv[i]);
3047 break;
3048 }
3049 if (LocaleCompare("trim",option+1) == 0)
3050 break;
3051 if (LocaleCompare("type",option+1) == 0)
3052 {
cristybb503372010-05-27 20:51:26 +00003053 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00003054 type;
3055
3056 if (*option == '+')
3057 break;
3058 i++;
cristye81f5522014-05-07 01:25:59 +00003059 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003060 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00003061 type=ParseCommandOption(MagickTypeOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00003062 if (type < 0)
3063 ThrowConvertException(OptionError,"UnrecognizedImageType",
3064 argv[i]);
3065 break;
3066 }
3067 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3068 }
3069 case 'u':
3070 {
3071 if (LocaleCompare("undercolor",option+1) == 0)
3072 {
3073 if (*option == '+')
3074 break;
3075 i++;
cristye81f5522014-05-07 01:25:59 +00003076 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003077 ThrowConvertException(OptionError,"MissingArgument",option);
3078 break;
3079 }
3080 if (LocaleCompare("unique-colors",option+1) == 0)
3081 break;
3082 if (LocaleCompare("units",option+1) == 0)
3083 {
cristybb503372010-05-27 20:51:26 +00003084 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00003085 units;
3086
3087 if (*option == '+')
3088 break;
3089 i++;
cristye81f5522014-05-07 01:25:59 +00003090 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003091 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00003092 units=ParseCommandOption(MagickResolutionOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00003093 argv[i]);
3094 if (units < 0)
3095 ThrowConvertException(OptionError,"UnrecognizedUnitsType",
3096 argv[i]);
3097 break;
3098 }
3099 if (LocaleCompare("unsharp",option+1) == 0)
3100 {
3101 if (*option == '+')
3102 break;
3103 i++;
cristye81f5522014-05-07 01:25:59 +00003104 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003105 ThrowConvertException(OptionError,"MissingArgument",option);
3106 if (IsGeometry(argv[i]) == MagickFalse)
3107 ThrowConvertInvalidArgumentException(option,argv[i]);
3108 break;
3109 }
3110 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3111 }
3112 case 'v':
3113 {
3114 if (LocaleCompare("verbose",option+1) == 0)
3115 break;
3116 if ((LocaleCompare("version",option+1) == 0) ||
3117 (LocaleCompare("-version",option+1) == 0))
3118 {
cristy4f7a6132012-12-23 00:35:19 +00003119 ListMagickVersion(stdout);
cristy3ed852e2009-09-05 21:47:34 +00003120 break;
3121 }
3122 if (LocaleCompare("view",option+1) == 0)
3123 {
3124 if (*option == '+')
3125 break;
3126 i++;
cristye81f5522014-05-07 01:25:59 +00003127 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003128 ThrowConvertException(OptionError,"MissingArgument",option);
3129 break;
3130 }
3131 if (LocaleCompare("vignette",option+1) == 0)
3132 {
3133 if (*option == '+')
3134 break;
3135 i++;
cristye81f5522014-05-07 01:25:59 +00003136 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003137 ThrowConvertException(OptionError,"MissingArgument",option);
3138 if (IsGeometry(argv[i]) == MagickFalse)
3139 ThrowConvertInvalidArgumentException(option,argv[i]);
3140 break;
3141 }
3142 if (LocaleCompare("virtual-pixel",option+1) == 0)
3143 {
cristybb503372010-05-27 20:51:26 +00003144 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00003145 method;
3146
3147 if (*option == '+')
3148 break;
3149 i++;
cristye81f5522014-05-07 01:25:59 +00003150 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003151 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00003152 method=ParseCommandOption(MagickVirtualPixelOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00003153 argv[i]);
3154 if (method < 0)
3155 ThrowConvertException(OptionError,
3156 "UnrecognizedVirtualPixelMethod",argv[i]);
3157 break;
3158 }
3159 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3160 }
3161 case 'w':
3162 {
3163 if (LocaleCompare("wave",option+1) == 0)
3164 {
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 if (IsGeometry(argv[i]) == MagickFalse)
3169 ThrowConvertInvalidArgumentException(option,argv[i]);
3170 break;
3171 }
3172 if (LocaleCompare("weight",option+1) == 0)
3173 {
3174 if (*option == '+')
3175 break;
3176 i++;
cristye81f5522014-05-07 01:25:59 +00003177 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003178 ThrowConvertException(OptionError,"MissingArgument",option);
3179 break;
3180 }
3181 if (LocaleCompare("white-point",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("white-threshold",option+1) == 0)
3193 {
3194 if (*option == '+')
3195 break;
3196 i++;
cristye81f5522014-05-07 01:25:59 +00003197 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003198 ThrowConvertException(OptionError,"MissingArgument",option);
3199 if (IsGeometry(argv[i]) == MagickFalse)
3200 ThrowConvertInvalidArgumentException(option,argv[i]);
3201 break;
3202 }
3203 if (LocaleCompare("write",option+1) == 0)
3204 {
3205 i++;
cristye81f5522014-05-07 01:25:59 +00003206 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00003207 ThrowConvertException(OptionError,"MissingArgument",option);
3208 break;
3209 }
3210 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3211 }
3212 case '?':
3213 break;
3214 default:
3215 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3216 }
cristy042ee782011-04-22 18:48:30 +00003217 fire=(GetCommandOptionFlags(MagickCommandOptions,MagickFalse,option) &
3218 FireOptionFlag) == 0 ? MagickFalse : MagickTrue;
cristy3ed852e2009-09-05 21:47:34 +00003219 if (fire != MagickFalse)
3220 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
3221 }
3222 if (k != 0)
3223 ThrowConvertException(OptionError,"UnbalancedParenthesis",argv[i]);
cristybb503372010-05-27 20:51:26 +00003224 if (i-- != (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00003225 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
cristy3ed852e2009-09-05 21:47:34 +00003226 FinalizeImageSettings(image_info,image,MagickTrue);
cristy94f20072009-09-12 02:12:36 +00003227 if (image == (Image *) NULL)
anthonye5b39652012-04-21 05:37:29 +00003228 ThrowConvertException(OptionError,"NoImagesDefined",argv[argc-1]);
3229 if (IsCommandOption(argv[argc-1]))
3230 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
3231 if (LocaleCompare(" ",argv[argc-1])==0) /* common line continuation error */
cristy94f20072009-09-12 02:12:36 +00003232 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
cristy3ed852e2009-09-05 21:47:34 +00003233 status&=WriteImages(image_info,image,argv[argc-1],exception);
3234 if (metadata != (char **) NULL)
3235 {
3236 char
3237 *text;
3238
cristy018f07f2011-09-04 21:15:19 +00003239 text=InterpretImageProperties(image_info,image,format,exception);
cristy3ed852e2009-09-05 21:47:34 +00003240 if (text == (char *) NULL)
3241 ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
3242 GetExceptionMessage(errno));
3243 (void) ConcatenateString(&(*metadata),text);
3244 text=DestroyString(text);
3245 }
3246 DestroyConvert();
3247 return(status != 0 ? MagickTrue : MagickFalse);
3248}