PageRenderTime 37ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/scripts/ImageMagick-6.6.2-6/wand/convert.c

https://bitbucket.org/JasonGross/alphabets
C | 2989 lines | 2833 code | 59 blank | 97 comment | 1509 complexity | afb6c8f3728e27fe77ddd5d581a6669a MD5 | raw file
Possible License(s): BSD-3-Clause-No-Nuclear-License-2014, Apache-2.0, MPL-2.0-no-copyleft-exception
  1. /*
  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 %
  16. % John Cristy %
  17. % April 1992 %
  18. % %
  19. % %
  20. % Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization %
  21. % 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. Include declarations.
  43. */
  44. #include "wand/studio.h"
  45. #include "wand/MagickWand.h"
  46. #include "wand/mogrify-private.h"
  47. /*
  48. Define declarations.
  49. */
  50. #define ThrowFileException(exception,severity,tag,context) \
  51. { \
  52. (void) ThrowMagickException(exception,GetMagickModule(),severity, \
  53. tag == (const char *) NULL ? "unknown" : tag,"`%s': %s",context, \
  54. GetExceptionMessage(errno)); \
  55. }
  56. /*
  57. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  58. % %
  59. % %
  60. % %
  61. + C o n v e r t I m a g e C o m m a n d %
  62. % %
  63. % %
  64. % %
  65. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  66. %
  67. % ConvertImageCommand() reads one or more images, applies one or more image
  68. % processing operations, and writes out the image in the same or differing
  69. % format.
  70. %
  71. % The format of the ConvertImageCommand method is:
  72. %
  73. % MagickBooleanType ConvertImageCommand(ImageInfo *image_info,int argc,
  74. % char **argv,char **metadata,ExceptionInfo *exception)
  75. %
  76. % A description of each parameter follows:
  77. %
  78. % o image_info: the image info.
  79. %
  80. % o argc: the number of elements in the argument vector.
  81. %
  82. % o argv: A text array containing the command line arguments.
  83. %
  84. % o metadata: any metadata is returned here.
  85. %
  86. % o exception: return any errors or warnings in this structure.
  87. %
  88. */
  89. static MagickBooleanType ConcatenateImages(int argc,char **argv,
  90. ExceptionInfo *exception)
  91. {
  92. FILE
  93. *input,
  94. *output;
  95. int
  96. c;
  97. register ssize_t
  98. i;
  99. /*
  100. Open output file.
  101. */
  102. output=OpenMagickStream(argv[argc-1],"wb");
  103. if (output == (FILE *) NULL)
  104. {
  105. ThrowFileException(exception,FileOpenError,"UnableToOpenFile",
  106. argv[argc-1]);
  107. return(MagickFalse);
  108. }
  109. for (i=2; i < (ssize_t) (argc-1); i++)
  110. {
  111. input=OpenMagickStream(argv[i],"rb");
  112. if (input == (FILE *) NULL)
  113. ThrowFileException(exception,FileOpenError,"UnableToOpenFile",argv[i]);
  114. for (c=fgetc(input); c != EOF; c=fgetc(input))
  115. (void) fputc((char) c,output);
  116. (void) fclose(input);
  117. (void) remove(argv[i]);
  118. }
  119. (void) fclose(output);
  120. return(MagickTrue);
  121. }
  122. static MagickBooleanType ConvertUsage(void)
  123. {
  124. static const char
  125. *miscellaneous[]=
  126. {
  127. "-debug events display copious debugging information",
  128. "-help print program options",
  129. "-list type print a list of supported option arguments",
  130. "-log format format of debugging information",
  131. "-version print version information",
  132. (char *) NULL
  133. },
  134. *operators[]=
  135. {
  136. "-adaptive-blur geometry",
  137. " adaptively blur pixels; decrease effect near edges",
  138. "-adaptive-resize geometry",
  139. " adaptively resize image using 'mesh' interpolation",
  140. "-adaptive-sharpen geometry",
  141. " adaptively sharpen pixels; increase effect near edges",
  142. "-alpha option on, activate, off, deactivate, set, opaque, copy",
  143. " transparent, extract, background, or shape",
  144. "-annotate geometry text",
  145. " annotate the image with text",
  146. "-auto-gamma automagically adjust gamma level of image",
  147. "-auto-level automagically adjust color levels of image",
  148. "-auto-orient automagically orient (rotate) image",
  149. "-bench iterations measure performance",
  150. "-black-threshold value",
  151. " force all pixels below the threshold into black",
  152. "-blue-shift factor simulate a scene at nighttime in the moonlight",
  153. "-blur geometry reduce image noise and reduce detail levels",
  154. "-border geometry surround image with a border of color",
  155. "-bordercolor color border color",
  156. "-brightness-contrast geometry",
  157. " improve brightness / contrast of the image",
  158. "-cdl filename color correct with a color decision list",
  159. "-charcoal radius simulate a charcoal drawing",
  160. "-chop geometry remove pixels from the image interior",
  161. "-clamp restrict pixel range from 0 to the quantum depth",
  162. "-clip clip along the first path from the 8BIM profile",
  163. "-clip-mask filename associate a clip mask with the image",
  164. "-clip-path id clip along a named path from the 8BIM profile",
  165. "-colorize value colorize the image with the fill color",
  166. "-color-matrix matrix apply color correction to the image",
  167. "-contrast enhance or reduce the image contrast",
  168. "-contrast-stretch geometry",
  169. " improve contrast by `stretching' the intensity range",
  170. "-convolve coefficients",
  171. " apply a convolution kernel to the image",
  172. "-cycle amount cycle the image colormap",
  173. "-decipher filename convert cipher pixels to plain pixels",
  174. "-deskew threshold straighten an image",
  175. "-despeckle reduce the speckles within an image",
  176. "-distort method args",
  177. " distort images according to given method ad args",
  178. "-draw string annotate the image with a graphic primitive",
  179. "-edge radius apply a filter to detect edges in the image",
  180. "-encipher filename convert plain pixels to cipher pixels",
  181. "-emboss radius emboss an image",
  182. "-enhance apply a digital filter to enhance a noisy image",
  183. "-equalize perform histogram equalization to an image",
  184. "-evaluate operator value",
  185. " evaluate an arithmetic, relational, or logical expression",
  186. "-extent geometry set the image size",
  187. "-extract geometry extract area from image",
  188. "-fft implements the discrete Fourier transform (DFT)",
  189. "-flip flip image vertically",
  190. "-floodfill geometry color",
  191. " floodfill the image with color",
  192. "-flop flop image horizontally",
  193. "-frame geometry surround image with an ornamental border",
  194. "-function name parameters",
  195. " apply function over image values",
  196. "-gamma value level of gamma correction",
  197. "-gaussian-blur geometry",
  198. " reduce image noise and reduce detail levels",
  199. "-geometry geometry preferred size or location of the image",
  200. "-identify identify the format and characteristics of the image",
  201. "-ift implements the inverse discrete Fourier transform (DFT)",
  202. "-implode amount implode image pixels about the center",
  203. "-lat geometry local adaptive thresholding",
  204. "-layers method optimize, merge, or compare image layers",
  205. "-level value adjust the level of image contrast",
  206. "-level-colors color,color",
  207. " level image with the given colors",
  208. "-linear-stretch geometry",
  209. " improve contrast by `stretching with saturation'",
  210. "-liquid-rescale geometry",
  211. " rescale image with seam-carving",
  212. "-median radius apply a median filter to the image",
  213. "-modulate value vary the brightness, saturation, and hue",
  214. "-monochrome transform image to black and white",
  215. "-morphology method kernel",
  216. " apply a morphology method to the image",
  217. "-motion-blur geometry",
  218. " simulate motion blur",
  219. "-negate replace every pixel with its complementary color ",
  220. "-noise radius add or reduce noise in an image",
  221. "-normalize transform image to span the full range of colors",
  222. "-opaque color change this color to the fill color",
  223. "-ordered-dither NxN",
  224. " add a noise pattern to the image with specific",
  225. " amplitudes",
  226. "-paint radius simulate an oil painting",
  227. "-polaroid angle simulate a Polaroid picture",
  228. "-posterize levels reduce the image to a limited number of color levels",
  229. "-profile filename add, delete, or apply an image profile",
  230. "-quantize colorspace reduce colors in this colorspace",
  231. "-radial-blur angle radial blur the image",
  232. "-raise value lighten/darken image edges to create a 3-D effect",
  233. "-random-threshold low,high",
  234. " random threshold the image",
  235. "-region geometry apply options to a portion of the image",
  236. "-render render vector graphics",
  237. "-repage geometry size and location of an image canvas",
  238. "-resample geometry change the resolution of an image",
  239. "-resize geometry resize the image",
  240. "-roll geometry roll an image vertically or horizontally",
  241. "-rotate degrees apply Paeth rotation to the image",
  242. "-sample geometry scale image with pixel sampling",
  243. "-scale geometry scale the image",
  244. "-segment values segment an image",
  245. "-selective-blur geometry",
  246. " selectively blur pixels within a contrast threshold",
  247. "-sepia-tone threshold",
  248. " simulate a sepia-toned photo",
  249. "-set property value set an image property",
  250. "-shade degrees shade the image using a distant light source",
  251. "-shadow geometry simulate an image shadow",
  252. "-sharpen geometry sharpen the image",
  253. "-shave geometry shave pixels from the image edges",
  254. "-shear geometry slide one edge of the image along the X or Y axis",
  255. "-sigmoidal-contrast geometry",
  256. " increase the contrast without saturating highlights or shadows",
  257. "-sketch geometry simulate a pencil sketch",
  258. "-solarize threshold negate all pixels above the threshold level",
  259. "-sparse-color method args",
  260. " fill in a image based on a few color points",
  261. "-splice geometry splice the background color into the image",
  262. "-spread radius displace image pixels by a random amount",
  263. "-strip strip image of all profiles and comments",
  264. "-swirl degrees swirl image pixels about the center",
  265. "-threshold value threshold the image",
  266. "-thumbnail geometry create a thumbnail of the image",
  267. "-tile filename tile image when filling a graphic primitive",
  268. "-tint value tint the image with the fill color",
  269. "-transform affine transform image",
  270. "-transparent color make this color transparent within the image",
  271. "-transpose flip image vertically and rotate 90 degrees",
  272. "-transverse flop image horizontally and rotate 270 degrees",
  273. "-trim trim image edges",
  274. "-type type image type",
  275. "-unique-colors discard all but one of any pixel color",
  276. "-unsharp geometry sharpen the image",
  277. "-vignette geometry soften the edges of the image in vignette style",
  278. "-wave geometry alter an image along a sine wave",
  279. "-white-threshold value",
  280. " force all pixels above the threshold into white",
  281. (char *) NULL
  282. },
  283. *sequence_operators[]=
  284. {
  285. "-append append an image sequence",
  286. "-clut apply a color lookup table to the image",
  287. "-coalesce merge a sequence of images",
  288. "-combine combine a sequence of images",
  289. "-composite composite image",
  290. "-crop geometry cut out a rectangular region of the image",
  291. "-deconstruct break down an image sequence into constituent parts",
  292. "-evaluate-sequence operator",
  293. " evaluate an arithmetic, relational, or logical expression",
  294. "-flatten flatten a sequence of images",
  295. "-fx expression apply mathematical expression to an image channel(s)",
  296. "-hald-clut apply a Hald color lookup table to the image",
  297. "-morph value morph an image sequence",
  298. "-mosaic create a mosaic from an image sequence",
  299. "-print string interpret string and print to console",
  300. "-process arguments process the image with a custom image filter",
  301. "-reverse reverse image sequence",
  302. "-separate separate an image channel into a grayscale image",
  303. "-write filename write images to this file",
  304. (char *) NULL
  305. },
  306. *settings[]=
  307. {
  308. "-adjoin join images into a single multi-image file",
  309. "-affine matrix affine transform matrix",
  310. "-alpha option activate, deactivate, reset, or set the alpha channel",
  311. "-antialias remove pixel-aliasing",
  312. "-authenticate password",
  313. " decipher image with this password",
  314. "-attenuate value lessen (or intensify) when adding noise to an image",
  315. "-background color background color",
  316. "-bias value add bias when convolving an image",
  317. "-black-point-compensation",
  318. " use black point compensation",
  319. "-blue-primary point chromaticity blue primary point",
  320. "-bordercolor color border color",
  321. "-caption string assign a caption to an image",
  322. "-channel type apply option to select image channels",
  323. "-colors value preferred number of colors in the image",
  324. "-colorspace type alternate image colorspace",
  325. "-comment string annotate image with comment",
  326. "-compose operator set image composite operator",
  327. "-compress type type of pixel compression when writing the image",
  328. "-define format:option",
  329. " define one or more image format options",
  330. "-delay value display the next image after pausing",
  331. "-density geometry horizontal and vertical density of the image",
  332. "-depth value image depth",
  333. "-direction type render text right-to-left or left-to-right",
  334. "-display server get image or font from this X server",
  335. "-dispose method layer disposal method",
  336. "-dither method apply error diffusion to image",
  337. "-encoding type text encoding type",
  338. "-endian type endianness (MSB or LSB) of the image",
  339. "-family name render text with this font family",
  340. "-fill color color to use when filling a graphic primitive",
  341. "-filter type use this filter when resizing an image",
  342. "-font name render text with this font",
  343. "-format \"string\" output formatted image characteristics",
  344. "-fuzz distance colors within this distance are considered equal",
  345. "-gravity type horizontal and vertical text placement",
  346. "-green-primary point chromaticity green primary point",
  347. "-intent type type of rendering intent when managing the image color",
  348. "-interlace type type of image interlacing scheme",
  349. "-interline-spacing value",
  350. " set the space between two text lines",
  351. "-interpolate method pixel color interpolation method",
  352. "-interword-spacing value",
  353. " set the space between two words",
  354. "-kerning value set the space between two letters",
  355. "-label string assign a label to an image",
  356. "-limit type value pixel cache resource limit",
  357. "-loop iterations add Netscape loop extension to your GIF animation",
  358. "-mask filename associate a mask with the image",
  359. "-mattecolor color frame color",
  360. "-monitor monitor progress",
  361. "-orient type image orientation",
  362. "-page geometry size and location of an image canvas (setting)",
  363. "-ping efficiently determine image attributes",
  364. "-pointsize value font point size",
  365. "-precision value maximum number of significant digits to print",
  366. "-preview type image preview type",
  367. "-quality value JPEG/MIFF/PNG compression level",
  368. "-quiet suppress all warning messages",
  369. "-red-primary point chromaticity red primary point",
  370. "-regard-warnings pay attention to warning messages",
  371. "-remap filename transform image colors to match this set of colors",
  372. "-respect-parentheses settings remain in effect until parenthesis boundary",
  373. "-sampling-factor geometry",
  374. " horizontal and vertical sampling factor",
  375. "-scene value image scene number",
  376. "-seed value seed a new sequence of pseudo-random numbers",
  377. "-size geometry width and height of image",
  378. "-stretch type render text with this font stretch",
  379. "-stroke color graphic primitive stroke color",
  380. "-strokewidth value graphic primitive stroke width",
  381. "-style type render text with this font style",
  382. "-taint image as ineligible for bi-modal delegate",
  383. "-texture filename name of texture to tile onto the image background",
  384. "-tile-offset geometry",
  385. " tile offset",
  386. "-treedepth value color tree depth",
  387. "-transparent-color color",
  388. " transparent color",
  389. "-undercolor color annotation bounding box color",
  390. "-units type the units of image resolution",
  391. "-verbose print detailed information about the image",
  392. "-view FlashPix viewing transforms",
  393. "-virtual-pixel method",
  394. " virtual pixel access method",
  395. "-weight type render text with this font weight",
  396. "-white-point point chromaticity white point",
  397. (char *) NULL
  398. },
  399. *stack_operators[]=
  400. {
  401. "-clone index clone an image",
  402. "-delete index delete the image from the image sequence",
  403. "-insert index insert last image into the image sequence",
  404. "-swap indexes swap two images in the image sequence",
  405. (char *) NULL
  406. };
  407. const char
  408. **p;
  409. (void) printf("Version: %s\n",GetMagickVersion((size_t *) NULL));
  410. (void) printf("Copyright: %s\n",GetMagickCopyright());
  411. (void) printf("Features: %s\n\n",GetMagickFeatures());
  412. (void) printf("Usage: %s [options ...] file [ [options ...] "
  413. "file ...] [options ...] file\n",GetClientName());
  414. (void) printf("\nImage Settings:\n");
  415. for (p=settings; *p != (char *) NULL; p++)
  416. (void) printf(" %s\n",*p);
  417. (void) printf("\nImage Operators:\n");
  418. for (p=operators; *p != (char *) NULL; p++)
  419. (void) printf(" %s\n",*p);
  420. (void) printf("\nImage Sequence Operators:\n");
  421. for (p=sequence_operators; *p != (char *) NULL; p++)
  422. (void) printf(" %s\n",*p);
  423. (void) printf("\nImage Stack Operators:\n");
  424. for (p=stack_operators; *p != (char *) NULL; p++)
  425. (void) printf(" %s\n",*p);
  426. (void) printf("\nMiscellaneous Options:\n");
  427. for (p=miscellaneous; *p != (char *) NULL; p++)
  428. (void) printf(" %s\n",*p);
  429. (void) printf(
  430. "\nBy default, the image format of `file' is determined by its magic\n");
  431. (void) printf(
  432. "number. To specify a particular image format, precede the filename\n");
  433. (void) printf(
  434. "with an image format name and a colon (i.e. ps:image) or specify the\n");
  435. (void) printf(
  436. "image type as the filename suffix (i.e. image.ps). Specify 'file' as\n");
  437. (void) printf("'-' for standard input or output.\n");
  438. return(MagickFalse);
  439. }
  440. WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
  441. int argc,char **argv,char **metadata,ExceptionInfo *exception)
  442. {
  443. #define NotInitialized (unsigned int) (~0)
  444. #define DestroyConvert() \
  445. { \
  446. DestroyImageStack(); \
  447. for (i=0; i < (ssize_t) argc; i++) \
  448. argv[i]=DestroyString(argv[i]); \
  449. argv=(char **) RelinquishMagickMemory(argv); \
  450. }
  451. #define ThrowConvertException(asperity,tag,option) \
  452. { \
  453. (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
  454. option); \
  455. DestroyConvert(); \
  456. return(MagickFalse); \
  457. }
  458. #define ThrowConvertInvalidArgumentException(option,argument) \
  459. { \
  460. (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
  461. "InvalidArgument","`%s': %s",option,argument); \
  462. DestroyConvert(); \
  463. return(MagickFalse); \
  464. }
  465. char
  466. *filename,
  467. *option;
  468. const char
  469. *format;
  470. Image
  471. *image;
  472. ImageStack
  473. image_stack[MaxImageStackDepth+1];
  474. ssize_t
  475. j,
  476. k;
  477. MagickBooleanType
  478. fire,
  479. pend;
  480. MagickStatusType
  481. status;
  482. register ssize_t
  483. i;
  484. /*
  485. Set defaults.
  486. */
  487. assert(image_info != (ImageInfo *) NULL);
  488. assert(image_info->signature == MagickSignature);
  489. if (image_info->debug != MagickFalse)
  490. (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
  491. assert(exception != (ExceptionInfo *) NULL);
  492. if (argc == 2)
  493. {
  494. option=argv[1];
  495. if ((LocaleCompare("version",option+1) == 0) ||
  496. (LocaleCompare("-version",option+1) == 0))
  497. {
  498. (void) fprintf(stdout,"Version: %s\n",
  499. GetMagickVersion((size_t *) NULL));
  500. (void) fprintf(stdout,"Copyright: %s\n",GetMagickCopyright());
  501. (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures());
  502. return(MagickFalse);
  503. }
  504. }
  505. if (argc < 3)
  506. return(ConvertUsage());
  507. filename=(char *) NULL;
  508. format="%w,%h,%m";
  509. j=1;
  510. k=0;
  511. NewImageStack();
  512. option=(char *) NULL;
  513. pend=MagickFalse;
  514. status=MagickTrue;
  515. /*
  516. Parse command-line arguments.
  517. */
  518. ReadCommandlLine(argc,&argv);
  519. status=ExpandFilenames(&argc,&argv);
  520. if (status == MagickFalse)
  521. ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
  522. GetExceptionMessage(errno));
  523. if ((argc > 2) && (LocaleCompare("-concatenate",argv[1]) == 0))
  524. return(ConcatenateImages(argc,argv,exception));
  525. for (i=1; i < (ssize_t) (argc-1); i++)
  526. {
  527. option=argv[i];
  528. if (LocaleCompare(option,"(") == 0)
  529. {
  530. FireImageStack(MagickTrue,MagickTrue,pend);
  531. if (k == MaxImageStackDepth)
  532. ThrowConvertException(OptionError,"ParenthesisNestedTooDeeply",
  533. option);
  534. PushImageStack();
  535. continue;
  536. }
  537. if (LocaleCompare(option,")") == 0)
  538. {
  539. FireImageStack(MagickTrue,MagickTrue,MagickTrue);
  540. if (k == 0)
  541. ThrowConvertException(OptionError,"UnableToParseExpression",option);
  542. PopImageStack();
  543. continue;
  544. }
  545. if (IsMagickOption(option) == MagickFalse)
  546. {
  547. Image
  548. *images;
  549. /*
  550. Read input image.
  551. */
  552. FireImageStack(MagickTrue,MagickTrue,pend);
  553. filename=argv[i];
  554. if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
  555. filename=argv[++i];
  556. (void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
  557. if (image_info->ping != MagickFalse)
  558. images=PingImages(image_info,exception);
  559. else
  560. images=ReadImages(image_info,exception);
  561. status&=(images != (Image *) NULL) &&
  562. (exception->severity < ErrorException);
  563. if (images == (Image *) NULL)
  564. continue;
  565. AppendImageStack(images);
  566. continue;
  567. }
  568. pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
  569. switch (*(option+1))
  570. {
  571. case 'a':
  572. {
  573. if (LocaleCompare("adaptive-blur",option+1) == 0)
  574. {
  575. i++;
  576. if (i == (ssize_t) (argc-1))
  577. ThrowConvertException(OptionError,"MissingArgument",option);
  578. if (IsGeometry(argv[i]) == MagickFalse)
  579. ThrowConvertInvalidArgumentException(option,argv[i]);
  580. break;
  581. }
  582. if (LocaleCompare("adaptive-resize",option+1) == 0)
  583. {
  584. i++;
  585. if (i == (ssize_t) (argc-1))
  586. ThrowConvertException(OptionError,"MissingArgument",option);
  587. if (IsGeometry(argv[i]) == MagickFalse)
  588. ThrowConvertInvalidArgumentException(option,argv[i]);
  589. break;
  590. }
  591. if (LocaleCompare("adaptive-sharpen",option+1) == 0)
  592. {
  593. i++;
  594. if (i == (ssize_t) (argc-1))
  595. ThrowConvertException(OptionError,"MissingArgument",option);
  596. if (IsGeometry(argv[i]) == MagickFalse)
  597. ThrowConvertInvalidArgumentException(option,argv[i]);
  598. break;
  599. }
  600. if (LocaleCompare("adjoin",option+1) == 0)
  601. break;
  602. if (LocaleCompare("affine",option+1) == 0)
  603. {
  604. if (*option == '+')
  605. break;
  606. i++;
  607. if (i == (ssize_t) (argc-1))
  608. ThrowConvertException(OptionError,"MissingArgument",option);
  609. if (IsGeometry(argv[i]) == MagickFalse)
  610. ThrowConvertInvalidArgumentException(option,argv[i]);
  611. break;
  612. }
  613. if (LocaleCompare("alpha",option+1) == 0)
  614. {
  615. ssize_t
  616. type;
  617. if (*option == '+')
  618. break;
  619. i++;
  620. if (i == (ssize_t) argc)
  621. ThrowConvertException(OptionError,"MissingArgument",option);
  622. type=ParseMagickOption(MagickAlphaOptions,MagickFalse,argv[i]);
  623. if (type < 0)
  624. ThrowConvertException(OptionError,"UnrecognizedAlphaChannelType",
  625. argv[i]);
  626. break;
  627. }
  628. if (LocaleCompare("annotate",option+1) == 0)
  629. {
  630. if (*option == '+')
  631. break;
  632. i++;
  633. if (i == (ssize_t) (argc-1))
  634. ThrowConvertException(OptionError,"MissingArgument",option);
  635. if (IsGeometry(argv[i]) == MagickFalse)
  636. ThrowConvertInvalidArgumentException(option,argv[i]);
  637. i++;
  638. if (i == (ssize_t) (argc-1))
  639. ThrowConvertException(OptionError,"MissingArgument",option);
  640. break;
  641. }
  642. if (LocaleCompare("antialias",option+1) == 0)
  643. break;
  644. if (LocaleCompare("append",option+1) == 0)
  645. break;
  646. if (LocaleCompare("attenuate",option+1) == 0)
  647. {
  648. if (*option == '+')
  649. break;
  650. i++;
  651. if (i == (ssize_t) (argc-1))
  652. ThrowConvertException(OptionError,"MissingArgument",option);
  653. if (IsGeometry(argv[i]) == MagickFalse)
  654. ThrowConvertInvalidArgumentException(option,argv[i]);
  655. break;
  656. }
  657. if (LocaleCompare("authenticate",option+1) == 0)
  658. {
  659. if (*option == '+')
  660. break;
  661. i++;
  662. if (i == (ssize_t) (argc-1))
  663. ThrowConvertException(OptionError,"MissingArgument",option);
  664. break;
  665. }
  666. if (LocaleCompare("auto-gamma",option+1) == 0)
  667. break;
  668. if (LocaleCompare("auto-level",option+1) == 0)
  669. break;
  670. if (LocaleCompare("auto-orient",option+1) == 0)
  671. break;
  672. if (LocaleCompare("average",option+1) == 0)
  673. break;
  674. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  675. }
  676. case 'b':
  677. {
  678. if (LocaleCompare("background",option+1) == 0)
  679. {
  680. if (*option == '+')
  681. break;
  682. i++;
  683. if (i == (ssize_t) (argc-1))
  684. ThrowConvertException(OptionError,"MissingArgument",option);
  685. break;
  686. }
  687. if (LocaleCompare("bench",option+1) == 0)
  688. {
  689. if (*option == '+')
  690. break;
  691. i++;
  692. if (i == (ssize_t) (argc-1))
  693. ThrowConvertException(OptionError,"MissingArgument",option);
  694. if (IsGeometry(argv[i]) == MagickFalse)
  695. ThrowConvertInvalidArgumentException(option,argv[i]);
  696. break;
  697. }
  698. if (LocaleCompare("bias",option+1) == 0)
  699. {
  700. if (*option == '+')
  701. break;
  702. i++;
  703. if (i == (ssize_t) (argc-1))
  704. ThrowConvertException(OptionError,"MissingArgument",option);
  705. if (IsGeometry(argv[i]) == MagickFalse)
  706. ThrowConvertInvalidArgumentException(option,argv[i]);
  707. break;
  708. }
  709. if (LocaleCompare("black-point-compensation",option+1) == 0)
  710. break;
  711. if (LocaleCompare("black-threshold",option+1) == 0)
  712. {
  713. if (*option == '+')
  714. break;
  715. i++;
  716. if (i == (ssize_t) (argc-1))
  717. ThrowConvertException(OptionError,"MissingArgument",option);
  718. if (IsGeometry(argv[i]) == MagickFalse)
  719. ThrowConvertInvalidArgumentException(option,argv[i]);
  720. break;
  721. }
  722. if (LocaleCompare("blue-primary",option+1) == 0)
  723. {
  724. if (*option == '+')
  725. break;
  726. i++;
  727. if (i == (ssize_t) (argc-1))
  728. ThrowConvertException(OptionError,"MissingArgument",option);
  729. if (IsGeometry(argv[i]) == MagickFalse)
  730. ThrowConvertInvalidArgumentException(option,argv[i]);
  731. break;
  732. }
  733. if (LocaleCompare("blue-shift",option+1) == 0)
  734. {
  735. if (*option == '+')
  736. break;
  737. i++;
  738. if (i == (ssize_t) (argc-1))
  739. ThrowConvertException(OptionError,"MissingArgument",option);
  740. if (IsGeometry(argv[i]) == MagickFalse)
  741. ThrowConvertInvalidArgumentException(option,argv[i]);
  742. break;
  743. }
  744. if (LocaleCompare("blur",option+1) == 0)
  745. {
  746. if (*option == '+')
  747. break;
  748. i++;
  749. if (i == (ssize_t) (argc-1))
  750. ThrowConvertException(OptionError,"MissingArgument",option);
  751. if (IsGeometry(argv[i]) == MagickFalse)
  752. ThrowConvertInvalidArgumentException(option,argv[i]);
  753. break;
  754. }
  755. if (LocaleCompare("border",option+1) == 0)
  756. {
  757. if (*option == '+')
  758. break;
  759. i++;
  760. if (i == (ssize_t) (argc-1))
  761. ThrowConvertException(OptionError,"MissingArgument",option);
  762. if (IsGeometry(argv[i]) == MagickFalse)
  763. ThrowConvertInvalidArgumentException(option,argv[i]);
  764. break;
  765. }
  766. if (LocaleCompare("bordercolor",option+1) == 0)
  767. {
  768. if (*option == '+')
  769. break;
  770. i++;
  771. if (i == (ssize_t) (argc-1))
  772. ThrowConvertException(OptionError,"MissingArgument",option);
  773. break;
  774. }
  775. if (LocaleCompare("box",option+1) == 0)
  776. {
  777. if (*option == '+')
  778. break;
  779. i++;
  780. if (i == (ssize_t) (argc-1))
  781. ThrowConvertException(OptionError,"MissingArgument",option);
  782. break;
  783. }
  784. if (LocaleCompare("brightness-contrast",option+1) == 0)
  785. {
  786. i++;
  787. if (i == (ssize_t) (argc-1))
  788. ThrowConvertException(OptionError,"MissingArgument",option);
  789. if (IsGeometry(argv[i]) == MagickFalse)
  790. ThrowConvertInvalidArgumentException(option,argv[i]);
  791. break;
  792. }
  793. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  794. }
  795. case 'c':
  796. {
  797. if (LocaleCompare("cache",option+1) == 0)
  798. {
  799. if (*option == '+')
  800. break;
  801. i++;
  802. if (i == (ssize_t) (argc-1))
  803. ThrowConvertException(OptionError,"MissingArgument",option);
  804. if (IsGeometry(argv[i]) == MagickFalse)
  805. ThrowConvertInvalidArgumentException(option,argv[i]);
  806. break;
  807. }
  808. if (LocaleCompare("caption",option+1) == 0)
  809. {
  810. if (*option == '+')
  811. break;
  812. i++;
  813. if (i == (ssize_t) argc)
  814. ThrowConvertException(OptionError,"MissingArgument",option);
  815. break;
  816. }
  817. if (LocaleCompare("cdl",option+1) == 0)
  818. {
  819. if (*option == '+')
  820. break;
  821. i++;
  822. if (i == (ssize_t) (argc-1))
  823. ThrowConvertException(OptionError,"MissingArgument",option);
  824. break;
  825. }
  826. if (LocaleCompare("channel",option+1) == 0)
  827. {
  828. ssize_t
  829. channel;
  830. if (*option == '+')
  831. break;
  832. i++;
  833. if (i == (ssize_t) (argc-1))
  834. ThrowConvertException(OptionError,"MissingArgument",option);
  835. channel=ParseChannelOption(argv[i]);
  836. if (channel < 0)
  837. ThrowConvertException(OptionError,"UnrecognizedChannelType",
  838. argv[i]);
  839. break;
  840. }
  841. if (LocaleCompare("charcoal",option+1) == 0)
  842. {
  843. if (*option == '+')
  844. break;
  845. i++;
  846. if (i == (ssize_t) (argc-1))
  847. ThrowConvertException(OptionError,"MissingArgument",option);
  848. if (IsGeometry(argv[i]) == MagickFalse)
  849. ThrowConvertInvalidArgumentException(option,argv[i]);
  850. break;
  851. }
  852. if (LocaleCompare("chop",option+1) == 0)
  853. {
  854. if (*option == '+')
  855. break;
  856. i++;
  857. if (i == (ssize_t) (argc-1))
  858. ThrowConvertException(OptionError,"MissingArgument",option);
  859. if (IsGeometry(argv[i]) == MagickFalse)
  860. ThrowConvertInvalidArgumentException(option,argv[i]);
  861. break;
  862. }
  863. if (LocaleCompare("clamp",option+1) == 0)
  864. break;
  865. if (LocaleCompare("clip",option+1) == 0)
  866. break;
  867. if (LocaleCompare("clip-mask",option+1) == 0)
  868. {
  869. if (*option == '+')
  870. break;
  871. i++;
  872. if (i == (ssize_t) (argc-1))
  873. ThrowConvertException(OptionError,"MissingArgument",option);
  874. break;
  875. }
  876. if (LocaleCompare("clip-path",option+1) == 0)
  877. {
  878. i++;
  879. if (i == (ssize_t) (argc-1))
  880. ThrowConvertException(OptionError,"MissingArgument",option);
  881. break;
  882. }
  883. if (LocaleCompare("clone",option+1) == 0)
  884. {
  885. Image
  886. *clone_images;
  887. clone_images=image;
  888. if (k != 0)
  889. clone_images=image_stack[k-1].image;
  890. if (clone_images == (Image *) NULL)
  891. ThrowConvertException(ImageError,"ImageSequenceRequired",option);
  892. FireImageStack(MagickTrue,MagickTrue,MagickTrue);
  893. if (*option == '+')
  894. clone_images=CloneImages(clone_images,"-1",exception);
  895. else
  896. {
  897. i++;
  898. if (i == (ssize_t) (argc-1))
  899. ThrowConvertException(OptionError,"MissingArgument",option);
  900. if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
  901. ThrowConvertInvalidArgumentException(option,argv[i]);
  902. clone_images=CloneImages(clone_images,argv[i],exception);
  903. }
  904. if (clone_images == (Image *) NULL)
  905. ThrowConvertException(OptionError,"NoSuchImage",option);
  906. AppendImageStack(clone_images);
  907. break;
  908. }
  909. if (LocaleCompare("clut",option+1) == 0)
  910. break;
  911. if (LocaleCompare("coalesce",option+1) == 0)
  912. break;
  913. if (LocaleCompare("colorize",option+1) == 0)
  914. {
  915. if (*option == '+')
  916. break;
  917. i++;
  918. if (i == (ssize_t) (argc-1))
  919. ThrowConvertException(OptionError,"MissingArgument",option);
  920. if (IsGeometry(argv[i]) == MagickFalse)
  921. ThrowConvertInvalidArgumentException(option,argv[i]);
  922. break;
  923. }
  924. if (LocaleCompare("color-matrix",option+1) == 0)
  925. {
  926. if (*option == '+')
  927. break;
  928. i++;
  929. if (i == (ssize_t) (argc-1))
  930. ThrowConvertException(OptionError,"MissingArgument",option);
  931. if (IsGeometry(argv[i]) == MagickFalse)
  932. ThrowConvertInvalidArgumentException(option,argv[i]);
  933. break;
  934. }
  935. if (LocaleCompare("colors",option+1) == 0)
  936. {
  937. if (*option == '+')
  938. break;
  939. i++;
  940. if ((i == (ssize_t) (argc-1)) ||
  941. (IsGeometry(argv[i]) == MagickFalse))
  942. ThrowConvertException(OptionError,"MissingArgument",option);
  943. break;
  944. }
  945. if (LocaleCompare("colorspace",option+1) == 0)
  946. {
  947. ssize_t
  948. colorspace;
  949. if (*option == '+')
  950. break;
  951. i++;
  952. if (i == (ssize_t) (argc-1))
  953. ThrowConvertException(OptionError,"MissingArgument",option);
  954. colorspace=ParseMagickOption(MagickColorspaceOptions,
  955. MagickFalse,argv[i]);
  956. if (colorspace < 0)
  957. ThrowConvertException(OptionError,"UnrecognizedColorspace",
  958. argv[i]);
  959. break;
  960. }
  961. if (LocaleCompare("combine",option+1) == 0)
  962. break;
  963. if (LocaleCompare("comment",option+1) == 0)
  964. {
  965. if (*option == '+')
  966. break;
  967. i++;
  968. if (i == (ssize_t) argc)
  969. ThrowConvertException(OptionError,"MissingArgument",option);
  970. break;
  971. }
  972. if (LocaleCompare("compose",option+1) == 0)
  973. {
  974. ssize_t
  975. compose;
  976. if (*option == '+')
  977. break;
  978. i++;
  979. if (i == (ssize_t) argc)
  980. ThrowConvertException(OptionError,"MissingArgument",option);
  981. compose=ParseMagickOption(MagickComposeOptions,MagickFalse,
  982. argv[i]);
  983. if (compose < 0)
  984. ThrowConvertException(OptionError,"UnrecognizedComposeOperator",
  985. argv[i]);
  986. break;
  987. }
  988. if (LocaleCompare("composite",option+1) == 0)
  989. break;
  990. if (LocaleCompare("compress",option+1) == 0)
  991. {
  992. ssize_t
  993. compress;
  994. if (*option == '+')
  995. break;
  996. i++;
  997. if (i == (ssize_t) (argc-1))
  998. ThrowConvertException(OptionError,"MissingArgument",option);
  999. compress=ParseMagickOption(MagickCompressOptions,MagickFalse,
  1000. argv[i]);
  1001. if (compress < 0)
  1002. ThrowConvertException(OptionError,"UnrecognizedImageCompression",
  1003. argv[i]);
  1004. break;
  1005. }
  1006. if (LocaleCompare("concurrent",option+1) == 0)
  1007. break;
  1008. if (LocaleCompare("contrast",option+1) == 0)
  1009. break;
  1010. if (LocaleCompare("contrast-stretch",option+1) == 0)
  1011. {
  1012. i++;
  1013. if (i == (ssize_t) (argc-1))
  1014. ThrowConvertException(OptionError,"MissingArgument",option);
  1015. if (IsGeometry(argv[i]) == MagickFalse)
  1016. ThrowConvertInvalidArgumentException(option,argv[i]);
  1017. break;
  1018. }
  1019. if (LocaleCompare("convolve",option+1) == 0)
  1020. {
  1021. char
  1022. token[MaxTextExtent];
  1023. if (*option == '+')
  1024. break;
  1025. i++;
  1026. if (i == (ssize_t) (argc-1))
  1027. ThrowConvertException(OptionError,"MissingArgument",option);
  1028. #if 1
  1029. (void) token;
  1030. if (IsGeometry(argv[i]) == MagickFalse)
  1031. ThrowConvertInvalidArgumentException(option,argv[i]);
  1032. #else
  1033. /* Allow the use of built-in kernels like 'gaussian'
  1034. * These may not work for kernels with 'nan' values, like 'diamond'
  1035. */
  1036. GetMagickToken(argv[i],NULL,token);
  1037. if (isalpha((int) (unsigned char) *token) != 0)
  1038. {
  1039. ssize_t
  1040. op;
  1041. op=ParseMagickOption(MagickKernelOptions,MagickFalse,token);
  1042. if (op < 0)
  1043. ThrowConvertException(OptionError,"UnrecognizedKernelType",
  1044. token);
  1045. }
  1046. else
  1047. if (IsGeometry(argv[i]) == MagickFalse)
  1048. ThrowConvertInvalidArgumentException(option,argv[i]);
  1049. #endif
  1050. break;
  1051. }
  1052. if (LocaleCompare("crop",option+1) == 0)
  1053. {
  1054. if (*option == '+')
  1055. break;
  1056. i++;
  1057. if (i == (ssize_t) (argc-1))
  1058. ThrowConvertException(OptionError,"MissingArgument",option);
  1059. if (IsGeometry(argv[i]) == MagickFalse)
  1060. ThrowConvertInvalidArgumentException(option,argv[i]);
  1061. break;
  1062. }
  1063. if (LocaleCompare("cycle",option+1) == 0)
  1064. {
  1065. if (*option == '+')
  1066. break;
  1067. i++;
  1068. if (i == (ssize_t) (argc-1))
  1069. ThrowConvertException(OptionError,"MissingArgument",option);
  1070. if (IsGeometry(argv[i]) == MagickFalse)
  1071. ThrowConvertInvalidArgumentException(option,argv[i]);
  1072. break;
  1073. }
  1074. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  1075. }
  1076. case 'd':
  1077. {
  1078. if (LocaleCompare("decipher",option+1) == 0)
  1079. {
  1080. if (*option == '+')
  1081. break;
  1082. i++;
  1083. if (i == (ssize_t) (argc-1))
  1084. ThrowConvertException(OptionError,"MissingArgument",option);
  1085. break;
  1086. }
  1087. if (LocaleCompare("deconstruct",option+1) == 0)
  1088. break;
  1089. if (LocaleCompare("debug",option+1) == 0)
  1090. {
  1091. ssize_t
  1092. event;
  1093. if (*option == '+')
  1094. break;
  1095. i++;
  1096. if (i == (ssize_t) argc)
  1097. ThrowConvertException(OptionError,"MissingArgument",option);
  1098. event=ParseMagickOption(MagickLogEventOptions,MagickFalse,argv[i]);
  1099. if (event < 0)
  1100. ThrowConvertException(OptionError,"UnrecognizedEventType",
  1101. argv[i]);
  1102. (void) SetLogEventMask(argv[i]);
  1103. break;
  1104. }
  1105. if (LocaleCompare("define",option+1) == 0)
  1106. {
  1107. i++;
  1108. if (i == (ssize_t) argc)
  1109. ThrowConvertException(OptionError,"MissingArgument",option);
  1110. if (*option == '+')
  1111. {
  1112. const char
  1113. *define;
  1114. define=GetImageOption(image_info,argv[i]);
  1115. if (define == (const char *) NULL)
  1116. ThrowConvertException(OptionError,"NoSuchOption",argv[i]);
  1117. break;
  1118. }
  1119. break;
  1120. }
  1121. if (LocaleCompare("delay",option+1) == 0)
  1122. {
  1123. if (*option == '+')
  1124. break;
  1125. i++;
  1126. if (i == (ssize_t) argc)
  1127. ThrowConvertException(OptionError,"MissingArgument",option);
  1128. if (IsGeometry(argv[i]) == MagickFalse)
  1129. ThrowConvertInvalidArgumentException(option,argv[i]);
  1130. break;
  1131. }
  1132. if (LocaleCompare("density",option+1) == 0)
  1133. {
  1134. if (*option == '+')
  1135. break;
  1136. i++;
  1137. if (i == (ssize_t) (argc-1))
  1138. ThrowConvertException(OptionError,"MissingArgument",option);
  1139. if (IsGeometry(argv[i]) == MagickFalse)
  1140. ThrowConvertInvalidArgumentException(option,argv[i]);
  1141. break;
  1142. }
  1143. if (LocaleCompare("depth",option+1) == 0)
  1144. {
  1145. if (*option == '+')
  1146. break;
  1147. i++;
  1148. if (i == (ssize_t) (argc-1))
  1149. ThrowConvertException(OptionError,"MissingArgument",option);
  1150. if (IsGeometry(argv[i]) == MagickFalse)
  1151. ThrowConvertInvalidArgumentException(option,argv[i]);
  1152. break;
  1153. }
  1154. if (LocaleCompare("delete",option+1) == 0)
  1155. {
  1156. if (*option == '+')
  1157. break;
  1158. i++;
  1159. if (i == (ssize_t) (argc-1))
  1160. ThrowConvertException(OptionError,"MissingArgument",option);
  1161. if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
  1162. ThrowConvertInvalidArgumentException(option,argv[i]);
  1163. break;
  1164. }
  1165. if (LocaleCompare("deskew",option+1) == 0)
  1166. {
  1167. if (*option == '+')
  1168. break;
  1169. i++;
  1170. if (i == (ssize_t) (argc-1))
  1171. ThrowConvertException(OptionError,"MissingArgument",option);
  1172. if (IsGeometry(argv[i]) == MagickFalse)
  1173. ThrowConvertInvalidArgumentException(option,argv[i]);
  1174. break;
  1175. }
  1176. if (LocaleCompare("despeckle",option+1) == 0)
  1177. break;
  1178. if (LocaleCompare("direction",option+1) == 0)
  1179. {
  1180. ssize_t
  1181. direction;
  1182. if (*option == '+')
  1183. break;
  1184. i++;
  1185. if (i == (ssize_t) argc)
  1186. ThrowConvertException(OptionError,"MissingArgument",option);
  1187. direction=ParseMagickOption(MagickDirectionOptions,MagickFalse,
  1188. argv[i]);
  1189. if (direction < 0)
  1190. ThrowConvertException(OptionError,"UnrecognizedDirectionType",
  1191. argv[i]);
  1192. break;
  1193. }
  1194. if (LocaleCompare("display",option+1) == 0)
  1195. {
  1196. if (*option == '+')
  1197. break;
  1198. i++;
  1199. if (i == (ssize_t) (argc-1))
  1200. ThrowConvertException(OptionError,"MissingArgument",option);
  1201. break;
  1202. }
  1203. if (LocaleCompare("dispose",option+1) == 0)
  1204. {
  1205. ssize_t
  1206. dispose;
  1207. if (*option == '+')
  1208. break;
  1209. i++;
  1210. if (i == (ssize_t) argc)
  1211. ThrowConvertException(OptionError,"MissingArgument",option);
  1212. dispose=ParseMagickOption(MagickDisposeOptions,MagickFalse,argv[i]);
  1213. if (dispose < 0)
  1214. ThrowConvertException(OptionError,"UnrecognizedDisposeMethod",
  1215. argv[i]);
  1216. break;
  1217. }
  1218. if (LocaleCompare("distort",option+1) == 0)
  1219. {
  1220. ssize_t
  1221. op;
  1222. i++;
  1223. if (i == (ssize_t) argc)
  1224. ThrowConvertException(OptionError,"MissingArgument",option);
  1225. op=ParseMagickOption(MagickDistortOptions,MagickFalse,argv[i]);
  1226. if (op < 0)
  1227. ThrowConvertException(OptionError,"UnrecognizedDistortMethod",
  1228. argv[i]);
  1229. i++;
  1230. if (i == (ssize_t) (argc-1))
  1231. ThrowConvertException(OptionError,"MissingArgument",option);
  1232. break;
  1233. }
  1234. if (LocaleCompare("dither",option+1) == 0)
  1235. {
  1236. ssize_t
  1237. method;
  1238. if (*option == '+')
  1239. break;
  1240. i++;
  1241. if (i == (ssize_t) argc)
  1242. ThrowConvertException(OptionError,"MissingArgument",option);
  1243. method=ParseMagickOption(MagickDitherOptions,MagickFalse,argv[i]);
  1244. if (method < 0)
  1245. ThrowConvertException(OptionError,"UnrecognizedDitherMethod",
  1246. argv[i]);
  1247. break;
  1248. }
  1249. if (LocaleCompare("draw",option+1) == 0)
  1250. {
  1251. if (*option == '+')
  1252. break;
  1253. i++;
  1254. if (i == (ssize_t) (argc-1))
  1255. ThrowConvertException(OptionError,"MissingArgument",option);
  1256. break;
  1257. }
  1258. if (LocaleCompare("duration",option+1) == 0)
  1259. {
  1260. if (*option == '+')
  1261. break;
  1262. i++;
  1263. if (i == (ssize_t) (argc-1))
  1264. ThrowConvertException(OptionError,"MissingArgument",option);
  1265. if (IsGeometry(argv[i]) == MagickFalse)
  1266. ThrowConvertInvalidArgumentException(option,argv[i]);
  1267. break;
  1268. }
  1269. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  1270. }
  1271. case 'e':
  1272. {
  1273. if (LocaleCompare("edge",option+1) == 0)
  1274. {
  1275. if (*option == '+')
  1276. break;
  1277. i++;
  1278. if (i == (ssize_t) (argc-1))
  1279. ThrowConvertException(OptionError,"MissingArgument",option);
  1280. if (IsGeometry(argv[i]) == MagickFalse)
  1281. ThrowConvertInvalidArgumentException(option,argv[i]);
  1282. break;
  1283. }
  1284. if (LocaleCompare("emboss",option+1) == 0)
  1285. {
  1286. if (*option == '+')
  1287. break;
  1288. i++;
  1289. if (i == (ssize_t) (argc-1))
  1290. ThrowConvertException(OptionError,"MissingArgument",option);
  1291. if (IsGeometry(argv[i]) == MagickFalse)
  1292. ThrowConvertInvalidArgumentException(option,argv[i]);
  1293. break;
  1294. }
  1295. if (LocaleCompare("encipher",option+1) == 0)
  1296. {
  1297. if (*option == '+')
  1298. break;
  1299. i++;
  1300. if (i == (ssize_t) (argc-1))
  1301. ThrowConvertException(OptionError,"MissingArgument",option);
  1302. break;
  1303. }
  1304. if (LocaleCompare("encoding",option+1) == 0)
  1305. {
  1306. if (*option == '+')
  1307. break;
  1308. i++;
  1309. if (i == (ssize_t) (argc-1))
  1310. ThrowConvertException(OptionError,"MissingArgument",option);
  1311. break;
  1312. }
  1313. if (LocaleCompare("endian",option+1) == 0)
  1314. {
  1315. ssize_t
  1316. endian;
  1317. if (*option == '+')
  1318. break;
  1319. i++;
  1320. if (i == (ssize_t) (argc-1))
  1321. ThrowConvertException(OptionError,"MissingArgument",option);
  1322. endian=ParseMagickOption(MagickEndianOptions,MagickFalse,
  1323. argv[i]);
  1324. if (endian < 0)
  1325. ThrowConvertException(OptionError,"UnrecognizedEndianType",
  1326. argv[i]);
  1327. break;
  1328. }
  1329. if (LocaleCompare("enhance",option+1) == 0)
  1330. break;
  1331. if (LocaleCompare("equalize",option+1) == 0)
  1332. break;
  1333. if (LocaleCompare("evaluate",option+1) == 0)
  1334. {
  1335. ssize_t
  1336. op;
  1337. if (*option == '+')
  1338. break;
  1339. i++;
  1340. if (i == (ssize_t) argc)
  1341. ThrowConvertException(OptionError,"MissingArgument",option);
  1342. op=ParseMagickOption(MagickEvaluateOptions,MagickFalse,argv[i]);
  1343. if (op < 0)
  1344. ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
  1345. argv[i]);
  1346. i++;
  1347. if (i == (ssize_t) (argc-1))
  1348. ThrowConvertException(OptionError,"MissingArgument",option);
  1349. if (IsGeometry(argv[i]) == MagickFalse)
  1350. ThrowConvertInvalidArgumentException(option,argv[i]);
  1351. break;
  1352. }
  1353. if (LocaleCompare("evaluate-sequence",option+1) == 0)
  1354. {
  1355. ssize_t
  1356. op;
  1357. if (*option == '+')
  1358. break;
  1359. i++;
  1360. if (i == (ssize_t) argc)
  1361. ThrowConvertException(OptionError,"MissingArgument",option);
  1362. op=ParseMagickOption(MagickEvaluateOptions,MagickFalse,argv[i]);
  1363. if (op < 0)
  1364. ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
  1365. argv[i]);
  1366. break;
  1367. }
  1368. if (LocaleCompare("extent",option+1) == 0)
  1369. {
  1370. if (*option == '+')
  1371. break;
  1372. i++;
  1373. if (i == (ssize_t) (argc-1))
  1374. ThrowConvertException(OptionError,"MissingArgument",option);
  1375. if (IsGeometry(argv[i]) == MagickFalse)
  1376. ThrowConvertInvalidArgumentException(option,argv[i]);
  1377. break;
  1378. }
  1379. if (LocaleCompare("extract",option+1) == 0)
  1380. {
  1381. if (*option == '+')
  1382. break;
  1383. i++;
  1384. if (i == (ssize_t) (argc-1))
  1385. ThrowConvertException(OptionError,"MissingArgument",option);
  1386. if (IsGeometry(argv[i]) == MagickFalse)
  1387. ThrowConvertInvalidArgumentException(option,argv[i]);
  1388. break;
  1389. }
  1390. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  1391. }
  1392. case 'f':
  1393. {
  1394. if (LocaleCompare("family",option+1) == 0)
  1395. {
  1396. if (*option == '+')
  1397. break;
  1398. i++;
  1399. if (i == (ssize_t) (argc-1))
  1400. ThrowConvertException(OptionError,"MissingArgument",option);
  1401. break;
  1402. }
  1403. if (LocaleCompare("fft",option+1) == 0)
  1404. break;
  1405. if (LocaleCompare("fill",option+1) == 0)
  1406. {
  1407. if (*option == '+')
  1408. break;
  1409. i++;
  1410. if (i == (ssize_t) (argc-1))
  1411. ThrowConvertException(OptionError,"MissingArgument",option);
  1412. break;
  1413. }
  1414. if (LocaleCompare("filter",option+1) == 0)
  1415. {
  1416. ssize_t
  1417. filter;
  1418. if (*option == '+')
  1419. break;
  1420. i++;
  1421. if (i == (ssize_t) (argc-1))
  1422. ThrowConvertException(OptionError,"MissingArgument",option);
  1423. filter=ParseMagickOption(MagickFilterOptions,MagickFalse,argv[i]);
  1424. if (filter < 0)
  1425. ThrowConvertException(OptionError,"UnrecognizedImageFilter",
  1426. argv[i]);
  1427. break;
  1428. }
  1429. if (LocaleCompare("flatten",option+1) == 0)
  1430. break;
  1431. if (LocaleCompare("flip",option+1) == 0)
  1432. break;
  1433. if (LocaleCompare("flop",option+1) == 0)
  1434. break;
  1435. if (LocaleCompare("floodfill",option+1) == 0)
  1436. {
  1437. if (*option == '+')
  1438. break;
  1439. i++;
  1440. if (i == (ssize_t) (argc-1))
  1441. ThrowConvertException(OptionError,"MissingArgument",option);
  1442. if (IsGeometry(argv[i]) == MagickFalse)
  1443. ThrowConvertInvalidArgumentException(option,argv[i]);
  1444. i++;
  1445. if (i == (ssize_t) (argc-1))
  1446. ThrowConvertException(OptionError,"MissingArgument",option);
  1447. break;
  1448. }
  1449. if (LocaleCompare("font",option+1) == 0)
  1450. {
  1451. if (*option == '+')
  1452. break;
  1453. i++;
  1454. if (i == (ssize_t) (argc-1))
  1455. ThrowConvertException(OptionError,"MissingArgument",option);
  1456. break;
  1457. }
  1458. if (LocaleCompare("format",option+1) == 0)
  1459. {
  1460. if (*option == '+')
  1461. break;
  1462. i++;
  1463. if (i == (ssize_t) (argc-1))
  1464. ThrowConvertException(OptionError,"MissingArgument",option);
  1465. format=argv[i];
  1466. break;
  1467. }
  1468. if (LocaleCompare("frame",option+1) == 0)
  1469. {
  1470. if (*option == '+')
  1471. break;
  1472. i++;
  1473. if (i == (ssize_t) (argc-1))
  1474. ThrowConvertException(OptionError,"MissingArgument",option);
  1475. if (IsGeometry(argv[i]) == MagickFalse)
  1476. ThrowConvertInvalidArgumentException(option,argv[i]);
  1477. break;
  1478. }
  1479. if (LocaleCompare("function",option+1) == 0)
  1480. {
  1481. ssize_t
  1482. op;
  1483. if (*option == '+')
  1484. break;
  1485. i++;
  1486. if (i == (ssize_t) argc)
  1487. ThrowConvertException(OptionError,"MissingArgument",option);
  1488. op=ParseMagickOption(MagickFunctionOptions,MagickFalse,argv[i]);
  1489. if (op < 0)
  1490. ThrowConvertException(OptionError,"UnrecognizedFunction",argv[i]);
  1491. i++;
  1492. if (i == (ssize_t) (argc-1))
  1493. ThrowConvertException(OptionError,"MissingArgument",option);
  1494. break;
  1495. }
  1496. if (LocaleCompare("fuzz",option+1) == 0)
  1497. {
  1498. if (*option == '+')
  1499. break;
  1500. i++;
  1501. if (i == (ssize_t) (argc-1))
  1502. ThrowConvertException(OptionError,"MissingArgument",option);
  1503. if (IsGeometry(argv[i]) == MagickFalse)
  1504. ThrowConvertInvalidArgumentException(option,argv[i]);
  1505. break;
  1506. }
  1507. if (LocaleCompare("fx",option+1) == 0)
  1508. {
  1509. if (*option == '+')
  1510. break;
  1511. i++;
  1512. if (i == (ssize_t) (argc-1))
  1513. ThrowConvertException(OptionError,"MissingArgument",option);
  1514. break;
  1515. }
  1516. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  1517. }
  1518. case 'g':
  1519. {
  1520. if (LocaleCompare("gamma",option+1) == 0)
  1521. {
  1522. i++;
  1523. if (i == (ssize_t) (argc-1))
  1524. ThrowConvertException(OptionError,"MissingArgument",option);
  1525. if (IsGeometry(argv[i]) == MagickFalse)
  1526. ThrowConvertInvalidArgumentException(option,argv[i]);
  1527. break;
  1528. }
  1529. if ((LocaleCompare("gaussian-blur",option+1) == 0) ||
  1530. (LocaleCompare("gaussian",option+1) == 0))
  1531. {
  1532. i++;
  1533. if (i == (ssize_t) (argc-1))
  1534. ThrowConvertException(OptionError,"MissingArgument",option);
  1535. if (IsGeometry(argv[i]) == MagickFalse)
  1536. ThrowConvertInvalidArgumentException(option,argv[i]);
  1537. break;
  1538. }
  1539. if (LocaleCompare("geometry",option+1) == 0)
  1540. {
  1541. if (*option == '+')
  1542. break;
  1543. i++;
  1544. if (i == (ssize_t) (argc-1))
  1545. ThrowConvertException(OptionError,"MissingArgument",option);
  1546. if (IsGeometry(argv[i]) == MagickFalse)
  1547. ThrowConvertInvalidArgumentException(option,argv[i]);
  1548. break;
  1549. }
  1550. if (LocaleCompare("gravity",option+1) == 0)
  1551. {
  1552. ssize_t
  1553. gravity;
  1554. if (*option == '+')
  1555. break;
  1556. i++;
  1557. if (i == (ssize_t) (argc-1))
  1558. ThrowConvertException(OptionError,"MissingArgument",option);
  1559. gravity=ParseMagickOption(MagickGravityOptions,MagickFalse,
  1560. argv[i]);
  1561. if (gravity < 0)
  1562. ThrowConvertException(OptionError,"UnrecognizedGravityType",
  1563. argv[i]);
  1564. break;
  1565. }
  1566. if (LocaleCompare("green-primary",option+1) == 0)
  1567. {
  1568. if (*option == '+')
  1569. break;
  1570. i++;
  1571. if (i == (ssize_t) (argc-1))
  1572. ThrowConvertException(OptionError,"MissingArgument",option);
  1573. if (IsGeometry(argv[i]) == MagickFalse)
  1574. ThrowConvertInvalidArgumentException(option,argv[i]);
  1575. break;
  1576. }
  1577. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  1578. }
  1579. case 'h':
  1580. {
  1581. if (LocaleCompare("hald-clut",option+1) == 0)
  1582. break;
  1583. if ((LocaleCompare("help",option+1) == 0) ||
  1584. (LocaleCompare("-help",option+1) == 0))
  1585. return(ConvertUsage());
  1586. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  1587. }
  1588. case 'i':
  1589. {
  1590. if (LocaleCompare("identify",option+1) == 0)
  1591. break;
  1592. if (LocaleCompare("ift",option+1) == 0)
  1593. break;
  1594. if (LocaleCompare("implode",option+1) == 0)
  1595. {
  1596. if (*option == '+')
  1597. break;
  1598. i++;
  1599. if (i == (ssize_t) (argc-1))
  1600. ThrowConvertException(OptionError,"MissingArgument",option);
  1601. if (IsGeometry(argv[i]) == MagickFalse)
  1602. ThrowConvertInvalidArgumentException(option,argv[i]);
  1603. break;
  1604. }
  1605. if (LocaleCompare("insert",option+1) == 0)
  1606. {
  1607. if (*option == '+')
  1608. break;
  1609. i++;
  1610. if (i == (ssize_t) (argc-1))
  1611. ThrowConvertException(OptionError,"MissingArgument",option);
  1612. if (IsGeometry(argv[i]) == MagickFalse)
  1613. ThrowConvertInvalidArgumentException(option,argv[i]);
  1614. break;
  1615. }
  1616. if (LocaleCompare("intent",option+1) == 0)
  1617. {
  1618. ssize_t
  1619. intent;
  1620. if (*option == '+')
  1621. break;
  1622. i++;
  1623. if (i == (ssize_t) (argc-1))
  1624. ThrowConvertException(OptionError,"MissingArgument",option);
  1625. intent=ParseMagickOption(MagickIntentOptions,MagickFalse,
  1626. argv[i]);
  1627. if (intent < 0)
  1628. ThrowConvertException(OptionError,"UnrecognizedIntentType",
  1629. argv[i]);
  1630. break;
  1631. }
  1632. if (LocaleCompare("interlace",option+1) == 0)
  1633. {
  1634. ssize_t
  1635. interlace;
  1636. if (*option == '+')
  1637. break;
  1638. i++;
  1639. if (i == (ssize_t) (argc-1))
  1640. ThrowConvertException(OptionError,"MissingArgument",option);
  1641. interlace=ParseMagickOption(MagickInterlaceOptions,MagickFalse,
  1642. argv[i]);
  1643. if (interlace < 0)
  1644. ThrowConvertException(OptionError,"UnrecognizedInterlaceType",
  1645. argv[i]);
  1646. break;
  1647. }
  1648. if (LocaleCompare("interline-spacing",option+1) == 0)
  1649. {
  1650. if (*option == '+')
  1651. break;
  1652. i++;
  1653. if (i == (ssize_t) (argc-1))
  1654. ThrowConvertException(OptionError,"MissingArgument",option);
  1655. if (IsGeometry(argv[i]) == MagickFalse)
  1656. ThrowConvertInvalidArgumentException(option,argv[i]);
  1657. break;
  1658. }
  1659. if (LocaleCompare("interpolate",option+1) == 0)
  1660. {
  1661. ssize_t
  1662. interpolate;
  1663. if (*option == '+')
  1664. break;
  1665. i++;
  1666. if (i == (ssize_t) argc)
  1667. ThrowConvertException(OptionError,"MissingArgument",option);
  1668. interpolate=ParseMagickOption(MagickInterpolateOptions,MagickFalse,
  1669. argv[i]);
  1670. if (interpolate < 0)
  1671. ThrowConvertException(OptionError,"UnrecognizedInterpolateMethod",
  1672. argv[i]);
  1673. break;
  1674. }
  1675. if (LocaleCompare("interword-spacing",option+1) == 0)
  1676. {
  1677. if (*option == '+')
  1678. break;
  1679. i++;
  1680. if (i == (ssize_t) (argc-1))
  1681. ThrowConvertException(OptionError,"MissingArgument",option);
  1682. if (IsGeometry(argv[i]) == MagickFalse)
  1683. ThrowConvertInvalidArgumentException(option,argv[i]);
  1684. break;
  1685. }
  1686. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  1687. }
  1688. case 'k':
  1689. {
  1690. if (LocaleCompare("kerning",option+1) == 0)
  1691. {
  1692. if (*option == '+')
  1693. break;
  1694. i++;
  1695. if (i == (ssize_t) (argc-1))
  1696. ThrowConvertException(OptionError,"MissingArgument",option);
  1697. if (IsGeometry(argv[i]) == MagickFalse)
  1698. ThrowConvertInvalidArgumentException(option,argv[i]);
  1699. break;
  1700. }
  1701. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  1702. }
  1703. case 'l':
  1704. {
  1705. if (LocaleCompare("label",option+1) == 0)
  1706. {
  1707. if (*option == '+')
  1708. break;
  1709. i++;
  1710. if (i == (ssize_t) argc)
  1711. ThrowConvertException(OptionError,"MissingArgument",option);
  1712. break;
  1713. }
  1714. if (LocaleCompare("lat",option+1) == 0)
  1715. {
  1716. if (*option == '+')
  1717. break;
  1718. i++;
  1719. if (i == (ssize_t) (argc-1))
  1720. ThrowConvertException(OptionError,"MissingArgument",option);
  1721. if (IsGeometry(argv[i]) == MagickFalse)
  1722. ThrowConvertInvalidArgumentException(option,argv[i]);
  1723. break;
  1724. }
  1725. if (LocaleCompare("layers",option+1) == 0)
  1726. {
  1727. ssize_t
  1728. type;
  1729. if (*option == '+')
  1730. break;
  1731. i++;
  1732. if (i == (ssize_t) (argc-1))
  1733. ThrowConvertException(OptionError,"MissingArgument",option);
  1734. type=ParseMagickOption(MagickLayerOptions,MagickFalse,argv[i]);
  1735. if (type < 0)
  1736. ThrowConvertException(OptionError,"UnrecognizedLayerMethod",
  1737. argv[i]);
  1738. break;
  1739. }
  1740. if (LocaleCompare("level",option+1) == 0)
  1741. {
  1742. i++;
  1743. if (i == (ssize_t) (argc-1))
  1744. ThrowConvertException(OptionError,"MissingArgument",option);
  1745. if (IsGeometry(argv[i]) == MagickFalse)
  1746. ThrowConvertInvalidArgumentException(option,argv[i]);
  1747. break;
  1748. }
  1749. if (LocaleCompare("level-colors",option+1) == 0)
  1750. {
  1751. i++;
  1752. if (i == (ssize_t) (argc-1))
  1753. ThrowConvertException(OptionError,"MissingArgument",option);
  1754. break;
  1755. }
  1756. if (LocaleCompare("linewidth",option+1) == 0)
  1757. {
  1758. if (*option == '+')
  1759. break;
  1760. i++;
  1761. if (i == (ssize_t) (argc-1))
  1762. ThrowConvertException(OptionError,"MissingArgument",option);
  1763. if (IsGeometry(argv[i]) == MagickFalse)
  1764. ThrowConvertInvalidArgumentException(option,argv[i]);
  1765. break;
  1766. }
  1767. if (LocaleCompare("liquid-rescale",option+1) == 0)
  1768. {
  1769. i++;
  1770. if (i == (ssize_t) (argc-1))
  1771. ThrowConvertException(OptionError,"MissingArgument",option);
  1772. if (IsGeometry(argv[i]) == MagickFalse)
  1773. ThrowConvertInvalidArgumentException(option,argv[i]);
  1774. break;
  1775. }
  1776. if (LocaleCompare("limit",option+1) == 0)
  1777. {
  1778. char
  1779. *p;
  1780. double
  1781. value;
  1782. ssize_t
  1783. resource;
  1784. if (*option == '+')
  1785. break;
  1786. i++;
  1787. if (i == (ssize_t) argc)
  1788. ThrowConvertException(OptionError,"MissingArgument",option);
  1789. resource=ParseMagickOption(MagickResourceOptions,MagickFalse,
  1790. argv[i]);
  1791. if (resource < 0)
  1792. ThrowConvertException(OptionError,"UnrecognizedResourceType",
  1793. argv[i]);
  1794. i++;
  1795. if (i == (ssize_t) argc)
  1796. ThrowConvertException(OptionError,"MissingArgument",option);
  1797. value=strtod(argv[i],&p);
  1798. if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
  1799. ThrowConvertInvalidArgumentException(option,argv[i]);
  1800. break;
  1801. }
  1802. if (LocaleCompare("linear-stretch",option+1) == 0)
  1803. {
  1804. i++;
  1805. if (i == (ssize_t) (argc-1))
  1806. ThrowConvertException(OptionError,"MissingArgument",option);
  1807. if (IsGeometry(argv[i]) == MagickFalse)
  1808. ThrowConvertInvalidArgumentException(option,argv[i]);
  1809. break;
  1810. }
  1811. if (LocaleCompare("list",option+1) == 0)
  1812. {
  1813. ssize_t
  1814. list;
  1815. if (*option == '+')
  1816. break;
  1817. i++;
  1818. if (i == (ssize_t) argc)
  1819. ThrowConvertException(OptionError,"MissingArgument",option);
  1820. list=ParseMagickOption(MagickListOptions,MagickFalse,argv[i]);
  1821. if (list < 0)
  1822. ThrowConvertException(OptionError,"UnrecognizedListType",argv[i]);
  1823. status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
  1824. argv+j,exception);
  1825. DestroyConvert();
  1826. return(status != 0 ? MagickFalse : MagickTrue);
  1827. }
  1828. if (LocaleCompare("log",option+1) == 0)
  1829. {
  1830. if (*option == '+')
  1831. break;
  1832. i++;
  1833. if ((i == (ssize_t) argc) ||
  1834. (strchr(argv[i],'%') == (char *) NULL))
  1835. ThrowConvertException(OptionError,"MissingArgument",option);
  1836. break;
  1837. }
  1838. if (LocaleCompare("loop",option+1) == 0)
  1839. {
  1840. if (*option == '+')
  1841. break;
  1842. i++;
  1843. if (i == (ssize_t) (argc-1))
  1844. ThrowConvertException(OptionError,"MissingArgument",option);
  1845. if (IsGeometry(argv[i]) == MagickFalse)
  1846. ThrowConvertInvalidArgumentException(option,argv[i]);
  1847. break;
  1848. }
  1849. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  1850. }
  1851. case 'm':
  1852. {
  1853. if (LocaleCompare("map",option+1) == 0)
  1854. {
  1855. if (*option == '+')
  1856. break;
  1857. i++;
  1858. if (i == (ssize_t) (argc-1))
  1859. ThrowConvertException(OptionError,"MissingArgument",option);
  1860. break;
  1861. }
  1862. if (LocaleCompare("mask",option+1) == 0)
  1863. {
  1864. if (*option == '+')
  1865. break;
  1866. i++;
  1867. if (i == (ssize_t) (argc-1))
  1868. ThrowConvertException(OptionError,"MissingArgument",option);
  1869. break;
  1870. }
  1871. if (LocaleCompare("matte",option+1) == 0)
  1872. break;
  1873. if (LocaleCompare("mattecolor",option+1) == 0)
  1874. {
  1875. if (*option == '+')
  1876. break;
  1877. i++;
  1878. if (i == (ssize_t) (argc-1))
  1879. ThrowConvertException(OptionError,"MissingArgument",option);
  1880. break;
  1881. }
  1882. if (LocaleCompare("maximum",option+1) == 0)
  1883. break;
  1884. if (LocaleCompare("median",option+1) == 0)
  1885. {
  1886. if (*option == '+')
  1887. break;
  1888. i++;
  1889. if (i == (ssize_t) (argc-1))
  1890. ThrowConvertException(OptionError,"MissingArgument",option);
  1891. if (IsGeometry(argv[i]) == MagickFalse)
  1892. ThrowConvertInvalidArgumentException(option,argv[i]);
  1893. break;
  1894. }
  1895. if (LocaleCompare("minimum",option+1) == 0)
  1896. break;
  1897. if (LocaleCompare("modulate",option+1) == 0)
  1898. {
  1899. if (*option == '+')
  1900. break;
  1901. i++;
  1902. if (i == (ssize_t) (argc-1))
  1903. ThrowConvertException(OptionError,"MissingArgument",option);
  1904. if (IsGeometry(argv[i]) == MagickFalse)
  1905. ThrowConvertInvalidArgumentException(option,argv[i]);
  1906. break;
  1907. }
  1908. if (LocaleCompare("monitor",option+1) == 0)
  1909. break;
  1910. if (LocaleCompare("monochrome",option+1) == 0)
  1911. break;
  1912. if (LocaleCompare("morph",option+1) == 0)
  1913. {
  1914. if (*option == '+')
  1915. break;
  1916. i++;
  1917. if (i == (ssize_t) (argc-1))
  1918. ThrowConvertException(OptionError,"MissingArgument",option);
  1919. if (IsGeometry(argv[i]) == MagickFalse)
  1920. ThrowConvertInvalidArgumentException(option,argv[i]);
  1921. break;
  1922. }
  1923. if (LocaleCompare("morphology",option+1) == 0)
  1924. {
  1925. char
  1926. token[MaxTextExtent];
  1927. ssize_t
  1928. op;
  1929. i++;
  1930. if (i == (ssize_t) argc)
  1931. ThrowConvertException(OptionError,"MissingArgument",option);
  1932. GetMagickToken(argv[i],NULL,token);
  1933. op=ParseMagickOption(MagickMorphologyOptions,MagickFalse,token);
  1934. if (op < 0)
  1935. ThrowConvertException(OptionError,"UnrecognizedMorphologyMethod",
  1936. token);
  1937. i++;
  1938. if (i == (ssize_t) (argc-1))
  1939. ThrowConvertException(OptionError,"MissingArgument",option);
  1940. GetMagickToken(argv[i],NULL,token);
  1941. if (isalpha((int) ((unsigned char) *token)) != 0)
  1942. {
  1943. op=ParseMagickOption(MagickKernelOptions,MagickFalse,token);
  1944. if (op < 0)
  1945. ThrowConvertException(OptionError,"UnrecognizedKernelType",
  1946. token);
  1947. }
  1948. #if 0
  1949. /* DO NOT ENABLE, geometry can not handle user defined kernels
  1950. * which include 'nan' values, though '-' are acceptable.
  1951. */
  1952. else if (IsGeometry(argv[i]) == MagickFalse)
  1953. ThrowConvertInvalidArgumentException(option,argv[i]);
  1954. #endif
  1955. break;
  1956. }
  1957. if (LocaleCompare("mosaic",option+1) == 0)
  1958. break;
  1959. if (LocaleCompare("motion-blur",option+1) == 0)
  1960. {
  1961. if (*option == '+')
  1962. break;
  1963. i++;
  1964. if (i == (ssize_t) (argc-1))
  1965. ThrowConvertException(OptionError,"MissingArgument",option);
  1966. if (IsGeometry(argv[i]) == MagickFalse)
  1967. ThrowConvertInvalidArgumentException(option,argv[i]);
  1968. break;
  1969. }
  1970. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  1971. }
  1972. case 'n':
  1973. {
  1974. if (LocaleCompare("negate",option+1) == 0)
  1975. break;
  1976. if (LocaleCompare("noise",option+1) == 0)
  1977. {
  1978. i++;
  1979. if (i == (ssize_t) (argc-1))
  1980. ThrowConvertException(OptionError,"MissingArgument",option);
  1981. if (*option == '+')
  1982. {
  1983. ssize_t
  1984. noise;
  1985. noise=ParseMagickOption(MagickNoiseOptions,MagickFalse,argv[i]);
  1986. if (noise < 0)
  1987. ThrowConvertException(OptionError,"UnrecognizedNoiseType",
  1988. argv[i]);
  1989. break;
  1990. }
  1991. if (IsGeometry(argv[i]) == MagickFalse)
  1992. ThrowConvertInvalidArgumentException(option,argv[i]);
  1993. break;
  1994. }
  1995. if (LocaleCompare("noop",option+1) == 0)
  1996. break;
  1997. if (LocaleCompare("normalize",option+1) == 0)
  1998. break;
  1999. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  2000. }
  2001. case 'o':
  2002. {
  2003. if (LocaleCompare("opaque",option+1) == 0)
  2004. {
  2005. i++;
  2006. if (i == (ssize_t) (argc-1))
  2007. ThrowConvertException(OptionError,"MissingArgument",option);
  2008. break;
  2009. }
  2010. if (LocaleCompare("ordered-dither",option+1) == 0)
  2011. {
  2012. if (*option == '+')
  2013. break;
  2014. i++;
  2015. if (i == (ssize_t) (argc-1))
  2016. ThrowConvertException(OptionError,"MissingArgument",option);
  2017. break;
  2018. }
  2019. if (LocaleCompare("orient",option+1) == 0)
  2020. {
  2021. ssize_t
  2022. orientation;
  2023. if (*option == '+')
  2024. break;
  2025. i++;
  2026. if (i == (ssize_t) (argc-1))
  2027. ThrowConvertException(OptionError,"MissingArgument",option);
  2028. orientation=ParseMagickOption(MagickOrientationOptions,
  2029. MagickFalse,argv[i]);
  2030. if (orientation < 0)
  2031. ThrowConvertException(OptionError,"UnrecognizedImageOrientation",
  2032. argv[i]);
  2033. break;
  2034. }
  2035. ThrowConvertException(OptionError,"UnrecognizedOption",argv[i])
  2036. }
  2037. case 'p':
  2038. {
  2039. if (LocaleCompare("page",option+1) == 0)
  2040. {
  2041. if (*option == '+')
  2042. break;
  2043. i++;
  2044. if (i == (ssize_t) argc)
  2045. ThrowConvertException(OptionError,"MissingArgument",option);
  2046. break;
  2047. }
  2048. if (LocaleCompare("paint",option+1) == 0)
  2049. {
  2050. if (*option == '+')
  2051. break;
  2052. i++;
  2053. if (i == (ssize_t) (argc-1))
  2054. ThrowConvertException(OptionError,"MissingArgument",option);
  2055. if (IsGeometry(argv[i]) == MagickFalse)
  2056. ThrowConvertInvalidArgumentException(option,argv[i]);
  2057. break;
  2058. }
  2059. if (LocaleCompare("ping",option+1) == 0)
  2060. break;
  2061. if (LocaleCompare("pointsize",option+1) == 0)
  2062. {
  2063. if (*option == '+')
  2064. break;
  2065. i++;
  2066. if (i == (ssize_t) (argc-1))
  2067. ThrowConvertException(OptionError,"MissingArgument",option);
  2068. if (IsGeometry(argv[i]) == MagickFalse)
  2069. ThrowConvertInvalidArgumentException(option,argv[i]);
  2070. break;
  2071. }
  2072. if (LocaleCompare("polaroid",option+1) == 0)
  2073. {
  2074. if (*option == '+')
  2075. break;
  2076. i++;
  2077. if (i == (ssize_t) (argc-1))
  2078. ThrowConvertException(OptionError,"MissingArgument",option);
  2079. if (IsGeometry(argv[i]) == MagickFalse)
  2080. ThrowConvertInvalidArgumentException(option,argv[i]);
  2081. break;
  2082. }
  2083. if (LocaleCompare("posterize",option+1) == 0)
  2084. {
  2085. if (*option == '+')
  2086. break;
  2087. i++;
  2088. if (i == (ssize_t) (argc-1))
  2089. ThrowConvertException(OptionError,"MissingArgument",option);
  2090. if (IsGeometry(argv[i]) == MagickFalse)
  2091. ThrowConvertInvalidArgumentException(option,argv[i]);
  2092. break;
  2093. }
  2094. if (LocaleCompare("precision",option+1) == 0)
  2095. {
  2096. if (*option == '+')
  2097. break;
  2098. i++;
  2099. if (i == (ssize_t) (argc-1))
  2100. ThrowConvertException(OptionError,"MissingArgument",option);
  2101. if (IsGeometry(argv[i]) == MagickFalse)
  2102. ThrowConvertInvalidArgumentException(option,argv[i]);
  2103. break;
  2104. }
  2105. if (LocaleCompare("preview",option+1) == 0)
  2106. {
  2107. ssize_t
  2108. preview;
  2109. if (*option == '+')
  2110. break;
  2111. i++;
  2112. if (i == (ssize_t) (argc-1))
  2113. ThrowConvertException(OptionError,"MissingArgument",option);
  2114. preview=ParseMagickOption(MagickPreviewOptions,MagickFalse,
  2115. argv[i]);
  2116. if (preview < 0)
  2117. ThrowConvertException(OptionError,"UnrecognizedPreviewType",
  2118. argv[i]);
  2119. break;
  2120. }
  2121. if (LocaleCompare("print",option+1) == 0)
  2122. {
  2123. if (*option == '+')
  2124. break;
  2125. i++;
  2126. if (i == (ssize_t) (argc-1))
  2127. ThrowConvertException(OptionError,"MissingArgument",option);
  2128. break;
  2129. }
  2130. if (LocaleCompare("process",option+1) == 0)
  2131. {
  2132. if (*option == '+')
  2133. break;
  2134. i++;
  2135. if (i == (ssize_t) (argc-1))
  2136. ThrowConvertException(OptionError,"MissingArgument",option);
  2137. break;
  2138. }
  2139. if (LocaleCompare("profile",option+1) == 0)
  2140. {
  2141. i++;
  2142. if (i == (ssize_t) (argc-1))
  2143. ThrowConvertException(OptionError,"MissingArgument",option);
  2144. break;
  2145. }
  2146. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  2147. }
  2148. case 'q':
  2149. {
  2150. if (LocaleCompare("quality",option+1) == 0)
  2151. {
  2152. if (*option == '+')
  2153. break;
  2154. i++;
  2155. if (i == (ssize_t) (argc-1))
  2156. ThrowConvertException(OptionError,"MissingArgument",option);
  2157. if (IsGeometry(argv[i]) == MagickFalse)
  2158. ThrowConvertInvalidArgumentException(option,argv[i]);
  2159. break;
  2160. }
  2161. if (LocaleCompare("quantize",option+1) == 0)
  2162. {
  2163. ssize_t
  2164. colorspace;
  2165. if (*option == '+')
  2166. break;
  2167. i++;
  2168. if (i == (ssize_t) (argc-1))
  2169. ThrowConvertException(OptionError,"MissingArgument",option);
  2170. colorspace=ParseMagickOption(MagickColorspaceOptions,
  2171. MagickFalse,argv[i]);
  2172. if (colorspace < 0)
  2173. ThrowConvertException(OptionError,"UnrecognizedColorspace",
  2174. argv[i]);
  2175. break;
  2176. }
  2177. if (LocaleCompare("quiet",option+1) == 0)
  2178. break;
  2179. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  2180. }
  2181. case 'r':
  2182. {
  2183. if (LocaleCompare("radial-blur",option+1) == 0)
  2184. {
  2185. i++;
  2186. if (i == (ssize_t) (argc-1))
  2187. ThrowConvertException(OptionError,"MissingArgument",option);
  2188. if (IsGeometry(argv[i]) == MagickFalse)
  2189. ThrowConvertInvalidArgumentException(option,argv[i]);
  2190. break;
  2191. }
  2192. if (LocaleCompare("raise",option+1) == 0)
  2193. {
  2194. i++;
  2195. if (i == (ssize_t) (argc-1))
  2196. ThrowConvertException(OptionError,"MissingArgument",option);
  2197. if (IsGeometry(argv[i]) == MagickFalse)
  2198. ThrowConvertInvalidArgumentException(option,argv[i]);
  2199. break;
  2200. }
  2201. if (LocaleCompare("random-threshold",option+1) == 0)
  2202. {
  2203. if (*option == '+')
  2204. break;
  2205. i++;
  2206. if (i == (ssize_t) (argc-1))
  2207. ThrowConvertException(OptionError,"MissingArgument",option);
  2208. if (IsGeometry(argv[i]) == MagickFalse)
  2209. ThrowConvertInvalidArgumentException(option,argv[i]);
  2210. break;
  2211. }
  2212. if (LocaleCompare("recolor",option+1) == 0)
  2213. {
  2214. if (*option == '+')
  2215. break;
  2216. i++;
  2217. if (i == (ssize_t) (argc-1))
  2218. ThrowConvertException(OptionError,"MissingArgument",option);
  2219. if (IsGeometry(argv[i]) == MagickFalse)
  2220. ThrowConvertInvalidArgumentException(option,argv[i]);
  2221. break;
  2222. }
  2223. if (LocaleCompare("red-primary",option+1) == 0)
  2224. {
  2225. if (*option == '+')
  2226. break;
  2227. i++;
  2228. if (i == (ssize_t) (argc-1))
  2229. ThrowConvertException(OptionError,"MissingArgument",option);
  2230. if (IsGeometry(argv[i]) == MagickFalse)
  2231. ThrowConvertInvalidArgumentException(option,argv[i]);
  2232. break;
  2233. }
  2234. if (LocaleCompare("regard-warnings",option+1) == 0)
  2235. break;
  2236. if (LocaleCompare("region",option+1) == 0)
  2237. {
  2238. if (*option == '+')
  2239. break;
  2240. i++;
  2241. if (i == (ssize_t) (argc-1))
  2242. ThrowConvertException(OptionError,"MissingArgument",option);
  2243. if (IsGeometry(argv[i]) == MagickFalse)
  2244. ThrowConvertInvalidArgumentException(option,argv[i]);
  2245. break;
  2246. }
  2247. if (LocaleCompare("remap",option+1) == 0)
  2248. {
  2249. if (*option == '+')
  2250. break;
  2251. i++;
  2252. if (i == (ssize_t) (argc-1))
  2253. ThrowConvertException(OptionError,"MissingArgument",option);
  2254. break;
  2255. }
  2256. if (LocaleCompare("render",option+1) == 0)
  2257. break;
  2258. if (LocaleCompare("repage",option+1) == 0)
  2259. {
  2260. if (*option == '+')
  2261. break;
  2262. i++;
  2263. if (i == (ssize_t) (argc-1))
  2264. ThrowConvertException(OptionError,"MissingArgument",option);
  2265. if (IsGeometry(argv[i]) == MagickFalse)
  2266. ThrowConvertInvalidArgumentException(option,argv[i]);
  2267. break;
  2268. }
  2269. if (LocaleCompare("resample",option+1) == 0)
  2270. {
  2271. if (*option == '+')
  2272. break;
  2273. i++;
  2274. if (i == (ssize_t) (argc-1))
  2275. ThrowConvertException(OptionError,"MissingArgument",option);
  2276. if (IsGeometry(argv[i]) == MagickFalse)
  2277. ThrowConvertInvalidArgumentException(option,argv[i]);
  2278. break;
  2279. }
  2280. if (LocaleCompare("resize",option+1) == 0)
  2281. {
  2282. if (*option == '+')
  2283. break;
  2284. i++;
  2285. if (i == (ssize_t) (argc-1))
  2286. ThrowConvertException(OptionError,"MissingArgument",option);
  2287. if (IsGeometry(argv[i]) == MagickFalse)
  2288. ThrowConvertInvalidArgumentException(option,argv[i]);
  2289. break;
  2290. }
  2291. if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
  2292. {
  2293. respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
  2294. break;
  2295. }
  2296. if (LocaleCompare("reverse",option+1) == 0)
  2297. break;
  2298. if (LocaleCompare("roll",option+1) == 0)
  2299. {
  2300. if (*option == '+')
  2301. break;
  2302. i++;
  2303. if (i == (ssize_t) (argc-1))
  2304. ThrowConvertException(OptionError,"MissingArgument",option);
  2305. if (IsGeometry(argv[i]) == MagickFalse)
  2306. ThrowConvertInvalidArgumentException(option,argv[i]);
  2307. break;
  2308. }
  2309. if (LocaleCompare("rotate",option+1) == 0)
  2310. {
  2311. i++;
  2312. if (i == (ssize_t) (argc-1))
  2313. ThrowConvertException(OptionError,"MissingArgument",option);
  2314. if (IsGeometry(argv[i]) == MagickFalse)
  2315. ThrowConvertInvalidArgumentException(option,argv[i]);
  2316. break;
  2317. }
  2318. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  2319. }
  2320. case 's':
  2321. {
  2322. if (LocaleCompare("sample",option+1) == 0)
  2323. {
  2324. if (*option == '+')
  2325. break;
  2326. i++;
  2327. if (i == (ssize_t) (argc-1))
  2328. ThrowConvertException(OptionError,"MissingArgument",option);
  2329. if (IsGeometry(argv[i]) == MagickFalse)
  2330. ThrowConvertInvalidArgumentException(option,argv[i]);
  2331. break;
  2332. }
  2333. if (LocaleCompare("sampling-factor",option+1) == 0)
  2334. {
  2335. if (*option == '+')
  2336. break;
  2337. i++;
  2338. if (i == (ssize_t) (argc-1))
  2339. ThrowConvertException(OptionError,"MissingArgument",option);
  2340. if (IsGeometry(argv[i]) == MagickFalse)
  2341. ThrowConvertInvalidArgumentException(option,argv[i]);
  2342. break;
  2343. }
  2344. if (LocaleCompare("scale",option+1) == 0)
  2345. {
  2346. if (*option == '+')
  2347. break;
  2348. i++;
  2349. if (i == (ssize_t) (argc-1))
  2350. ThrowConvertException(OptionError,"MissingArgument",option);
  2351. if (IsGeometry(argv[i]) == MagickFalse)
  2352. ThrowConvertInvalidArgumentException(option,argv[i]);
  2353. break;
  2354. }
  2355. if (LocaleCompare("scene",option+1) == 0)
  2356. {
  2357. if (*option == '+')
  2358. break;
  2359. i++;
  2360. if (i == (ssize_t) (argc-1))
  2361. ThrowConvertException(OptionError,"MissingArgument",option);
  2362. if (IsGeometry(argv[i]) == MagickFalse)
  2363. ThrowConvertInvalidArgumentException(option,argv[i]);
  2364. break;
  2365. }
  2366. if (LocaleCompare("seed",option+1) == 0)
  2367. {
  2368. if (*option == '+')
  2369. break;
  2370. i++;
  2371. if (i == (ssize_t) (argc-1))
  2372. ThrowConvertException(OptionError,"MissingArgument",option);
  2373. if (IsGeometry(argv[i]) == MagickFalse)
  2374. ThrowConvertInvalidArgumentException(option,argv[i]);
  2375. break;
  2376. }
  2377. if (LocaleCompare("segment",option+1) == 0)
  2378. {
  2379. if (*option == '+')
  2380. break;
  2381. i++;
  2382. if (i == (ssize_t) (argc-1))
  2383. ThrowConvertException(OptionError,"MissingArgument",option);
  2384. if (IsGeometry(argv[i]) == MagickFalse)
  2385. ThrowConvertInvalidArgumentException(option,argv[i]);
  2386. break;
  2387. }
  2388. if (LocaleCompare("selective-blur",option+1) == 0)
  2389. {
  2390. i++;
  2391. if (i == (ssize_t) (argc-1))
  2392. ThrowConvertException(OptionError,"MissingArgument",option);
  2393. if (IsGeometry(argv[i]) == MagickFalse)
  2394. ThrowConvertInvalidArgumentException(option,argv[i]);
  2395. break;
  2396. }
  2397. if (LocaleCompare("separate",option+1) == 0)
  2398. break;
  2399. if (LocaleCompare("sepia-tone",option+1) == 0)
  2400. {
  2401. if (*option == '+')
  2402. break;
  2403. i++;
  2404. if (i == (ssize_t) (argc-1))
  2405. ThrowConvertException(OptionError,"MissingArgument",option);
  2406. if (IsGeometry(argv[i]) == MagickFalse)
  2407. ThrowConvertInvalidArgumentException(option,argv[i]);
  2408. break;
  2409. }
  2410. if (LocaleCompare("set",option+1) == 0)
  2411. {
  2412. i++;
  2413. if (i == (ssize_t) argc)
  2414. ThrowConvertException(OptionError,"MissingArgument",option);
  2415. if (*option == '+')
  2416. break;
  2417. i++;
  2418. if (i == (ssize_t) argc)
  2419. ThrowConvertException(OptionError,"MissingArgument",option);
  2420. break;
  2421. }
  2422. if (LocaleCompare("shade",option+1) == 0)
  2423. {
  2424. i++;
  2425. if (i == (ssize_t) (argc-1))
  2426. ThrowConvertException(OptionError,"MissingArgument",option);
  2427. if (IsGeometry(argv[i]) == MagickFalse)
  2428. ThrowConvertInvalidArgumentException(option,argv[i]);
  2429. break;
  2430. }
  2431. if (LocaleCompare("shadow",option+1) == 0)
  2432. {
  2433. if (*option == '+')
  2434. break;
  2435. i++;
  2436. if (i == (ssize_t) (argc-1))
  2437. ThrowConvertException(OptionError,"MissingArgument",option);
  2438. if (IsGeometry(argv[i]) == MagickFalse)
  2439. ThrowConvertInvalidArgumentException(option,argv[i]);
  2440. break;
  2441. }
  2442. if (LocaleCompare("sharpen",option+1) == 0)
  2443. {
  2444. i++;
  2445. if (i == (ssize_t) (argc-1))
  2446. ThrowConvertException(OptionError,"MissingArgument",option);
  2447. if (IsGeometry(argv[i]) == MagickFalse)
  2448. ThrowConvertInvalidArgumentException(option,argv[i]);
  2449. break;
  2450. }
  2451. if (LocaleCompare("shave",option+1) == 0)
  2452. {
  2453. if (*option == '+')
  2454. break;
  2455. i++;
  2456. if (i == (ssize_t) (argc-1))
  2457. ThrowConvertException(OptionError,"MissingArgument",option);
  2458. if (IsGeometry(argv[i]) == MagickFalse)
  2459. ThrowConvertInvalidArgumentException(option,argv[i]);
  2460. break;
  2461. }
  2462. if (LocaleCompare("shear",option+1) == 0)
  2463. {
  2464. i++;
  2465. if (i == (ssize_t) (argc-1))
  2466. ThrowConvertException(OptionError,"MissingArgument",option);
  2467. if (IsGeometry(argv[i]) == MagickFalse)
  2468. ThrowConvertInvalidArgumentException(option,argv[i]);
  2469. break;
  2470. }
  2471. if (LocaleCompare("sigmoidal-contrast",option+1) == 0)
  2472. {
  2473. i++;
  2474. if (i == (ssize_t) (argc-1))
  2475. ThrowConvertException(OptionError,"MissingArgument",option);
  2476. if (IsGeometry(argv[i]) == MagickFalse)
  2477. ThrowConvertInvalidArgumentException(option,argv[i]);
  2478. break;
  2479. }
  2480. if (LocaleCompare("size",option+1) == 0)
  2481. {
  2482. if (*option == '+')
  2483. break;
  2484. i++;
  2485. if (i == (ssize_t) (argc-1))
  2486. ThrowConvertException(OptionError,"MissingArgument",option);
  2487. if (IsGeometry(argv[i]) == MagickFalse)
  2488. ThrowConvertInvalidArgumentException(option,argv[i]);
  2489. break;
  2490. }
  2491. if (LocaleCompare("sketch",option+1) == 0)
  2492. {
  2493. if (*option == '+')
  2494. break;
  2495. i++;
  2496. if (i == (ssize_t) (argc-1))
  2497. ThrowConvertException(OptionError,"MissingArgument",option);
  2498. if (IsGeometry(argv[i]) == MagickFalse)
  2499. ThrowConvertInvalidArgumentException(option,argv[i]);
  2500. break;
  2501. }
  2502. if (LocaleCompare("solarize",option+1) == 0)
  2503. {
  2504. if (*option == '+')
  2505. break;
  2506. i++;
  2507. if (i == (ssize_t) (argc-1))
  2508. ThrowConvertException(OptionError,"MissingArgument",option);
  2509. if (IsGeometry(argv[i]) == MagickFalse)
  2510. ThrowConvertInvalidArgumentException(option,argv[i]);
  2511. break;
  2512. }
  2513. if (LocaleCompare("sparse-color",option+1) == 0)
  2514. {
  2515. ssize_t
  2516. op;
  2517. i++;
  2518. if (i == (ssize_t) argc)
  2519. ThrowConvertException(OptionError,"MissingArgument",option);
  2520. op=ParseMagickOption(MagickSparseColorOptions,MagickFalse,argv[i]);
  2521. if (op < 0)
  2522. ThrowConvertException(OptionError,"UnrecognizedSparseColorMethod",
  2523. argv[i]);
  2524. i++;
  2525. if (i == (ssize_t) (argc-1))
  2526. ThrowConvertException(OptionError,"MissingArgument",option);
  2527. break;
  2528. }
  2529. if (LocaleCompare("splice",option+1) == 0)
  2530. {
  2531. if (*option == '+')
  2532. break;
  2533. i++;
  2534. if (i == (ssize_t) (argc-1))
  2535. ThrowConvertException(OptionError,"MissingArgument",option);
  2536. if (IsGeometry(argv[i]) == MagickFalse)
  2537. ThrowConvertInvalidArgumentException(option,argv[i]);
  2538. break;
  2539. }
  2540. if (LocaleCompare("spread",option+1) == 0)
  2541. {
  2542. if (*option == '+')
  2543. break;
  2544. i++;
  2545. if ((i == (ssize_t) (argc-1)) ||
  2546. (IsGeometry(argv[i]) == MagickFalse))
  2547. ThrowConvertException(OptionError,"MissingArgument",option);
  2548. break;
  2549. }
  2550. if (LocaleCompare("stretch",option+1) == 0)
  2551. {
  2552. ssize_t
  2553. stretch;
  2554. if (*option == '+')
  2555. break;
  2556. i++;
  2557. if (i == (ssize_t) (argc-1))
  2558. ThrowConvertException(OptionError,"MissingArgument",option);
  2559. stretch=ParseMagickOption(MagickStretchOptions,MagickFalse,
  2560. argv[i]);
  2561. if (stretch < 0)
  2562. ThrowConvertException(OptionError,"UnrecognizedStyleType",
  2563. argv[i]);
  2564. break;
  2565. }
  2566. if (LocaleCompare("strip",option+1) == 0)
  2567. break;
  2568. if (LocaleCompare("stroke",option+1) == 0)
  2569. {
  2570. if (*option == '+')
  2571. break;
  2572. i++;
  2573. if (i == (ssize_t) (argc-1))
  2574. ThrowConvertException(OptionError,"MissingArgument",option);
  2575. break;
  2576. }
  2577. if (LocaleCompare("strokewidth",option+1) == 0)
  2578. {
  2579. if (*option == '+')
  2580. break;
  2581. i++;
  2582. if (i == (ssize_t) (argc-1))
  2583. ThrowConvertException(OptionError,"MissingArgument",option);
  2584. if (IsGeometry(argv[i]) == MagickFalse)
  2585. ThrowConvertInvalidArgumentException(option,argv[i]);
  2586. break;
  2587. }
  2588. if (LocaleCompare("style",option+1) == 0)
  2589. {
  2590. ssize_t
  2591. style;
  2592. if (*option == '+')
  2593. break;
  2594. i++;
  2595. if (i == (ssize_t) (argc-1))
  2596. ThrowConvertException(OptionError,"MissingArgument",option);
  2597. style=ParseMagickOption(MagickStyleOptions,MagickFalse,argv[i]);
  2598. if (style < 0)
  2599. ThrowConvertException(OptionError,"UnrecognizedStyleType",
  2600. argv[i]);
  2601. break;
  2602. }
  2603. if (LocaleCompare("support",option+1) == 0)
  2604. {
  2605. i++; /* deprecated */
  2606. break;
  2607. }
  2608. if (LocaleCompare("swap",option+1) == 0)
  2609. {
  2610. if (*option == '+')
  2611. break;
  2612. i++;
  2613. if (i == (ssize_t) (argc-1))
  2614. ThrowConvertException(OptionError,"MissingArgument",option);
  2615. if (IsGeometry(argv[i]) == MagickFalse)
  2616. ThrowConvertInvalidArgumentException(option,argv[i]);
  2617. break;
  2618. }
  2619. if (LocaleCompare("swirl",option+1) == 0)
  2620. {
  2621. if (*option == '+')
  2622. break;
  2623. i++;
  2624. if (i == (ssize_t) (argc-1))
  2625. ThrowConvertException(OptionError,"MissingArgument",option);
  2626. if (IsGeometry(argv[i]) == MagickFalse)
  2627. ThrowConvertInvalidArgumentException(option,argv[i]);
  2628. break;
  2629. }
  2630. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  2631. }
  2632. case 't':
  2633. {
  2634. if (LocaleCompare("taint",option+1) == 0)
  2635. break;
  2636. if (LocaleCompare("texture",option+1) == 0)
  2637. {
  2638. if (*option == '+')
  2639. break;
  2640. i++;
  2641. if (i == (ssize_t) (argc-1))
  2642. ThrowConvertException(OptionError,"MissingArgument",option);
  2643. break;
  2644. }
  2645. if (LocaleCompare("thumbnail",option+1) == 0)
  2646. {
  2647. if (*option == '+')
  2648. break;
  2649. i++;
  2650. if (i == (ssize_t) (argc-1))
  2651. ThrowConvertException(OptionError,"MissingArgument",option);
  2652. if (IsGeometry(argv[i]) == MagickFalse)
  2653. ThrowConvertInvalidArgumentException(option,argv[i]);
  2654. break;
  2655. }
  2656. if (LocaleCompare("threshold",option+1) == 0)
  2657. {
  2658. if (*option == '+')
  2659. break;
  2660. i++;
  2661. if (i == (ssize_t) (argc-1))
  2662. ThrowConvertException(OptionError,"MissingArgument",option);
  2663. if (IsGeometry(argv[i]) == MagickFalse)
  2664. ThrowConvertInvalidArgumentException(option,argv[i]);
  2665. break;
  2666. }
  2667. if (LocaleCompare("tile",option+1) == 0)
  2668. {
  2669. if (*option == '+')
  2670. break;
  2671. i++;
  2672. if (i == (ssize_t) (argc-1))
  2673. ThrowConvertException(OptionError,"MissingArgument",option);
  2674. break;
  2675. }
  2676. if (LocaleCompare("tile-offset",option+1) == 0)
  2677. {
  2678. if (*option == '+')
  2679. break;
  2680. i++;
  2681. if (i == (ssize_t) (argc-1))
  2682. ThrowConvertException(OptionError,"MissingArgument",option);
  2683. if (IsGeometry(argv[i]) == MagickFalse)
  2684. ThrowConvertInvalidArgumentException(option,argv[i]);
  2685. break;
  2686. }
  2687. if (LocaleCompare("tint",option+1) == 0)
  2688. {
  2689. if (*option == '+')
  2690. break;
  2691. i++;
  2692. if (i == (ssize_t) (argc-1))
  2693. ThrowConvertException(OptionError,"MissingArgument",option);
  2694. if (IsGeometry(argv[i]) == MagickFalse)
  2695. ThrowConvertInvalidArgumentException(option,argv[i]);
  2696. break;
  2697. }
  2698. if (LocaleCompare("transform",option+1) == 0)
  2699. break;
  2700. if (LocaleCompare("transparent",option+1) == 0)
  2701. {
  2702. i++;
  2703. if (i == (ssize_t) (argc-1))
  2704. ThrowConvertException(OptionError,"MissingArgument",option);
  2705. break;
  2706. }
  2707. if (LocaleCompare("transparent-color",option+1) == 0)
  2708. {
  2709. if (*option == '+')
  2710. break;
  2711. i++;
  2712. if (i == (ssize_t) (argc-1))
  2713. ThrowConvertException(OptionError,"MissingArgument",option);
  2714. break;
  2715. }
  2716. if (LocaleCompare("transpose",option+1) == 0)
  2717. break;
  2718. if (LocaleCompare("transverse",option+1) == 0)
  2719. break;
  2720. if (LocaleCompare("treedepth",option+1) == 0)
  2721. {
  2722. if (*option == '+')
  2723. break;
  2724. i++;
  2725. if (i == (ssize_t) (argc-1))
  2726. ThrowConvertException(OptionError,"MissingArgument",option);
  2727. if (IsGeometry(argv[i]) == MagickFalse)
  2728. ThrowConvertInvalidArgumentException(option,argv[i]);
  2729. break;
  2730. }
  2731. if (LocaleCompare("trim",option+1) == 0)
  2732. break;
  2733. if (LocaleCompare("type",option+1) == 0)
  2734. {
  2735. ssize_t
  2736. type;
  2737. if (*option == '+')
  2738. break;
  2739. i++;
  2740. if (i == (ssize_t) (argc-1))
  2741. ThrowConvertException(OptionError,"MissingArgument",option);
  2742. type=ParseMagickOption(MagickTypeOptions,MagickFalse,argv[i]);
  2743. if (type < 0)
  2744. ThrowConvertException(OptionError,"UnrecognizedImageType",
  2745. argv[i]);
  2746. break;
  2747. }
  2748. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  2749. }
  2750. case 'u':
  2751. {
  2752. if (LocaleCompare("undercolor",option+1) == 0)
  2753. {
  2754. if (*option == '+')
  2755. break;
  2756. i++;
  2757. if (i == (ssize_t) (argc-1))
  2758. ThrowConvertException(OptionError,"MissingArgument",option);
  2759. break;
  2760. }
  2761. if (LocaleCompare("unique-colors",option+1) == 0)
  2762. break;
  2763. if (LocaleCompare("units",option+1) == 0)
  2764. {
  2765. ssize_t
  2766. units;
  2767. if (*option == '+')
  2768. break;
  2769. i++;
  2770. if (i == (ssize_t) (argc-1))
  2771. ThrowConvertException(OptionError,"MissingArgument",option);
  2772. units=ParseMagickOption(MagickResolutionOptions,MagickFalse,
  2773. argv[i]);
  2774. if (units < 0)
  2775. ThrowConvertException(OptionError,"UnrecognizedUnitsType",
  2776. argv[i]);
  2777. break;
  2778. }
  2779. if (LocaleCompare("unsharp",option+1) == 0)
  2780. {
  2781. if (*option == '+')
  2782. break;
  2783. i++;
  2784. if (i == (ssize_t) (argc-1))
  2785. ThrowConvertException(OptionError,"MissingArgument",option);
  2786. if (IsGeometry(argv[i]) == MagickFalse)
  2787. ThrowConvertInvalidArgumentException(option,argv[i]);
  2788. break;
  2789. }
  2790. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  2791. }
  2792. case 'v':
  2793. {
  2794. if (LocaleCompare("verbose",option+1) == 0)
  2795. break;
  2796. if ((LocaleCompare("version",option+1) == 0) ||
  2797. (LocaleCompare("-version",option+1) == 0))
  2798. {
  2799. (void) fprintf(stdout,"Version: %s\n",
  2800. GetMagickVersion((size_t *) NULL));
  2801. (void) fprintf(stdout,"Copyright: %s\n",GetMagickCopyright());
  2802. (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures());
  2803. break;
  2804. }
  2805. if (LocaleCompare("view",option+1) == 0)
  2806. {
  2807. if (*option == '+')
  2808. break;
  2809. i++;
  2810. if (i == (ssize_t) (argc-1))
  2811. ThrowConvertException(OptionError,"MissingArgument",option);
  2812. break;
  2813. }
  2814. if (LocaleCompare("vignette",option+1) == 0)
  2815. {
  2816. if (*option == '+')
  2817. break;
  2818. i++;
  2819. if (i == (ssize_t) (argc-1))
  2820. ThrowConvertException(OptionError,"MissingArgument",option);
  2821. if (IsGeometry(argv[i]) == MagickFalse)
  2822. ThrowConvertInvalidArgumentException(option,argv[i]);
  2823. break;
  2824. }
  2825. if (LocaleCompare("virtual-pixel",option+1) == 0)
  2826. {
  2827. ssize_t
  2828. method;
  2829. if (*option == '+')
  2830. break;
  2831. i++;
  2832. if (i == (ssize_t) (argc-1))
  2833. ThrowConvertException(OptionError,"MissingArgument",option);
  2834. method=ParseMagickOption(MagickVirtualPixelOptions,MagickFalse,
  2835. argv[i]);
  2836. if (method < 0)
  2837. ThrowConvertException(OptionError,
  2838. "UnrecognizedVirtualPixelMethod",argv[i]);
  2839. break;
  2840. }
  2841. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  2842. }
  2843. case 'w':
  2844. {
  2845. if (LocaleCompare("wave",option+1) == 0)
  2846. {
  2847. i++;
  2848. if (i == (ssize_t) (argc-1))
  2849. ThrowConvertException(OptionError,"MissingArgument",option);
  2850. if (IsGeometry(argv[i]) == MagickFalse)
  2851. ThrowConvertInvalidArgumentException(option,argv[i]);
  2852. break;
  2853. }
  2854. if (LocaleCompare("weight",option+1) == 0)
  2855. {
  2856. if (*option == '+')
  2857. break;
  2858. i++;
  2859. if (i == (ssize_t) (argc-1))
  2860. ThrowConvertException(OptionError,"MissingArgument",option);
  2861. break;
  2862. }
  2863. if (LocaleCompare("white-point",option+1) == 0)
  2864. {
  2865. if (*option == '+')
  2866. break;
  2867. i++;
  2868. if (i == (ssize_t) (argc-1))
  2869. ThrowConvertException(OptionError,"MissingArgument",option);
  2870. if (IsGeometry(argv[i]) == MagickFalse)
  2871. ThrowConvertInvalidArgumentException(option,argv[i]);
  2872. break;
  2873. }
  2874. if (LocaleCompare("white-threshold",option+1) == 0)
  2875. {
  2876. if (*option == '+')
  2877. break;
  2878. i++;
  2879. if (i == (ssize_t) (argc-1))
  2880. ThrowConvertException(OptionError,"MissingArgument",option);
  2881. if (IsGeometry(argv[i]) == MagickFalse)
  2882. ThrowConvertInvalidArgumentException(option,argv[i]);
  2883. break;
  2884. }
  2885. if (LocaleCompare("write",option+1) == 0)
  2886. {
  2887. i++;
  2888. if (i == (ssize_t) (argc-1))
  2889. ThrowConvertException(OptionError,"MissingArgument",option);
  2890. break;
  2891. }
  2892. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  2893. }
  2894. case '?':
  2895. break;
  2896. default:
  2897. ThrowConvertException(OptionError,"UnrecognizedOption",option)
  2898. }
  2899. fire=ParseMagickOption(MagickImageListOptions,MagickFalse,option+1) < 0 ?
  2900. MagickFalse : MagickTrue;
  2901. if (fire != MagickFalse)
  2902. FireImageStack(MagickTrue,MagickTrue,MagickTrue);
  2903. }
  2904. if (k != 0)
  2905. ThrowConvertException(OptionError,"UnbalancedParenthesis",argv[i]);
  2906. if (i-- != (ssize_t) (argc-1))
  2907. ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
  2908. if (image == (Image *) NULL)
  2909. ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
  2910. FinalizeImageSettings(image_info,image,MagickTrue);
  2911. if (image == (Image *) NULL)
  2912. ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
  2913. status&=WriteImages(image_info,image,argv[argc-1],exception);
  2914. if (metadata != (char **) NULL)
  2915. {
  2916. char
  2917. *text;
  2918. text=InterpretImageProperties(image_info,image,format);
  2919. if (text == (char *) NULL)
  2920. ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
  2921. GetExceptionMessage(errno));
  2922. (void) ConcatenateString(&(*metadata),text);
  2923. text=DestroyString(text);
  2924. }
  2925. DestroyConvert();
  2926. return(status != 0 ? MagickTrue : MagickFalse);
  2927. }