PageRenderTime 69ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 1ms

/MagickWand/convert.c

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