PageRenderTime 61ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/ImageMagick-6.3.2/wand/composite.c

https://bitbucket.org/sisko/operation-caribou
C | 1431 lines | 1282 code | 48 blank | 101 comment | 560 complexity | 248682652419e179636736a321ac46ba MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, LGPL-2.1

Large files files are truncated, but you can click here to view the full file

  1. /*
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  3. % %
  4. % %
  5. % %
  6. % CCCC OOO M M PPPP OOO SSSSS IIIII TTTTT EEEEE %
  7. % C O O MM MM P P O O SS I T E %
  8. % C O O M M M PPPP O O SSS I T EEE %
  9. % C O O M M P O O SS I T E %
  10. % CCCC OOO M M P OOO SSSSS IIIII T EEEEE %
  11. % %
  12. % %
  13. % ImageMagick Image Composite Methods %
  14. % %
  15. % Software Design %
  16. % John Cristy %
  17. % July 1992 %
  18. % %
  19. % %
  20. % Copyright 1999-2006 ImageMagick Studio LLC, a non-profit organization %
  21. % dedicated to making software imaging solutions freely available. %
  22. % %
  23. % You may not use this file except in compliance with the License. You may %
  24. % obtain a copy of the License at %
  25. % %
  26. % http://www.imagemagick.org/script/license.php %
  27. % %
  28. % Unless required by applicable law or agreed to in writing, software %
  29. % distributed under the License is distributed on an "AS IS" BASIS, %
  30. % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
  31. % See the License for the specific language governing permissions and %
  32. % limitations under the License. %
  33. % %
  34. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  35. %
  36. %
  37. %
  38. */
  39. /*
  40. Include declarations.
  41. */
  42. #include "wand/studio.h"
  43. #include "wand/MagickWand.h"
  44. #include "wand/mogrify-private.h"
  45. /*
  46. Typedef declarations.
  47. */
  48. typedef struct _CompositeOptions
  49. {
  50. ChannelType
  51. channel;
  52. char
  53. *blend_geometry,
  54. *displace_geometry,
  55. *dissolve_geometry,
  56. *geometry,
  57. *unsharp_geometry,
  58. *watermark_geometry;
  59. CompositeOperator
  60. compose;
  61. GravityType
  62. gravity;
  63. long
  64. stegano;
  65. MagickBooleanType
  66. stereo,
  67. tile;
  68. } CompositeOptions;
  69. /*
  70. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  71. % %
  72. % %
  73. % %
  74. % C o m p o s i t e I m a g e C o m m a n d %
  75. % %
  76. % %
  77. % %
  78. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  79. %
  80. % CompositeImageCommand() reads one or more images and an optional mask and
  81. % composites them into a new image.
  82. %
  83. % The format of the CompositeImageCommand method is:
  84. %
  85. % MagickBooleanType CompositeImageCommand(ImageInfo *image_info,int argc,
  86. % char **argv,char **metadata,ExceptionInfo *exception)
  87. %
  88. % A description of each parameter follows:
  89. %
  90. % o image_info: The image info.
  91. %
  92. % o argc: The number of elements in the argument vector.
  93. %
  94. % o argv: A text array containing the command line arguments.
  95. %
  96. % o metadata: any metadata is returned here.
  97. %
  98. % o exception: Return any errors or warnings in this structure.
  99. %
  100. %
  101. */
  102. static MagickBooleanType CompositeImageList(ImageInfo *image_info,Image **image,
  103. Image *composite_image,CompositeOptions *option_info,ExceptionInfo *exception)
  104. {
  105. MagickStatusType
  106. status;
  107. assert(image_info != (ImageInfo *) NULL);
  108. assert(image_info->signature == MagickSignature);
  109. assert(image != (Image **) NULL);
  110. assert((*image)->signature == MagickSignature);
  111. if ((*image)->debug != MagickFalse)
  112. (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",(*image)->filename);
  113. assert(exception != (ExceptionInfo *) NULL);
  114. status=MagickTrue;
  115. if (composite_image != (Image *) NULL)
  116. {
  117. assert(composite_image->signature == MagickSignature);
  118. if (option_info->compose == BlendCompositeOp)
  119. (void) CloneString(&composite_image->geometry,
  120. option_info->blend_geometry);
  121. if (option_info->compose == DisplaceCompositeOp)
  122. (void) CloneString(&composite_image->geometry,
  123. option_info->displace_geometry);
  124. if (option_info->compose == DissolveCompositeOp)
  125. (void) CloneString(&composite_image->geometry,
  126. option_info->dissolve_geometry);
  127. if (option_info->compose == ModulateCompositeOp)
  128. (void) CloneString(&composite_image->geometry,
  129. option_info->watermark_geometry);
  130. if (option_info->compose == ThresholdCompositeOp)
  131. (void) CloneString(&composite_image->geometry,
  132. option_info->unsharp_geometry);
  133. /*
  134. Composite image.
  135. */
  136. if (option_info->stegano != 0)
  137. {
  138. Image
  139. *stegano_image;
  140. (*image)->offset=option_info->stegano-1;
  141. stegano_image=SteganoImage(*image,composite_image,exception);
  142. if (stegano_image != (Image *) NULL)
  143. {
  144. *image=DestroyImageList(*image);
  145. *image=stegano_image;
  146. }
  147. }
  148. else
  149. if (option_info->stereo != MagickFalse)
  150. {
  151. Image
  152. *stereo_image;
  153. stereo_image=StereoImage(*image,composite_image,exception);
  154. if (stereo_image != (Image *) NULL)
  155. {
  156. *image=DestroyImageList(*image);
  157. *image=stereo_image;
  158. }
  159. }
  160. else
  161. if (option_info->tile != MagickFalse)
  162. {
  163. long
  164. x,
  165. y;
  166. unsigned long
  167. columns;
  168. /*
  169. Tile the composite image.
  170. */
  171. (void) SetImageProperty(composite_image,
  172. "[modify-outside-overlay]","false");
  173. columns=composite_image->columns;
  174. for (y=0; y < (long) (*image)->rows; y+=composite_image->rows)
  175. for (x=0; x < (long) (*image)->columns; x+=columns)
  176. status&=CompositeImageChannel(*image,option_info->channel,
  177. option_info->compose,composite_image,x,y);
  178. GetImageException(*image,exception);
  179. }
  180. else
  181. {
  182. char
  183. composite_geometry[MaxTextExtent];
  184. RectangleInfo
  185. geometry;
  186. /*
  187. Digitally composite image.
  188. */
  189. SetGeometry(*image,&geometry);
  190. (void) ParseAbsoluteGeometry(option_info->geometry,&geometry);
  191. (void) FormatMagickString(composite_geometry,MaxTextExtent,
  192. "%lux%lu%+ld%+ld",composite_image->columns,
  193. composite_image->rows,geometry.x,geometry.y);
  194. (*image)->gravity=(GravityType) option_info->gravity;
  195. (void) ParseGravityGeometry(*image,composite_geometry,&geometry);
  196. status&=CompositeImageChannel(*image,option_info->channel,
  197. option_info->compose,composite_image,geometry.x,geometry.y);
  198. GetImageException(*image,exception);
  199. }
  200. }
  201. return(status != 0 ? MagickTrue : MagickFalse);
  202. }
  203. static void CompositeUsage(void)
  204. {
  205. const char
  206. **p;
  207. static const char
  208. *operators[]=
  209. {
  210. "-blend geometry blend images",
  211. "-colors value preferred number of colors in the image",
  212. "-displace geometry shift image pixels defined by a displacement map",
  213. "-dissolve value dissolve the two images a given percent",
  214. "-extract geometry extract area from image",
  215. "-geometry geometry location of the composite image",
  216. "-help print program options",
  217. "-identify identify the format and characteristics of the image",
  218. "-monochrome transform image to black and white",
  219. "-negate replace every pixel with its complementary color ",
  220. "-profile filename add ICM or IPTC information profile to image",
  221. "-quantize colorspace reduce colors in this colorspace",
  222. "-repage geometry size and location of an image canvas (operator)",
  223. "-rotate degrees apply Paeth rotation to the image",
  224. "-resize geometry resize the image",
  225. "-sharpen geometry sharpen the image",
  226. "-stegano offset hide watermark within an image",
  227. "-stereo combine two image to create a stereo anaglyph",
  228. "-strip strip image of all profiles and comments",
  229. "-thumbnail geometry create a thumbnail of the image",
  230. "-transform affine transform image",
  231. "-type type image type",
  232. "-unsharp geometry sharpen the image",
  233. "-version print version information",
  234. "-watermark geometry percent brightness and saturation of a watermark",
  235. "-write filename write images to this file",
  236. (char *) NULL
  237. },
  238. *settings[]=
  239. {
  240. "-affine matrix affine transform matrix",
  241. "-authenticate value decrypt image with this password",
  242. "-blue-primary point chromaticity blue primary point",
  243. "-channel type apply option to select image channels",
  244. "-colorspace type alternate image colorspace",
  245. "-comment string annotate image with comment",
  246. "-compose operator composite operator",
  247. "-compress type type of pixel compression when writing the image",
  248. "-debug events display copious debugging information",
  249. "-define format:option",
  250. " define one or more image format options",
  251. "-depth value image depth",
  252. "-density geometry horizontal and vertical density of the image",
  253. "-display server get image or font from this X server",
  254. "-dispose method GIF disposal method",
  255. "-dither apply Floyd/Steinberg error diffusion to image",
  256. "-encoding type text encoding type",
  257. "-endian type endianness (MSB or LSB) of the image",
  258. "-filter type use this filter when resizing an image",
  259. "-font name render text with this font",
  260. "-format \"string\" output formatted image characteristics",
  261. "-gravity type which direction to gravitate towards",
  262. "-green-primary point chromaticity green primary point",
  263. "-interlace type type of image interlacing scheme",
  264. "-interpolate method pixel color interpolation method",
  265. "-label string assign a label to an image",
  266. "-limit type value pixel cache resource limit",
  267. "-log format format of debugging information",
  268. "-matte store matte channel if the image has one",
  269. "-monitor monitor progress",
  270. "-page geometry size and location of an image canvas (setting)",
  271. "-quality value JPEG/MIFF/PNG compression level",
  272. "-quiet suppress all error or warning messages",
  273. "-red-primary point chromaticity red primary point",
  274. "-regard-warnings pay attention to warning messages",
  275. "-sampling-factor geometry",
  276. " horizontal and vertical sampling factor",
  277. "-scene value image scene number",
  278. "-size geometry width and height of image",
  279. "-support factor resize support: > 1.0 is blurry, < 1.0 is sharp",
  280. "-transparent-color color",
  281. " transparent color",
  282. "-treedepth value color tree depth",
  283. "-tile repeat composite operation across and down image",
  284. "-units type the units of image resolution",
  285. "-verbose print detailed information about the image",
  286. "-virtual-pixel method",
  287. " virtual pixel access method",
  288. "-white-point point chromaticity white point",
  289. (char *) NULL
  290. };
  291. (void) printf("Version: %s\n",GetMagickVersion((unsigned long *) NULL));
  292. (void) printf("Copyright: %s\n\n",GetMagickCopyright());
  293. (void) printf("Usage: %s [options ...] image [options ...] composite\n"
  294. " [ [options ...] mask ] [options ...] composite\n",
  295. GetClientName());
  296. (void) printf("\nImage Settings:\n");
  297. for (p=settings; *p != (char *) NULL; p++)
  298. (void) printf(" %s\n",*p);
  299. (void) printf("\nImage Operators:\n");
  300. for (p=operators; *p != (char *) NULL; p++)
  301. (void) printf(" %s\n",*p);
  302. (void) printf(
  303. "\nBy default, the image format of `file' is determined by its magic\n");
  304. (void) printf(
  305. "number. To specify a particular image format, precede the filename\n");
  306. (void) printf(
  307. "with an image format name and a colon (i.e. ps:image) or specify the\n");
  308. (void) printf(
  309. "image type as the filename suffix (i.e. image.ps). Specify 'file' as\n");
  310. (void) printf("'-' for standard input or output.\n");
  311. exit(0);
  312. }
  313. static void RelinquishCompositeOptions(CompositeOptions *option_info)
  314. {
  315. if (option_info->blend_geometry != (char *) NULL)
  316. option_info->blend_geometry=(char *)
  317. RelinquishMagickMemory(option_info->blend_geometry);
  318. if (option_info->displace_geometry != (char *) NULL)
  319. option_info->displace_geometry=(char *)
  320. RelinquishMagickMemory(option_info->displace_geometry);
  321. if (option_info->dissolve_geometry != (char *) NULL)
  322. option_info->dissolve_geometry=(char *)
  323. RelinquishMagickMemory(option_info->dissolve_geometry);
  324. if (option_info->geometry != (char *) NULL)
  325. option_info->geometry=(char *)
  326. RelinquishMagickMemory(option_info->geometry);
  327. if (option_info->unsharp_geometry != (char *) NULL)
  328. option_info->unsharp_geometry=(char *)
  329. RelinquishMagickMemory(option_info->unsharp_geometry);
  330. if (option_info->watermark_geometry != (char *) NULL)
  331. option_info->watermark_geometry=(char *)
  332. RelinquishMagickMemory(option_info->watermark_geometry);
  333. }
  334. WandExport MagickBooleanType CompositeImageCommand(ImageInfo *image_info,
  335. int argc,char **argv,char **metadata,ExceptionInfo *exception)
  336. {
  337. #define NotInitialized (unsigned int) (~0)
  338. #define DestroyComposite() \
  339. { \
  340. RelinquishCompositeOptions(&option_info); \
  341. for ( ; k >= 0; k--) \
  342. image_stack[k]=DestroyImageList(image_stack[k]); \
  343. for (i=0; i < (long) argc; i++) \
  344. argv[i]=(char *) RelinquishMagickMemory(argv[i]); \
  345. argv=(char **) RelinquishMagickMemory(argv); \
  346. }
  347. #define ThrowCompositeException(asperity,tag,option) \
  348. { \
  349. (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
  350. option); \
  351. DestroyComposite(); \
  352. return(MagickFalse); \
  353. }
  354. #define ThrowCompositeInvalidArgumentException(option,argument) \
  355. { \
  356. (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
  357. "InvalidArgument","`%s': %s",argument,option); \
  358. DestroyComposite(); \
  359. return(MagickFalse); \
  360. }
  361. char
  362. *filename,
  363. *option;
  364. CompositeOptions
  365. option_info;
  366. const char
  367. *format;
  368. Image
  369. *composite_image,
  370. *image,
  371. *image_stack[MaxImageStackDepth+1],
  372. *mask_image;
  373. MagickBooleanType
  374. fire,
  375. pend;
  376. MagickStatusType
  377. status;
  378. long
  379. j,
  380. k;
  381. register long
  382. i;
  383. /*
  384. Set default.
  385. */
  386. assert(image_info != (ImageInfo *) NULL);
  387. assert(image_info->signature == MagickSignature);
  388. if (image_info->debug != MagickFalse)
  389. (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
  390. assert(exception != (ExceptionInfo *) NULL);
  391. if (argc < 4)
  392. CompositeUsage();
  393. (void) ResetMagickMemory(&option_info,0,sizeof(CompositeOptions));
  394. option_info.compose=OverCompositeOp;
  395. filename=(char *) NULL;
  396. format="%w,%h,%m";
  397. j=1;
  398. k=0;
  399. image_stack[k]=NewImageList();
  400. option=(char *) NULL;
  401. pend=MagickFalse;
  402. status=MagickTrue;
  403. /*
  404. Check command syntax.
  405. */
  406. composite_image=NewImageList();
  407. image=NewImageList();
  408. mask_image=NewImageList();
  409. ReadCommandlLine(argc,&argv);
  410. status=ExpandFilenames(&argc,&argv);
  411. if (status == MagickFalse)
  412. {
  413. char
  414. *message;
  415. message=GetExceptionMessage(errno);
  416. ThrowCompositeException(ResourceLimitError,"MemoryAllocationFailed",
  417. message);
  418. message=(char *) RelinquishMagickMemory(message);
  419. }
  420. for (i=1; i < (long) (argc-1); i++)
  421. {
  422. option=argv[i];
  423. if (LocaleCompare(option,"(") == 0)
  424. {
  425. if (k == MaxImageStackDepth)
  426. ThrowCompositeException(OptionError,"ParenthesisNestedTooDeeply",
  427. option);
  428. MogrifyImageStack(image_stack[k],MagickTrue,pend);
  429. k++;
  430. image_stack[k]=NewImageList();
  431. continue;
  432. }
  433. if (LocaleCompare(option,")") == 0)
  434. {
  435. if (k == 0)
  436. ThrowCompositeException(OptionError,"UnableToParseExpression",option);
  437. if (image_stack[k] != (Image *) NULL)
  438. {
  439. MogrifyImageStack(image_stack[k],MagickTrue,MagickTrue);
  440. AppendImageToList(&image_stack[k-1],image_stack[k]);
  441. }
  442. k--;
  443. continue;
  444. }
  445. if (IsMagickOption(option) == MagickFalse)
  446. {
  447. Image
  448. *image;
  449. /*
  450. Read input image.
  451. */
  452. MogrifyImageStack(image_stack[k],MagickTrue,pend);
  453. filename=argv[i];
  454. if ((LocaleCompare(filename,"--") == 0) && (i < (argc-1)))
  455. filename=argv[++i];
  456. (void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
  457. image=ReadImage(image_info,exception);
  458. status&=(image != (Image *) NULL) &&
  459. (exception->severity < ErrorException);
  460. if (image == (Image *) NULL)
  461. continue;
  462. AppendImageToList(&image_stack[k],image);
  463. continue;
  464. }
  465. pend=image_stack[k] != (Image *) NULL ? MagickTrue : MagickFalse;
  466. switch (*(option+1))
  467. {
  468. case 'a':
  469. {
  470. if (LocaleCompare("affine",option+1) == 0)
  471. {
  472. if (*option == '+')
  473. break;
  474. i++;
  475. if (i == (long) argc)
  476. ThrowCompositeException(OptionError,"MissingArgument",option);
  477. if (IsGeometry(argv[i]) == MagickFalse)
  478. ThrowCompositeInvalidArgumentException(option,argv[i]);
  479. break;
  480. }
  481. if (LocaleCompare("authenticate",option+1) == 0)
  482. {
  483. if (*option == '+')
  484. break;
  485. i++;
  486. if (i == (long) argc)
  487. ThrowCompositeException(OptionError,"MissingArgument",option);
  488. break;
  489. }
  490. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  491. }
  492. case 'b':
  493. {
  494. if (LocaleCompare("background",option+1) == 0)
  495. {
  496. if (*option == '+')
  497. break;
  498. i++;
  499. if (i == (long) argc)
  500. ThrowCompositeException(OptionError,"MissingArgument",option);
  501. break;
  502. }
  503. if (LocaleCompare("blend",option+1) == 0)
  504. {
  505. (void) CloneString(&option_info.blend_geometry,(char *) NULL);
  506. if (*option == '+')
  507. break;
  508. i++;
  509. if (i == (long) argc)
  510. ThrowCompositeException(OptionError,"MissingArgument",option);
  511. if (IsGeometry(argv[i]) == MagickFalse)
  512. ThrowCompositeInvalidArgumentException(option,argv[i]);
  513. (void) CloneString(&option_info.blend_geometry,argv[i]);
  514. option_info.compose=BlendCompositeOp;
  515. break;
  516. }
  517. if (LocaleCompare("blue-primary",option+1) == 0)
  518. {
  519. if (*option == '+')
  520. break;
  521. i++;
  522. if (i == (long) argc)
  523. ThrowCompositeException(OptionError,"MissingArgument",option);
  524. if (IsGeometry(argv[i]) == MagickFalse)
  525. ThrowCompositeInvalidArgumentException(option,argv[i]);
  526. break;
  527. }
  528. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  529. }
  530. case 'c':
  531. {
  532. if (LocaleCompare("cache",option+1) == 0)
  533. {
  534. if (*option == '+')
  535. break;
  536. i++;
  537. if (i == (long) argc)
  538. ThrowCompositeException(OptionError,"MissingArgument",option);
  539. if (IsGeometry(argv[i]) == MagickFalse)
  540. ThrowCompositeInvalidArgumentException(option,argv[i]);
  541. break;
  542. }
  543. if (LocaleCompare("channel",option+1) == 0)
  544. {
  545. long
  546. channel;
  547. if (*option == '+')
  548. {
  549. option_info.channel=DefaultChannels;
  550. break;
  551. }
  552. i++;
  553. if (i == (long) (argc-1))
  554. ThrowCompositeException(OptionError,"MissingArgument",option);
  555. channel=ParseChannelOption(argv[i]);
  556. if (channel < 0)
  557. ThrowCompositeException(OptionError,"UnrecognizedChannelType",
  558. argv[i]);
  559. option_info.channel=(ChannelType) channel;
  560. break;
  561. }
  562. if (LocaleCompare("colors",option+1) == 0)
  563. {
  564. if (*option == '+')
  565. break;
  566. i++;
  567. if (i == (long) argc)
  568. ThrowCompositeException(OptionError,"MissingArgument",option);
  569. if (IsGeometry(argv[i]) == MagickFalse)
  570. ThrowCompositeInvalidArgumentException(option,argv[i]);
  571. break;
  572. }
  573. if (LocaleCompare("colorspace",option+1) == 0)
  574. {
  575. long
  576. colorspace;
  577. if (*option == '+')
  578. break;
  579. i++;
  580. if (i == (long) argc)
  581. ThrowCompositeException(OptionError,"MissingArgument",option);
  582. colorspace=ParseMagickOption(MagickColorspaceOptions,
  583. MagickFalse,argv[i]);
  584. if (colorspace < 0)
  585. ThrowCompositeException(OptionError,"UnrecognizedColorspace",
  586. argv[i]);
  587. break;
  588. }
  589. if (LocaleCompare("comment",option+1) == 0)
  590. {
  591. if (*option == '+')
  592. break;
  593. i++;
  594. if (i == (long) argc)
  595. ThrowCompositeException(OptionError,"MissingArgument",option);
  596. break;
  597. }
  598. if (LocaleCompare("compose",option+1) == 0)
  599. {
  600. long
  601. compose;
  602. option_info.compose=UndefinedCompositeOp;
  603. if (*option == '+')
  604. break;
  605. i++;
  606. if (i == (long) argc)
  607. ThrowCompositeException(OptionError,"MissingArgument",option);
  608. compose=ParseMagickOption(MagickCompositeOptions,MagickFalse,
  609. argv[i]);
  610. if (compose < 0)
  611. ThrowCompositeException(OptionError,
  612. "UnrecognizedComposeOperator",argv[i]);
  613. option_info.compose=(CompositeOperator) compose;
  614. break;
  615. }
  616. if (LocaleCompare("compress",option+1) == 0)
  617. {
  618. long
  619. compression;
  620. if (*option == '+')
  621. break;
  622. i++;
  623. if (i == (long) argc)
  624. ThrowCompositeException(OptionError,"MissingArgument",option);
  625. compression=ParseMagickOption(MagickCompressionOptions,
  626. MagickFalse,argv[i]);
  627. if (compression < 0)
  628. ThrowCompositeException(OptionError,
  629. "UnrecognizedImageCompression",argv[i]);
  630. break;
  631. }
  632. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  633. }
  634. case 'd':
  635. {
  636. if (LocaleCompare("debug",option+1) == 0)
  637. {
  638. long
  639. event;
  640. if (*option == '+')
  641. break;
  642. i++;
  643. if (i == (long) argc)
  644. ThrowCompositeException(OptionError,"MissingArgument",option);
  645. event=ParseMagickOption(MagickLogEventOptions,MagickFalse,argv[i]);
  646. if (event < 0)
  647. ThrowCompositeException(OptionError,"UnrecognizedEventType",
  648. argv[i]);
  649. (void) SetLogEventMask(argv[i]);
  650. break;
  651. }
  652. if (LocaleCompare("define",option+1) == 0)
  653. {
  654. i++;
  655. if (i == (long) argc)
  656. ThrowCompositeException(OptionError,"MissingArgument",option);
  657. if (*option == '+')
  658. {
  659. const char
  660. *define;
  661. define=GetImageOption(image_info,argv[i]);
  662. if (define == (const char *) NULL)
  663. ThrowCompositeException(OptionError,"NoSuchOption",argv[i]);
  664. break;
  665. }
  666. break;
  667. }
  668. if (LocaleCompare("density",option+1) == 0)
  669. {
  670. if (*option == '+')
  671. break;
  672. i++;
  673. if (i == (long) argc)
  674. ThrowCompositeException(OptionError,"MissingArgument",option);
  675. if (IsGeometry(argv[i]) == MagickFalse)
  676. ThrowCompositeInvalidArgumentException(option,argv[i]);
  677. break;
  678. }
  679. if (LocaleCompare("depth",option+1) == 0)
  680. {
  681. if (*option == '+')
  682. break;
  683. i++;
  684. if (i == (long) argc)
  685. ThrowCompositeException(OptionError,"MissingArgument",option);
  686. if (IsGeometry(argv[i]) == MagickFalse)
  687. ThrowCompositeInvalidArgumentException(option,argv[i]);
  688. break;
  689. }
  690. if (LocaleCompare("displace",option+1) == 0)
  691. {
  692. (void) CloneString(&option_info.displace_geometry,(char *) NULL);
  693. if (*option == '+')
  694. break;
  695. i++;
  696. if (i == (long) argc)
  697. ThrowCompositeException(OptionError,"MissingArgument",option);
  698. if (IsGeometry(argv[i]) == MagickFalse)
  699. ThrowCompositeInvalidArgumentException(option,argv[i]);
  700. (void) CloneString(&option_info.displace_geometry,argv[i]);
  701. option_info.compose=DisplaceCompositeOp;
  702. break;
  703. }
  704. if (LocaleCompare("display",option+1) == 0)
  705. {
  706. if (*option == '+')
  707. break;
  708. i++;
  709. if (i == (long) argc)
  710. ThrowCompositeException(OptionError,"MissingArgument",option);
  711. break;
  712. }
  713. if (LocaleCompare("dispose",option+1) == 0)
  714. {
  715. long
  716. dispose;
  717. if (*option == '+')
  718. break;
  719. i++;
  720. if (i == (long) argc)
  721. ThrowCompositeException(OptionError,"MissingArgument",option);
  722. dispose=ParseMagickOption(MagickDisposeOptions,MagickFalse,argv[i]);
  723. if (dispose < 0)
  724. ThrowCompositeException(OptionError,"UnrecognizedDisposeMethod",
  725. argv[i]);
  726. break;
  727. }
  728. if (LocaleCompare("dissolve",option+1) == 0)
  729. {
  730. (void) CloneString(&option_info.dissolve_geometry,(char *) NULL);
  731. if (*option == '+')
  732. break;
  733. i++;
  734. if (i == (long) argc)
  735. ThrowCompositeException(OptionError,"MissingArgument",option);
  736. if (IsGeometry(argv[i]) == MagickFalse)
  737. ThrowCompositeInvalidArgumentException(option,argv[i]);
  738. (void) CloneString(&option_info.dissolve_geometry,argv[i]);
  739. option_info.compose=DissolveCompositeOp;
  740. break;
  741. }
  742. if (LocaleCompare("dither",option+1) == 0)
  743. break;
  744. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  745. }
  746. case 'e':
  747. {
  748. if (LocaleCompare("encoding",option+1) == 0)
  749. {
  750. if (*option == '+')
  751. break;
  752. i++;
  753. if (i == (long) argc)
  754. ThrowCompositeException(OptionError,"MissingArgument",option);
  755. break;
  756. }
  757. if (LocaleCompare("endian",option+1) == 0)
  758. {
  759. long
  760. endian;
  761. if (*option == '+')
  762. break;
  763. i++;
  764. if (i == (long) argc)
  765. ThrowCompositeException(OptionError,"MissingArgument",option);
  766. endian=ParseMagickOption(MagickEndianOptions,MagickFalse,
  767. argv[i]);
  768. if (endian < 0)
  769. ThrowCompositeException(OptionError,"UnrecognizedEndianType",
  770. argv[i]);
  771. break;
  772. }
  773. if (LocaleCompare("extract",option+1) == 0)
  774. {
  775. if (*option == '+')
  776. break;
  777. i++;
  778. if (i == (long) argc)
  779. ThrowCompositeException(OptionError,"MissingArgument",option);
  780. if (IsGeometry(argv[i]) == MagickFalse)
  781. ThrowCompositeInvalidArgumentException(option,argv[i]);
  782. break;
  783. }
  784. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  785. }
  786. case 'f':
  787. {
  788. if (LocaleCompare("filter",option+1) == 0)
  789. {
  790. long
  791. filter;
  792. if (*option == '+')
  793. break;
  794. i++;
  795. if (i == (long) argc)
  796. ThrowCompositeException(OptionError,"MissingArgument",option);
  797. filter=ParseMagickOption(MagickFilterOptions,MagickFalse,
  798. argv[i]);
  799. if (filter < 0)
  800. ThrowCompositeException(OptionError,"UnrecognizedImageFilter",
  801. argv[i]);
  802. break;
  803. }
  804. if (LocaleCompare("font",option+1) == 0)
  805. {
  806. if (*option == '+')
  807. break;
  808. i++;
  809. if (i == (long) argc)
  810. ThrowCompositeException(OptionError,"MissingArgument",option);
  811. break;
  812. }
  813. if (LocaleCompare("format",option+1) == 0)
  814. {
  815. if (*option == '+')
  816. break;
  817. i++;
  818. if (i == (long) argc)
  819. ThrowCompositeException(OptionError,"MissingArgument",option);
  820. format=argv[i];
  821. break;
  822. }
  823. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  824. }
  825. case 'g':
  826. {
  827. if (LocaleCompare("geometry",option+1) == 0)
  828. {
  829. (void) CloneString(&option_info.geometry,(char *) NULL);
  830. if (*option == '+')
  831. break;
  832. i++;
  833. if (i == (long) argc)
  834. ThrowCompositeException(OptionError,"MissingArgument",option);
  835. if (IsGeometry(argv[i]) == MagickFalse)
  836. ThrowCompositeInvalidArgumentException(option,argv[i]);
  837. (void) CloneString(&option_info.geometry,argv[i]);
  838. break;
  839. }
  840. if (LocaleCompare("gravity",option+1) == 0)
  841. {
  842. long
  843. gravity;
  844. option_info.gravity=UndefinedGravity;
  845. if (*option == '+')
  846. break;
  847. i++;
  848. if (i == (long) argc)
  849. ThrowCompositeException(OptionError,"MissingArgument",option);
  850. gravity=ParseMagickOption(MagickGravityOptions,MagickFalse,
  851. argv[i]);
  852. if (gravity < 0)
  853. ThrowCompositeException(OptionError,"UnrecognizedGravityType",
  854. argv[i]);
  855. option_info.gravity=(GravityType) gravity;
  856. break;
  857. }
  858. if (LocaleCompare("green-primary",option+1) == 0)
  859. {
  860. if (*option == '+')
  861. break;
  862. i++;
  863. if (i == (long) argc)
  864. ThrowCompositeException(OptionError,"MissingArgument",option);
  865. if (IsGeometry(argv[i]) == MagickFalse)
  866. ThrowCompositeInvalidArgumentException(option,argv[i]);
  867. break;
  868. }
  869. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  870. }
  871. case 'h':
  872. {
  873. if ((LocaleCompare("help",option+1) == 0) ||
  874. (LocaleCompare("-help",option+1) == 0))
  875. CompositeUsage();
  876. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  877. }
  878. case 'i':
  879. {
  880. if (LocaleCompare("identify",option+1) == 0)
  881. break;
  882. if (LocaleCompare("interlace",option+1) == 0)
  883. {
  884. long
  885. interlace;
  886. if (*option == '+')
  887. break;
  888. i++;
  889. if (i == (long) argc)
  890. ThrowCompositeException(OptionError,"MissingArgument",option);
  891. interlace=ParseMagickOption(MagickInterlaceOptions,MagickFalse,
  892. argv[i]);
  893. if (interlace < 0)
  894. ThrowCompositeException(OptionError,
  895. "UnrecognizedInterlaceType",argv[i]);
  896. break;
  897. }
  898. if (LocaleCompare("interpolate",option+1) == 0)
  899. {
  900. long
  901. interpolate;
  902. if (*option == '+')
  903. break;
  904. i++;
  905. if (i == (long) argc)
  906. ThrowCompositeException(OptionError,"MissingArgument",option);
  907. interpolate=ParseMagickOption(MagickInterpolateOptions,MagickFalse,
  908. argv[i]);
  909. if (interpolate < 0)
  910. ThrowCompositeException(OptionError,
  911. "UnrecognizedInterpolateMethod",argv[i]);
  912. break;
  913. }
  914. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  915. }
  916. case 'l':
  917. {
  918. if (LocaleCompare("label",option+1) == 0)
  919. {
  920. if (*option == '+')
  921. break;
  922. i++;
  923. if (i == (long) argc)
  924. ThrowCompositeException(OptionError,"MissingArgument",option);
  925. break;
  926. }
  927. if (LocaleCompare("limit",option+1) == 0)
  928. {
  929. long
  930. resource;
  931. if (*option == '+')
  932. break;
  933. i++;
  934. if (i == (long) argc)
  935. ThrowCompositeException(OptionError,"MissingArgument",option);
  936. resource=ParseMagickOption(MagickResourceOptions,MagickFalse,
  937. argv[i]);
  938. if (resource < 0)
  939. ThrowCompositeException(OptionError,"UnrecognizedResourceType",
  940. argv[i]);
  941. i++;
  942. if (i == (long) argc)
  943. ThrowCompositeException(OptionError,"MissingArgument",option);
  944. if ((LocaleCompare("unlimited",argv[i]) != 0) &&
  945. (IsGeometry(argv[i]) == MagickFalse))
  946. ThrowCompositeInvalidArgumentException(option,argv[i]);
  947. break;
  948. }
  949. if (LocaleCompare("log",option+1) == 0)
  950. {
  951. if (*option == '+')
  952. break;
  953. i++;
  954. if ((i == (long) argc) || (strchr(argv[i],'%') == (char *) NULL))
  955. ThrowCompositeException(OptionError,"MissingArgument",option);
  956. break;
  957. }
  958. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  959. }
  960. case 'm':
  961. {
  962. if (LocaleCompare("matte",option+1) == 0)
  963. break;
  964. if (LocaleCompare("monitor",option+1) == 0)
  965. break;
  966. if (LocaleCompare("monochrome",option+1) == 0)
  967. break;
  968. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  969. }
  970. case 'n':
  971. {
  972. if (LocaleCompare("negate",option+1) == 0)
  973. break;
  974. if (LocaleCompare("noop",option+1) == 0)
  975. break;
  976. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  977. }
  978. case 'p':
  979. {
  980. if (LocaleCompare("page",option+1) == 0)
  981. {
  982. if (*option == '+')
  983. break;
  984. i++;
  985. if (i == (long) argc)
  986. ThrowCompositeException(OptionError,"MissingArgument",option);
  987. break;
  988. }
  989. if (LocaleCompare("process",option+1) == 0)
  990. {
  991. if (*option == '+')
  992. break;
  993. i++;
  994. if (i == (long) argc)
  995. ThrowCompositeException(OptionError,"MissingArgument",option);
  996. break;
  997. }
  998. if (LocaleCompare("profile",option+1) == 0)
  999. {
  1000. i++;
  1001. if (i == (long) argc)
  1002. ThrowCompositeException(OptionError,"MissingArgument",option);
  1003. break;
  1004. }
  1005. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  1006. }
  1007. case 'q':
  1008. {
  1009. if (LocaleCompare("quality",option+1) == 0)
  1010. {
  1011. if (*option == '+')
  1012. break;
  1013. i++;
  1014. if (i == (long) argc)
  1015. ThrowCompositeException(OptionError,"MissingArgument",option);
  1016. if (IsGeometry(argv[i]) == MagickFalse)
  1017. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1018. break;
  1019. }
  1020. if (LocaleCompare("quantize",option+1) == 0)
  1021. {
  1022. long
  1023. colorspace;
  1024. if (*option == '+')
  1025. break;
  1026. i++;
  1027. if (i == (long) (argc-1))
  1028. ThrowCompositeException(OptionError,"MissingArgument",option);
  1029. colorspace=ParseMagickOption(MagickColorspaceOptions,
  1030. MagickFalse,argv[i]);
  1031. if (colorspace < 0)
  1032. ThrowCompositeException(OptionError,"UnrecognizedColorspace",
  1033. argv[i]);
  1034. break;
  1035. }
  1036. if (LocaleCompare("quiet",option+1) == 0)
  1037. break;
  1038. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  1039. }
  1040. case 'r':
  1041. {
  1042. if (LocaleCompare("red-primary",option+1) == 0)
  1043. {
  1044. if (*option == '+')
  1045. break;
  1046. i++;
  1047. if (i == (long) argc)
  1048. ThrowCompositeException(OptionError,"MissingArgument",option);
  1049. if (IsGeometry(argv[i]) == MagickFalse)
  1050. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1051. break;
  1052. }
  1053. if (LocaleCompare("regard-warnings",option+1) == 0)
  1054. break;
  1055. if (LocaleCompare("render",option+1) == 0)
  1056. break;
  1057. if (LocaleCompare("repage",option+1) == 0)
  1058. {
  1059. if (*option == '+')
  1060. break;
  1061. i++;
  1062. if (i == (long) argc)
  1063. ThrowCompositeException(OptionError,"MissingArgument",option);
  1064. if (IsGeometry(argv[i]) == MagickFalse)
  1065. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1066. break;
  1067. }
  1068. if (LocaleCompare("resize",option+1) == 0)
  1069. {
  1070. if (*option == '+')
  1071. break;
  1072. i++;
  1073. if (i == (long) argc)
  1074. ThrowCompositeException(OptionError,"MissingArgument",option);
  1075. if (IsGeometry(argv[i]) == MagickFalse)
  1076. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1077. break;
  1078. }
  1079. if (LocaleCompare("rotate",option+1) == 0)
  1080. {
  1081. i++;
  1082. if (i == (long) argc)
  1083. ThrowCompositeException(OptionError,"MissingArgument",option);
  1084. if (IsGeometry(argv[i]) == MagickFalse)
  1085. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1086. break;
  1087. }
  1088. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  1089. }
  1090. case 's':
  1091. {
  1092. if (LocaleCompare("sampling-factor",option+1) == 0)
  1093. {
  1094. if (*option == '+')
  1095. break;
  1096. i++;
  1097. if (i == (long) argc)
  1098. ThrowCompositeException(OptionError,"MissingArgument",option);
  1099. if (IsGeometry(argv[i]) == MagickFalse)
  1100. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1101. break;
  1102. }
  1103. if (LocaleCompare("scene",option+1) == 0)
  1104. {
  1105. if (*option == '+')
  1106. break;
  1107. i++;
  1108. if (i == (long) argc)
  1109. ThrowCompositeException(OptionError,"MissingArgument",option);
  1110. if (IsGeometry(argv[i]) == MagickFalse)
  1111. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1112. break;
  1113. }
  1114. if (LocaleCompare("sharpen",option+1) == 0)
  1115. {
  1116. i++;
  1117. if (i == (long) argc)
  1118. ThrowCompositeException(OptionError,"MissingArgument",option);
  1119. if (IsGeometry(argv[i]) == MagickFalse)
  1120. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1121. break;
  1122. }
  1123. if (LocaleCompare("size",option+1) == 0)
  1124. {
  1125. if (*option == '+')
  1126. break;
  1127. i++;
  1128. if (i == (long) argc)
  1129. ThrowCompositeException(OptionError,"MissingArgument",option);
  1130. if (IsGeometry(argv[i]) == MagickFalse)
  1131. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1132. break;
  1133. }
  1134. if (LocaleCompare("stegano",option+1) == 0)
  1135. {
  1136. option_info.stegano=0;
  1137. if (*option == '+')
  1138. break;
  1139. i++;
  1140. if (i == (long) argc)
  1141. ThrowCompositeException(OptionError,"MissingArgument",option);
  1142. if (IsGeometry(argv[i]) == MagickFalse)
  1143. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1144. option_info.stegano=atol(argv[i])+1;
  1145. break;
  1146. }
  1147. if (LocaleCompare("stereo",option+1) == 0)
  1148. {
  1149. option_info.stereo=(*option == '-') ? MagickTrue : MagickFalse;
  1150. break;
  1151. }
  1152. if (LocaleCompare("strip",option+1) == 0)
  1153. break;
  1154. if (LocaleCompare("support",option+1) == 0)
  1155. {
  1156. if (*option == '+')
  1157. break;
  1158. i++;
  1159. if (i == (long) argc)
  1160. ThrowCompositeException(OptionError,"MissingArgument",option);
  1161. if (IsGeometry(argv[i]) == MagickFalse)
  1162. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1163. break;
  1164. }
  1165. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  1166. }
  1167. case 't':
  1168. {
  1169. if (LocaleCompare("thumbnail",option+1) == 0)
  1170. {
  1171. if (*option == '+')
  1172. break;
  1173. i++;
  1174. if (i == (long) argc)
  1175. ThrowCompositeException(OptionError,"MissingArgument",option);
  1176. if (IsGeometry(argv[i]) == MagickFalse)
  1177. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1178. break;
  1179. }
  1180. if (LocaleCompare("tile",option+1) == 0)
  1181. {
  1182. option_info.tile=(*option == '-') ? MagickTrue : MagickFalse;
  1183. (void) CopyMagickString(argv[i]+1,"sans0",MaxTextExtent);
  1184. break;
  1185. }
  1186. if (LocaleCompare("transform",option+1) == 0)
  1187. break;
  1188. if (LocaleCompare("transparent-color",option+1) == 0)
  1189. {
  1190. if (*option == '+')
  1191. break;
  1192. i++;
  1193. if (i == (long) (argc-1))
  1194. ThrowCompositeException(OptionError,"MissingArgument",option);
  1195. break;
  1196. }
  1197. if (LocaleCompare("treedepth",option+1) == 0)
  1198. {
  1199. if (*option == '+')
  1200. break;
  1201. i++;
  1202. if (i == (long) argc)
  1203. ThrowCompositeException(OptionError,"MissingArgument",option);
  1204. if (IsGeometry(argv[i]) == MagickFalse)
  1205. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1206. break;
  1207. }
  1208. if (LocaleCompare("type",option+1) == 0)
  1209. {
  1210. long
  1211. type;
  1212. if (*option == '+')
  1213. break;
  1214. i++;
  1215. if (i == (long) argc)
  1216. ThrowCompositeException(OptionError,"MissingArgument",option);
  1217. type=ParseMagickOption(MagickImageOptions,MagickFalse,argv[i]);
  1218. if (type < 0)
  1219. ThrowCompositeException(OptionError,"UnrecognizedImageType",
  1220. argv[i]);
  1221. break;
  1222. }
  1223. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  1224. }
  1225. case 'u':
  1226. {
  1227. if (LocaleCompare("units",option+1) == 0)
  1228. {
  1229. long
  1230. units;
  1231. if (*option == '+')
  1232. break;
  1233. i++;
  1234. if (i == (long) argc)
  1235. ThrowCompositeException(OptionError,"MissingArgument",option);
  1236. units=ParseMagickOption(MagickResolutionOptions,MagickFalse,
  1237. argv[i]);
  1238. if (units < 0)
  1239. ThrowCompositeException(OptionError,"UnrecognizedUnitsType",
  1240. argv[i]);
  1241. break;
  1242. }
  1243. if (LocaleCompare("unsharp",option+1) == 0)
  1244. {
  1245. (void) CloneString(&option_info.unsharp_geometry,(char *) NULL);
  1246. if (*option == '+')
  1247. break;
  1248. i++;
  1249. if (i == (long) argc)
  1250. ThrowCompositeException(OptionError,"MissingArgument",option);
  1251. if (IsGeometry(argv[i]) == MagickFalse)
  1252. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1253. (void) CloneString(&option_info.unsharp_geometry,argv[i]);
  1254. option_info.compose=ThresholdCompositeOp;
  1255. break;
  1256. }
  1257. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  1258. }
  1259. case 'v':
  1260. {
  1261. if (LocaleCompare("verbose",option+1) == 0)
  1262. break;
  1263. if ((LocaleCompare("version",option+1) == 0) ||
  1264. (LocaleCompare("-version",option+1) == 0))
  1265. break;
  1266. if (LocaleCompare("virtual-pixel",option+1) == 0)
  1267. {
  1268. long
  1269. method;
  1270. if (*option == '+')
  1271. break;
  1272. i++;
  1273. if (i == (long) argc)
  1274. ThrowCompositeException(OptionError,"MissingArgument",option);
  1275. method=ParseMagickOption(MagickVirtualPixelOptions,MagickFalse,
  1276. argv[i]);
  1277. if (method < 0)
  1278. ThrowCompositeException(OptionError,
  1279. "UnrecognizedVirtualPixelMethod",argv[i]);
  1280. break;
  1281. }
  1282. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  1283. }
  1284. case 'w':
  1285. {
  1286. if (LocaleCompare("watermark",option+1) == 0)
  1287. {
  1288. (void) CloneString(&option_info.watermark_geometry,(char *) NULL);
  1289. if (*option == '+')
  1290. break;
  1291. i++;
  1292. if (i == (long) argc)
  1293. ThrowCompositeException(OptionError,"MissingArgument",option);
  1294. if (IsGeometry(argv[i]) == MagickFalse)
  1295. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1296. (void) CloneString(&option_info.watermark_geometry,argv[i]);
  1297. option_info.compose=ModulateCompositeOp;
  1298. break;
  1299. }
  1300. if (LocaleCompare("white-point",option+1) == 0)
  1301. {
  1302. if (*option == '+')
  1303. break;
  1304. i++;
  1305. if (i == (long) argc)
  1306. ThrowCompositeException(OptionError,"MissingArgument",option);
  1307. if (IsGeometry(argv[i]) == MagickFalse)
  1308. ThrowCompositeInvalidArgumentException(option,argv[i]);
  1309. break;
  1310. }
  1311. if (LocaleCompare("write",option+1) == 0)
  1312. {
  1313. i++;
  1314. if (i == (long) argc)
  1315. ThrowCompositeException(OptionError,"MissingArgument",option);
  1316. break;
  1317. }
  1318. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  1319. }
  1320. case '?':
  1321. break;
  1322. default:
  1323. ThrowCompositeException(OptionError,"UnrecognizedOption",option)
  1324. }
  1325. fire=(MagickBooleanType) ParseMagickOption(MagickMogrifyOptions,
  1326. MagickFalse,option+1);
  1327. if (fire == MagickTrue)
  1328. MogrifyImageStack(image_stack[k],MagickTrue,MagickTrue);
  1329. }
  1330. if (k != 0)
  1331. ThrowCompositeException(OptionError,"UnbalancedParenthesis",argv[i]);
  1332. if (i-- != (long) (argc-1))
  1333. ThrowCompositeException(OptionError,"MissingAnImageFilename",argv[i]);
  1334. if ((image_stack[k] == (Image *) NULL) ||
  1335. (GetImageListLength(image_stack[k]) < 2))
  1336. ThrowCompositeException(OptionError,"MissingAnImageFilename",argv[argc-1]);
  1337. MogrifyImageStack(image_stack[k],MagickTrue,MagickTrue);
  1338. /*
  1339. Composite images.
  1340. */
  1341. composite_image=RemoveFirstImageFromList(image_stack+k);
  1342. image=RemoveFirstImageFromList(image_stack+k);
  1343. (void) TransformImage(&composite_image,(char *) NULL,
  1344. composite_image->geometry);
  1345. mask_image=RemoveFirstImageFromList(image_stack+k);
  1346. if (mask_image != (Image *) NULL)
  1347. {
  1348. image->mask=mask_image;
  1349. (void) NegateImage(image->mask,MagickFalse);
  1350. }
  1351. sta

Large files files are truncated, but you can click here to view the full file