1/*
2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3%                                                                             %
4%                                                                             %
5%                                                                             %
6%                 M   M   AAA    GGGG  IIIII   CCCC  K   K                    %
7%                 MM MM  A   A  G        I    C      K  K                     %
8%                 M M M  AAAAA  G GGG    I    C      KKK                      %
9%                 M   M  A   A  G   G    I    C      K  K                     %
10%                 M   M  A   A   GGGG  IIIII   CCCC  K   K                    %
11%                                                                             %
12%           PPPP    RRRR     OOO   PPPP   EEEEE  RRRR   TTTTT  Y   Y          %
13%           P   P   R   R   O   O  P   P  E      R   R    T     Y Y           %
14%           PPPP    RRRR    O   O  PPPP   EEE    RRRR     T      Y            %
15%           P       R R     O   O  P      E      R R      T      Y            %
16%           P       R  R     OOO   P      EEEEE  R  R     T      Y            %
17%                                                                             %
18%                                                                             %
19%            Set or Get MagickWand Properties, Options, or Profiles           %
20%                                                                             %
21%                               Software Design                               %
22%                                    Cristy                                   %
23%                                 August 2003                                 %
24%                                                                             %
25%                                                                             %
26%  Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization      %
27%  dedicated to making software imaging solutions freely available.           %
28%                                                                             %
29%  You may not use this file except in compliance with the License.  You may  %
30%  obtain a copy of the License at                                            %
31%                                                                             %
32%    http://www.imagemagick.org/script/license.php                            %
33%                                                                             %
34%  Unless required by applicable law or agreed to in writing, software        %
35%  distributed under the License is distributed on an "AS IS" BASIS,          %
36%  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
37%  See the License for the specific language governing permissions and        %
38%  limitations under the License.                                             %
39%                                                                             %
40%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
41%
42%
43%
44*/
45
46/*
47  Include declarations.
48*/
49#include "MagickWand/studio.h"
50#include "MagickWand/MagickWand.h"
51#include "MagickWand/magick-wand-private.h"
52#include "MagickWand/wand.h"
53#include "MagickCore/string-private.h"
54
55/*
56%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
57%                                                                             %
58%                                                                             %
59%                                                                             %
60%   M a g i c k D e l e t e I m a g e A r t i f a c t                         %
61%                                                                             %
62%                                                                             %
63%                                                                             %
64%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65%
66%  MagickDeleteImageArtifact() deletes a wand artifact.
67%
68%  The format of the MagickDeleteImageArtifact method is:
69%
70%      MagickBooleanType MagickDeleteImageArtifact(MagickWand *wand,
71%        const char *artifact)
72%
73%  A description of each parameter follows:
74%
75%    o image: the image.
76%
77%    o artifact: the image artifact.
78%
79*/
80WandExport MagickBooleanType MagickDeleteImageArtifact(MagickWand *wand,
81  const char *artifact)
82{
83  assert(wand != (MagickWand *) NULL);
84  assert(wand->signature == MagickWandSignature);
85  if (wand->debug != MagickFalse)
86    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
87
88  if (wand->images == (Image *) NULL)
89    {
90      (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
91        "ContainsNoImages","`%s'",wand->name);
92      return(MagickFalse);
93    }
94  return(DeleteImageArtifact(wand->images,artifact));
95}
96
97/*
98%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
99%                                                                             %
100%                                                                             %
101%                                                                             %
102%   M a g i c k D e l e t e I m a g e P r o p e r t y                         %
103%                                                                             %
104%                                                                             %
105%                                                                             %
106%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
107%
108%  MagickDeleteImageProperty() deletes a wand property.
109%
110%  The format of the MagickDeleteImageProperty method is:
111%
112%      MagickBooleanType MagickDeleteImageProperty(MagickWand *wand,
113%        const char *property)
114%
115%  A description of each parameter follows:
116%
117%    o image: the image.
118%
119%    o property: the image property.
120%
121*/
122WandExport MagickBooleanType MagickDeleteImageProperty(MagickWand *wand,
123  const char *property)
124{
125  assert(wand != (MagickWand *) NULL);
126  assert(wand->signature == MagickWandSignature);
127  if (wand->debug != MagickFalse)
128    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
129
130  if (wand->images == (Image *) NULL)
131    {
132      (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
133        "ContainsNoImages","`%s'",wand->name);
134      return(MagickFalse);
135    }
136  return(DeleteImageProperty(wand->images,property));
137}
138
139/*
140%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
141%                                                                             %
142%                                                                             %
143%                                                                             %
144%   M a g i c k D e l e t e O p t i o n                                       %
145%                                                                             %
146%                                                                             %
147%                                                                             %
148%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
149%
150%  MagickDeleteOption() deletes a wand option.
151%
152%  The format of the MagickDeleteOption method is:
153%
154%      MagickBooleanType MagickDeleteOption(MagickWand *wand,
155%        const char *option)
156%
157%  A description of each parameter follows:
158%
159%    o image: the image.
160%
161%    o option: the image option.
162%
163*/
164WandExport MagickBooleanType MagickDeleteOption(MagickWand *wand,
165  const char *option)
166{
167  assert(wand != (MagickWand *) NULL);
168  assert(wand->signature == MagickWandSignature);
169  if (wand->debug != MagickFalse)
170    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
171
172  return(DeleteImageOption(wand->image_info,option));
173}
174
175/*
176%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
177%                                                                             %
178%                                                                             %
179%                                                                             %
180%   M a g i c k G e t A n t i a l i a s                                       %
181%                                                                             %
182%                                                                             %
183%                                                                             %
184%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
185%
186%  MagickGetAntialias() returns the antialias property associated with the
187%  wand.
188%
189%  The format of the MagickGetAntialias method is:
190%
191%      MagickBooleanType MagickGetAntialias(const MagickWand *wand)
192%
193%  A description of each parameter follows:
194%
195%    o wand: the magick wand.
196%
197*/
198WandExport MagickBooleanType MagickGetAntialias(const MagickWand *wand)
199{
200  assert(wand != (const MagickWand *) NULL);
201  assert(wand->signature == MagickWandSignature);
202  if (wand->debug != MagickFalse)
203    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
204
205  return(wand->image_info->antialias);
206}
207
208/*
209%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
210%                                                                             %
211%                                                                             %
212%                                                                             %
213%   M a g i c k G e t B a c k g r o u n d C o l o r                           %
214%                                                                             %
215%                                                                             %
216%                                                                             %
217%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
218%
219%  MagickGetBackgroundColor() returns the wand background color.
220%
221%  The format of the MagickGetBackgroundColor method is:
222%
223%      PixelWand *MagickGetBackgroundColor(MagickWand *wand)
224%
225%  A description of each parameter follows:
226%
227%    o wand: the magick wand.
228%
229*/
230WandExport PixelWand *MagickGetBackgroundColor(MagickWand *wand)
231{
232  PixelWand
233    *background_color;
234
235  assert(wand != (MagickWand *) NULL);
236  assert(wand->signature == MagickWandSignature);
237  if (wand->debug != MagickFalse)
238    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
239
240  background_color=NewPixelWand();
241  PixelSetPixelColor(background_color,&wand->image_info->background_color);
242  return(background_color);
243}
244
245/*
246%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
247%                                                                             %
248%                                                                             %
249%                                                                             %
250%   M a g i c k G e t C o l o r s p a c e                                     %
251%                                                                             %
252%                                                                             %
253%                                                                             %
254%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
255%
256%  MagickGetColorspace() gets the wand colorspace type.
257%
258%  The format of the MagickGetColorspace method is:
259%
260%      ColorspaceType MagickGetColorspace(MagickWand *wand)
261%
262%  A description of each parameter follows:
263%
264%    o wand: the magick wand.
265%
266*/
267WandExport ColorspaceType MagickGetColorspace(MagickWand *wand)
268{
269  assert(wand != (MagickWand *) NULL);
270  assert(wand->signature == MagickWandSignature);
271  if (wand->debug != MagickFalse)
272    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
273
274  return(wand->image_info->colorspace);
275}
276
277/*
278%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
279%                                                                             %
280%                                                                             %
281%                                                                             %
282%   M a g i c k G e t C o m p r e s s i o n                                   %
283%                                                                             %
284%                                                                             %
285%                                                                             %
286%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
287%
288%  MagickGetCompression() gets the wand compression type.
289%
290%  The format of the MagickGetCompression method is:
291%
292%      CompressionType MagickGetCompression(MagickWand *wand)
293%
294%  A description of each parameter follows:
295%
296%    o wand: the magick wand.
297%
298*/
299WandExport CompressionType MagickGetCompression(MagickWand *wand)
300{
301  assert(wand != (MagickWand *) NULL);
302  assert(wand->signature == MagickWandSignature);
303  if (wand->debug != MagickFalse)
304    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
305
306  return(wand->image_info->compression);
307}
308
309/*
310%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
311%                                                                             %
312%                                                                             %
313%                                                                             %
314%   M a g i c k G e t C o m p r e s s i o n Q u a l i t y                     %
315%                                                                             %
316%                                                                             %
317%                                                                             %
318%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
319%
320%  MagickGetCompressionQuality() gets the wand compression quality.
321%
322%  The format of the MagickGetCompressionQuality method is:
323%
324%      size_t MagickGetCompressionQuality(MagickWand *wand)
325%
326%  A description of each parameter follows:
327%
328%    o wand: the magick wand.
329%
330*/
331WandExport size_t MagickGetCompressionQuality(MagickWand *wand)
332{
333  assert(wand != (MagickWand *) NULL);
334  assert(wand->signature == MagickWandSignature);
335  if (wand->debug != MagickFalse)
336    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
337
338  return(wand->image_info->quality);
339}
340
341/*
342%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
343%                                                                             %
344%                                                                             %
345%                                                                             %
346%   M a g i c k G e t C o p y r i g h t                                       %
347%                                                                             %
348%                                                                             %
349%                                                                             %
350%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
351%
352%  MagickGetCopyright() returns the ImageMagick API copyright as a string
353%  constant.
354%
355%  The format of the MagickGetCopyright method is:
356%
357%      const char *MagickGetCopyright(void)
358%
359*/
360WandExport const char *MagickGetCopyright(void)
361{
362  return(GetMagickCopyright());
363}
364
365/*
366%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
367%                                                                             %
368%                                                                             %
369%                                                                             %
370%   M a g i c k G e t F i l e n a m e                                         %
371%                                                                             %
372%                                                                             %
373%                                                                             %
374%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
375%
376%  MagickGetFilename() returns the filename associated with an image sequence.
377%
378%  The format of the MagickGetFilename method is:
379%
380%      const char *MagickGetFilename(const MagickWand *wand)
381%
382%  A description of each parameter follows:
383%
384%    o wand: the magick wand.
385%
386*/
387WandExport char *MagickGetFilename(const MagickWand *wand)
388{
389  assert(wand != (const MagickWand *) NULL);
390  assert(wand->signature == MagickWandSignature);
391  if (wand->debug != MagickFalse)
392    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
393
394  return(AcquireString(wand->image_info->filename));
395}
396
397/*
398%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
399%                                                                             %
400%                                                                             %
401%                                                                             %
402%   M a g i c k G e t F o n t                                                 %
403%                                                                             %
404%                                                                             %
405%                                                                             %
406%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
407%
408%  MagickGetFont() returns the font associated with the MagickWand.
409%
410%  The format of the MagickGetFont method is:
411%
412%      char *MagickGetFont(MagickWand *wand)
413%
414%  A description of each parameter follows:
415%
416%    o wand: the magick wand.
417%
418*/
419WandExport char *MagickGetFont(MagickWand *wand)
420{
421  assert(wand != (MagickWand *) NULL);
422  assert(wand->signature == MagickWandSignature);
423  if (wand->debug != MagickFalse)
424    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
425
426  if (wand->image_info->font == (char *) NULL)
427    return((char *) NULL);
428  return(AcquireString(wand->image_info->font));
429}
430
431/*
432%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
433%                                                                             %
434%                                                                             %
435%                                                                             %
436%   M a g i c k G e t F o r m a t                                             %
437%                                                                             %
438%                                                                             %
439%                                                                             %
440%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
441%
442%  MagickGetFormat() returns the format of the magick wand.
443%
444%  The format of the MagickGetFormat method is:
445%
446%      const char MagickGetFormat(MagickWand *wand)
447%
448%  A description of each parameter follows:
449%
450%    o wand: the magick wand.
451%
452*/
453WandExport char *MagickGetFormat(MagickWand *wand)
454{
455  assert(wand != (MagickWand *) NULL);
456  assert(wand->signature == MagickWandSignature);
457  if (wand->debug != MagickFalse)
458    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
459
460  return(AcquireString(wand->image_info->magick));
461}
462
463/*
464%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
465%                                                                             %
466%                                                                             %
467%                                                                             %
468%   M a g i c k G e t G r a v i t y                                           %
469%                                                                             %
470%                                                                             %
471%                                                                             %
472%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
473%
474%  MagickGetGravity() gets the wand gravity.
475%
476%  The format of the MagickGetGravity method is:
477%
478%      GravityType MagickGetGravity(MagickWand *wand)
479%
480%  A description of each parameter follows:
481%
482%    o wand: the magick wand.
483%
484*/
485WandExport GravityType MagickGetGravity(MagickWand *wand)
486{
487  const char
488    *option;
489
490  GravityType
491    type;
492
493  assert(wand != (MagickWand *) NULL);
494  assert(wand->signature == MagickWandSignature);
495  if (wand->debug != MagickFalse)
496    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
497
498  option=GetImageOption(wand->image_info,"gravity");
499  if (option == (const char *) NULL)
500    return(UndefinedGravity);
501  type=(GravityType) ParseCommandOption(MagickGravityOptions,MagickFalse,option);
502  return(type);
503}
504
505/*
506%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
507%                                                                             %
508%                                                                             %
509%                                                                             %
510%   M a g i c k G e t H o m e U R L                                           %
511%                                                                             %
512%                                                                             %
513%                                                                             %
514%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
515%
516%  MagickGetHomeURL() returns the ImageMagick home URL.
517%
518%  The format of the MagickGetHomeURL method is:
519%
520%      char *MagickGetHomeURL(void)
521%
522*/
523WandExport char *MagickGetHomeURL(void)
524{
525  return(GetMagickHomeURL());
526}
527
528/*
529%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
530%                                                                             %
531%                                                                             %
532%                                                                             %
533%   M a g i c k G e t I m a g e A r t i f a c t                               %
534%                                                                             %
535%                                                                             %
536%                                                                             %
537%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
538%
539%  MagickGetImageArtifact() returns a value associated with the specified
540%  artifact.  Use MagickRelinquishMemory() to free the value when you are
541%  finished with it.
542%
543%  The format of the MagickGetImageArtifact method is:
544%
545%      char *MagickGetImageArtifact(MagickWand *wand,const char *artifact)
546%
547%  A description of each parameter follows:
548%
549%    o wand: the magick wand.
550%
551%    o artifact: the artifact.
552%
553*/
554WandExport char *MagickGetImageArtifact(MagickWand *wand,const char *artifact)
555{
556  const char
557    *value;
558
559  assert(wand != (MagickWand *) NULL);
560  assert(wand->signature == MagickWandSignature);
561  if (wand->debug != MagickFalse)
562    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
563
564  if (wand->images == (Image *) NULL)
565    {
566      (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
567        "ContainsNoImages","`%s'",wand->name);
568      return((char *) NULL);
569    }
570  value=GetImageArtifact(wand->images,artifact);
571  if (value == (const char *) NULL)
572    return((char *) NULL);
573  return(ConstantString(value));
574}
575
576/*
577%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
578%                                                                             %
579%                                                                             %
580%                                                                             %
581%   M a g i c k G e t I m a g e P r o p e r t i e s                           %
582%                                                                             %
583%                                                                             %
584%                                                                             %
585%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
586%
587%  MagickGetImageArtifacts() returns all the artifact names that match the
588%  specified pattern associated with a wand.  Use MagickGetImageProperty() to
589%  return the value of a particular artifact.  Use MagickRelinquishMemory() to
590%  free the value when you are finished with it.
591%
592%  The format of the MagickGetImageArtifacts method is:
593%
594%      char *MagickGetImageArtifacts(MagickWand *wand,
595%        const char *pattern,size_t *number_artifacts)
596%
597%  A description of each parameter follows:
598%
599%    o wand: the magick wand.
600%
601%    o pattern: Specifies a pointer to a text string containing a pattern.
602%
603%    o number_artifacts: the number artifacts associated with this wand.
604%
605*/
606WandExport char **MagickGetImageArtifacts(MagickWand *wand,
607  const char *pattern,size_t *number_artifacts)
608{
609  char
610    **artifacts;
611
612  const char
613    *artifact;
614
615  register ssize_t
616    i;
617
618  size_t
619    length;
620
621  assert(wand != (MagickWand *) NULL);
622  assert(wand->signature == MagickWandSignature);
623  if (wand->debug != MagickFalse)
624    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
625
626  if (wand->images == (Image *) NULL)
627    {
628      (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
629        "ContainsNoImages","`%s'",wand->name);
630      return((char **) NULL);
631    }
632  (void) GetImageProperty(wand->images,"exif:*",wand->exception);
633  length=1024;
634  artifacts=(char **) AcquireQuantumMemory(length,sizeof(*artifacts));
635  if (artifacts == (char **) NULL)
636    return((char **) NULL);
637  ResetImagePropertyIterator(wand->images);
638  artifact=GetNextImageProperty(wand->images);
639  for (i=0; artifact != (const char *) NULL; )
640  {
641    if ((*artifact != '[') &&
642        (GlobExpression(artifact,pattern,MagickFalse) != MagickFalse))
643      {
644        if ((i+1) >= (ssize_t) length)
645          {
646            length<<=1;
647            artifacts=(char **) ResizeQuantumMemory(artifacts,length,
648              sizeof(*artifacts));
649            if (artifacts == (char **) NULL)
650              {
651                (void) ThrowMagickException(wand->exception,GetMagickModule(),
652                  ResourceLimitError,"MemoryAllocationFailed","`%s'",
653                  wand->name);
654                return((char **) NULL);
655              }
656          }
657        artifacts[i]=ConstantString(artifact);
658        i++;
659      }
660    artifact=GetNextImageProperty(wand->images);
661  }
662  artifacts[i]=(char *) NULL;
663  *number_artifacts=(size_t) i;
664  return(artifacts);
665}
666
667/*
668%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
669%                                                                             %
670%                                                                             %
671%                                                                             %
672%   M a g i c k G e t I m a g e P r o f i l e                                 %
673%                                                                             %
674%                                                                             %
675%                                                                             %
676%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
677%
678%  MagickGetImageProfile() returns the named image profile.
679%
680%  The format of the MagickGetImageProfile method is:
681%
682%      unsigned char *MagickGetImageProfile(MagickWand *wand,const char *name,
683%        size_t *length)
684%
685%  A description of each parameter follows:
686%
687%    o wand: the magick wand.
688%
689%    o name: Name of profile to return: ICC, IPTC, or generic profile.
690%
691%    o length: the length of the profile.
692%
693*/
694WandExport unsigned char *MagickGetImageProfile(MagickWand *wand,
695  const char *name,size_t *length)
696{
697  const StringInfo
698    *profile;
699
700  unsigned char
701    *datum;
702
703  assert(wand != (MagickWand *) NULL);
704  assert(wand->signature == MagickWandSignature);
705  if (wand->debug != MagickFalse)
706    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
707
708  if (wand->images == (Image *) NULL)
709    {
710      (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
711        "ContainsNoImages","`%s'",wand->name);
712      return((unsigned char *) NULL);
713    }
714  *length=0;
715  if (wand->images->profiles == (SplayTreeInfo *) NULL)
716    return((unsigned char *) NULL);
717  profile=GetImageProfile(wand->images,name);
718  if (profile == (StringInfo *) NULL)
719    return((unsigned char *) NULL);
720  datum=(unsigned char *) AcquireQuantumMemory(GetStringInfoLength(profile),
721    sizeof(*datum));
722  if (datum == (unsigned char *) NULL)
723    return((unsigned char *) NULL);
724  (void) CopyMagickMemory(datum,GetStringInfoDatum(profile),
725    GetStringInfoLength(profile));
726  *length=(size_t) GetStringInfoLength(profile);
727  return(datum);
728}
729
730/*
731%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
732%                                                                             %
733%                                                                             %
734%                                                                             %
735%   M a g i c k G e t I m a g e P r o f i l e s                               %
736%                                                                             %
737%                                                                             %
738%                                                                             %
739%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
740%
741%  MagickGetImageProfiles() returns all the profile names that match the
742%  specified pattern associated with a wand.  Use MagickGetImageProfile() to
743%  return the value of a particular property.  Use MagickRelinquishMemory() to
744%  free the value when you are finished with it.
745%
746%  The format of the MagickGetImageProfiles method is:
747%
748%      char *MagickGetImageProfiles(MagickWand *wand,const char *pattern,
749%        size_t *number_profiles)
750%
751%  A description of each parameter follows:
752%
753%    o wand: the magick wand.
754%
755%    o pattern: Specifies a pointer to a text string containing a pattern.
756%
757%    o number_profiles: the number profiles associated with this wand.
758%
759*/
760WandExport char **MagickGetImageProfiles(MagickWand *wand,const char *pattern,
761  size_t *number_profiles)
762{
763  char
764    **profiles;
765
766  const char
767    *property;
768
769  register ssize_t
770    i;
771
772  size_t
773    length;
774
775  assert(wand != (MagickWand *) NULL);
776  assert(wand->signature == MagickWandSignature);
777  if (wand->debug != MagickFalse)
778    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
779
780  if (wand->images == (Image *) NULL)
781    {
782      (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
783        "ContainsNoImages","`%s'",wand->name);
784      return((char **) NULL);
785    }
786  (void) GetImageProfile(wand->images,"exif:*");
787  length=1024;
788  profiles=(char **) AcquireQuantumMemory(length,sizeof(*profiles));
789  if (profiles == (char **) NULL)
790    return((char **) NULL);
791  ResetImageProfileIterator(wand->images);
792  property=GetNextImageProfile(wand->images);
793  for (i=0; property != (const char *) NULL; )
794  {
795    if ((*property != '[') &&
796        (GlobExpression(property,pattern,MagickFalse) != MagickFalse))
797      {
798        if ((i+1) >= (ssize_t) length)
799          {
800            length<<=1;
801            profiles=(char **) ResizeQuantumMemory(profiles,length,
802              sizeof(*profiles));
803            if (profiles == (char **) NULL)
804              {
805                (void) ThrowMagickException(wand->exception,GetMagickModule(),
806                  ResourceLimitError,"MemoryAllocationFailed","`%s'",
807                  wand->name);
808                return((char **) NULL);
809              }
810          }
811        profiles[i]=ConstantString(property);
812        i++;
813      }
814    property=GetNextImageProfile(wand->images);
815  }
816  profiles[i]=(char *) NULL;
817  *number_profiles=(size_t) i;
818  return(profiles);
819}
820
821/*
822%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
823%                                                                             %
824%                                                                             %
825%                                                                             %
826%   M a g i c k G e t I m a g e P r o p e r t y                               %
827%                                                                             %
828%                                                                             %
829%                                                                             %
830%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
831%
832%  MagickGetImageProperty() returns a value associated with the specified
833%  property.  Use MagickRelinquishMemory() to free the value when you are
834%  finished with it.
835%
836%  The format of the MagickGetImageProperty method is:
837%
838%      char *MagickGetImageProperty(MagickWand *wand,const char *property)
839%
840%  A description of each parameter follows:
841%
842%    o wand: the magick wand.
843%
844%    o property: the property.
845%
846*/
847WandExport char *MagickGetImageProperty(MagickWand *wand,const char *property)
848{
849  const char
850    *value;
851
852  assert(wand != (MagickWand *) NULL);
853  assert(wand->signature == MagickWandSignature);
854  if (wand->debug != MagickFalse)
855    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
856
857  if (wand->images == (Image *) NULL)
858    {
859      (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
860        "ContainsNoImages","`%s'",wand->name);
861      return((char *) NULL);
862    }
863  value=GetImageProperty(wand->images,property,wand->exception);
864  if (value == (const char *) NULL)
865    return((char *) NULL);
866  return(ConstantString(value));
867}
868
869/*
870%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
871%                                                                             %
872%                                                                             %
873%                                                                             %
874%   M a g i c k G e t I m a g e P r o p e r t i e s                           %
875%                                                                             %
876%                                                                             %
877%                                                                             %
878%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
879%
880%  MagickGetImageProperties() returns all the property names that match the
881%  specified pattern associated with a wand.  Use MagickGetImageProperty() to
882%  return the value of a particular property.  Use MagickRelinquishMemory() to
883%  free the value when you are finished with it.
884%
885%  The format of the MagickGetImageProperties method is:
886%
887%      char *MagickGetImageProperties(MagickWand *wand,
888%        const char *pattern,size_t *number_properties)
889%
890%  A description of each parameter follows:
891%
892%    o wand: the magick wand.
893%
894%    o pattern: Specifies a pointer to a text string containing a pattern.
895%
896%    o number_properties: the number properties associated with this wand.
897%
898*/
899WandExport char **MagickGetImageProperties(MagickWand *wand,
900  const char *pattern,size_t *number_properties)
901{
902  char
903    **properties;
904
905  const char
906    *property;
907
908  register ssize_t
909    i;
910
911  size_t
912    length;
913
914  assert(wand != (MagickWand *) NULL);
915  assert(wand->signature == MagickWandSignature);
916  if (wand->debug != MagickFalse)
917    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
918
919  if (wand->images == (Image *) NULL)
920    {
921      (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
922        "ContainsNoImages","`%s'",wand->name);
923      return((char **) NULL);
924    }
925  (void) GetImageProperty(wand->images,"exif:*",wand->exception);
926  length=1024;
927  properties=(char **) AcquireQuantumMemory(length,sizeof(*properties));
928  if (properties == (char **) NULL)
929    return((char **) NULL);
930  ResetImagePropertyIterator(wand->images);
931  property=GetNextImageProperty(wand->images);
932  for (i=0; property != (const char *) NULL; )
933  {
934    if ((*property != '[') &&
935        (GlobExpression(property,pattern,MagickFalse) != MagickFalse))
936      {
937        if ((i+1) >= (ssize_t) length)
938          {
939            length<<=1;
940            properties=(char **) ResizeQuantumMemory(properties,length,
941              sizeof(*properties));
942            if (properties == (char **) NULL)
943              {
944                (void) ThrowMagickException(wand->exception,GetMagickModule(),
945                  ResourceLimitError,"MemoryAllocationFailed","`%s'",
946                  wand->name);
947                return((char **) NULL);
948              }
949          }
950        properties[i]=ConstantString(property);
951        i++;
952      }
953    property=GetNextImageProperty(wand->images);
954  }
955  properties[i]=(char *) NULL;
956  *number_properties=(size_t) i;
957  return(properties);
958}
959
960/*
961%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
962%                                                                             %
963%                                                                             %
964%                                                                             %
965%   M a g i c k G e t I n t e r l a c e S c h e m e                           %
966%                                                                             %
967%                                                                             %
968%                                                                             %
969%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
970%
971%  MagickGetInterlaceScheme() gets the wand interlace scheme.
972%
973%  The format of the MagickGetInterlaceScheme method is:
974%
975%      InterlaceType MagickGetInterlaceScheme(MagickWand *wand)
976%
977%  A description of each parameter follows:
978%
979%    o wand: the magick wand.
980%
981*/
982WandExport InterlaceType MagickGetInterlaceScheme(MagickWand *wand)
983{
984  assert(wand != (MagickWand *) NULL);
985  assert(wand->signature == MagickWandSignature);
986  if (wand->debug != MagickFalse)
987    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
988
989  return(wand->image_info->interlace);
990}
991
992/*
993%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
994%                                                                             %
995%                                                                             %
996%                                                                             %
997%   M a g i c k G e t I n t e r p o l a t e M e t h o d                       %
998%                                                                             %
999%                                                                             %
1000%                                                                             %
1001%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1002%
1003%  MagickGetInterpolateMethod() gets the wand compression.
1004%
1005%  The format of the MagickGetInterpolateMethod method is:
1006%
1007%      PixelInterpolateMethod MagickGetInterpolateMethod(MagickWand *wand)
1008%
1009%  A description of each parameter follows:
1010%
1011%    o wand: the magick wand.
1012%
1013*/
1014WandExport PixelInterpolateMethod MagickGetInterpolateMethod(MagickWand *wand)
1015{
1016  const char
1017    *option;
1018
1019  PixelInterpolateMethod
1020    method;
1021
1022  assert(wand != (MagickWand *) NULL);
1023  assert(wand->signature == MagickWandSignature);
1024  if (wand->debug != MagickFalse)
1025    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1026
1027  option=GetImageOption(wand->image_info,"interpolate");
1028  if (option == (const char *) NULL)
1029    return(UndefinedInterpolatePixel);
1030  method=(PixelInterpolateMethod) ParseCommandOption(MagickInterpolateOptions,
1031    MagickFalse,option);
1032  return(method);
1033}
1034
1035/*
1036%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1037%                                                                             %
1038%                                                                             %
1039%                                                                             %
1040%   M a g i c k G e t O p t i o n                                             %
1041%                                                                             %
1042%                                                                             %
1043%                                                                             %
1044%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1045%
1046%  MagickGetOption() returns a value associated with a wand and the specified
1047%  key.  Use MagickRelinquishMemory() to free the value when you are finished
1048%  with it.
1049%
1050%  The format of the MagickGetOption method is:
1051%
1052%      char *MagickGetOption(MagickWand *wand,const char *key)
1053%
1054%  A description of each parameter follows:
1055%
1056%    o wand: the magick wand.
1057%
1058%    o key: the key.
1059%
1060*/
1061WandExport char *MagickGetOption(MagickWand *wand,const char *key)
1062{
1063  const char
1064    *option;
1065
1066  assert(wand != (MagickWand *) NULL);
1067  assert(wand->signature == MagickWandSignature);
1068  if (wand->debug != MagickFalse)
1069    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1070
1071  option=GetImageOption(wand->image_info,key);
1072  return(ConstantString(option));
1073}
1074
1075/*
1076%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1077%                                                                             %
1078%                                                                             %
1079%                                                                             %
1080%   M a g i c k G e t O p t i o n s                                           %
1081%                                                                             %
1082%                                                                             %
1083%                                                                             %
1084%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1085%
1086%  MagickGetOptions() returns all the option names that match the specified
1087%  pattern associated with a wand.  Use MagickGetOption() to return the value
1088%  of a particular option.  Use MagickRelinquishMemory() to free the value
1089%  when you are finished with it.
1090%
1091%  The format of the MagickGetOptions method is:
1092%
1093%      char *MagickGetOptions(MagickWand *wand,const char *pattern,
1094%        size_t *number_options)
1095%
1096%  A description of each parameter follows:
1097%
1098%    o wand: the magick wand.
1099%
1100%    o pattern: Specifies a pointer to a text string containing a pattern.
1101%
1102%    o number_options: the number options associated with this wand.
1103%
1104*/
1105WandExport char **MagickGetOptions(MagickWand *wand,const char *pattern,
1106  size_t *number_options)
1107{
1108  char
1109    **options;
1110
1111  const char
1112    *option;
1113
1114  register ssize_t
1115    i;
1116
1117  size_t
1118    length;
1119
1120  assert(wand != (MagickWand *) NULL);
1121  assert(wand->signature == MagickWandSignature);
1122  if (wand->debug != MagickFalse)
1123    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1124
1125  if (wand->images == (Image *) NULL)
1126    {
1127      (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
1128        "ContainsNoImages","`%s'",wand->name);
1129      return((char **) NULL);
1130    }
1131  length=1024;
1132  options=(char **) AcquireQuantumMemory(length,sizeof(*options));
1133  if (options == (char **) NULL)
1134    return((char **) NULL);
1135  ResetImageOptionIterator(wand->image_info);
1136  option=GetNextImageOption(wand->image_info);
1137  for (i=0; option != (const char *) NULL; )
1138  {
1139    if ((*option != '[') &&
1140        (GlobExpression(option,pattern,MagickFalse) != MagickFalse))
1141      {
1142        if ((i+1) >= (ssize_t) length)
1143          {
1144            length<<=1;
1145            options=(char **) ResizeQuantumMemory(options,length,
1146              sizeof(*options));
1147            if (options == (char **) NULL)
1148              {
1149                (void) ThrowMagickException(wand->exception,GetMagickModule(),
1150                  ResourceLimitError,"MemoryAllocationFailed","`%s'",
1151                  wand->name);
1152                return((char **) NULL);
1153              }
1154          }
1155        options[i]=ConstantString(option);
1156        i++;
1157      }
1158    option=GetNextImageOption(wand->image_info);
1159  }
1160  options[i]=(char *) NULL;
1161  *number_options=(size_t) i;
1162  return(options);
1163}
1164
1165/*
1166%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1167%                                                                             %
1168%                                                                             %
1169%                                                                             %
1170%   M a g i c k G e t O r i e n t a t i o n                                   %
1171%                                                                             %
1172%                                                                             %
1173%                                                                             %
1174%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1175%
1176%  MagickGetOrientation() gets the wand orientation type.
1177%
1178%  The format of the MagickGetOrientation method is:
1179%
1180%      OrientationType MagickGetOrientation(MagickWand *wand)
1181%
1182%  A description of each parameter follows:
1183%
1184%    o wand: the magick wand.
1185%
1186*/
1187WandExport OrientationType MagickGetOrientation(MagickWand *wand)
1188{
1189  assert(wand != (MagickWand *) NULL);
1190  assert(wand->signature == MagickWandSignature);
1191  if (wand->debug != MagickFalse)
1192    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1193
1194  return(wand->image_info->orientation);
1195}
1196
1197/*
1198%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1199%                                                                             %
1200%                                                                             %
1201%                                                                             %
1202%   M a g i c k G e t P a c k a g e N a m e                                   %
1203%                                                                             %
1204%                                                                             %
1205%                                                                             %
1206%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1207%
1208%  MagickGetPackageName() returns the ImageMagick package name as a string
1209%  constant.
1210%
1211%  The format of the MagickGetPackageName method is:
1212%
1213%      const char *MagickGetPackageName(void)
1214%
1215%
1216*/
1217WandExport const char *MagickGetPackageName(void)
1218{
1219  return(GetMagickPackageName());
1220}
1221
1222/*
1223%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1224%                                                                             %
1225%                                                                             %
1226%                                                                             %
1227%   M a g i c k G e t P a g e                                                 %
1228%                                                                             %
1229%                                                                             %
1230%                                                                             %
1231%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1232%
1233%  MagickGetPage() returns the page geometry associated with the magick wand.
1234%
1235%  The format of the MagickGetPage method is:
1236%
1237%      MagickBooleanType MagickGetPage(const MagickWand *wand,
1238%        size_t *width,size_t *height,ssize_t *x,ssize_t *y)
1239%
1240%  A description of each parameter follows:
1241%
1242%    o wand: the magick wand.
1243%
1244%    o width: the page width.
1245%
1246%    o height: page height.
1247%
1248%    o x: the page x-offset.
1249%
1250%    o y: the page y-offset.
1251%
1252*/
1253WandExport MagickBooleanType MagickGetPage(const MagickWand *wand,
1254  size_t *width,size_t *height,ssize_t *x,ssize_t *y)
1255{
1256  RectangleInfo
1257    geometry;
1258
1259  assert(wand != (const MagickWand *) NULL);
1260  assert(wand->signature == MagickWandSignature);
1261  if (wand->debug != MagickFalse)
1262    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1263
1264  (void) ResetMagickMemory(&geometry,0,sizeof(geometry));
1265  (void) ParseAbsoluteGeometry(wand->image_info->page,&geometry);
1266  *width=geometry.width;
1267  *height=geometry.height;
1268  *x=geometry.x;
1269  *y=geometry.y;
1270  return(MagickTrue);
1271}
1272
1273/*
1274%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1275%                                                                             %
1276%                                                                             %
1277%                                                                             %
1278%   M a g i c k G e t P o i n t s i z e                                       %
1279%                                                                             %
1280%                                                                             %
1281%                                                                             %
1282%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1283%
1284%  MagickGetPointsize() returns the font pointsize associated with the
1285%  MagickWand.
1286%
1287%  The format of the MagickGetPointsize method is:
1288%
1289%      double MagickGetPointsize(MagickWand *wand)
1290%
1291%  A description of each parameter follows:
1292%
1293%    o wand: the magick wand.
1294%
1295*/
1296WandExport double MagickGetPointsize(MagickWand *wand)
1297{
1298  assert(wand != (MagickWand *) NULL);
1299  assert(wand->signature == MagickWandSignature);
1300  if (wand->debug != MagickFalse)
1301    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1302
1303  return(wand->image_info->pointsize);
1304}
1305
1306/*
1307%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1308%                                                                             %
1309%                                                                             %
1310%                                                                             %
1311%   M a g i c k G e t Q u a n t u m D e p t h                                 %
1312%                                                                             %
1313%                                                                             %
1314%                                                                             %
1315%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1316%
1317%  MagickGetQuantumDepth() returns the ImageMagick quantum depth as a string
1318%  constant.
1319%
1320%  The format of the MagickGetQuantumDepth method is:
1321%
1322%      const char *MagickGetQuantumDepth(size_t *depth)
1323%
1324%  A description of each parameter follows:
1325%
1326%    o depth: the quantum depth is returned as a number.
1327%
1328*/
1329WandExport const char *MagickGetQuantumDepth(size_t *depth)
1330{
1331  return(GetMagickQuantumDepth(depth));
1332}
1333
1334/*
1335%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1336%                                                                             %
1337%                                                                             %
1338%                                                                             %
1339%   M a g i c k G e t Q u a n t u m R a n g e                                 %
1340%                                                                             %
1341%                                                                             %
1342%                                                                             %
1343%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1344%
1345%  MagickGetQuantumRange() returns the ImageMagick quantum range as a string
1346%  constant.
1347%
1348%  The format of the MagickGetQuantumRange method is:
1349%
1350%      const char *MagickGetQuantumRange(size_t *range)
1351%
1352%  A description of each parameter follows:
1353%
1354%    o range: the quantum range is returned as a number.
1355%
1356*/
1357WandExport const char *MagickGetQuantumRange(size_t *range)
1358{
1359  return(GetMagickQuantumRange(range));
1360}
1361
1362/*
1363%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1364%                                                                             %
1365%                                                                             %
1366%                                                                             %
1367%   M a g i c k G e t R e l e a s e D a t e                                   %
1368%                                                                             %
1369%                                                                             %
1370%                                                                             %
1371%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1372%
1373%  MagickGetReleaseDate() returns the ImageMagick release date as a string
1374%  constant.
1375%
1376%  The format of the MagickGetReleaseDate method is:
1377%
1378%      const char *MagickGetReleaseDate(void)
1379%
1380*/
1381WandExport const char *MagickGetReleaseDate(void)
1382{
1383  return(GetMagickReleaseDate());
1384}
1385
1386/*
1387%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1388%                                                                             %
1389%                                                                             %
1390%                                                                             %
1391%   M a g i c k G e t R e s o l u t i o n                                     %
1392%                                                                             %
1393%                                                                             %
1394%                                                                             %
1395%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1396%
1397%  MagickGetResolution() gets the image X and Y resolution.
1398%
1399%  The format of the MagickGetResolution method is:
1400%
1401%      MagickBooleanType MagickGetResolution(const MagickWand *wand,double *x,
1402%        double *y)
1403%
1404%  A description of each parameter follows:
1405%
1406%    o wand: the magick wand.
1407%
1408%    o x: the x-resolution.
1409%
1410%    o y: the y-resolution.
1411%
1412*/
1413WandExport MagickBooleanType MagickGetResolution(const MagickWand *wand,
1414  double *x,double *y)
1415{
1416  assert(wand != (MagickWand *) NULL);
1417  assert(wand->signature == MagickWandSignature);
1418  if (wand->debug != MagickFalse)
1419    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1420
1421  *x=72.0;
1422  *y=72.0;
1423  if (wand->image_info->density != (char *) NULL)
1424    {
1425      GeometryInfo
1426        geometry_info;
1427
1428      MagickStatusType
1429        flags;
1430
1431      flags=ParseGeometry(wand->image_info->density,&geometry_info);
1432      *x=geometry_info.rho;
1433      *y=geometry_info.sigma;
1434      if ((flags & SigmaValue) == 0)
1435        *y=(*x);
1436    }
1437  return(MagickTrue);
1438}
1439
1440/*
1441%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1442%                                                                             %
1443%                                                                             %
1444%                                                                             %
1445%   M a g i c k G e t R e s o u r c e                                         %
1446%                                                                             %
1447%                                                                             %
1448%                                                                             %
1449%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1450%
1451%  MagickGetResource() returns the specified resource in megabytes.
1452%
1453%  The format of the MagickGetResource method is:
1454%
1455%      MagickSizeType MagickGetResource(const ResourceType type)
1456%
1457%  A description of each parameter follows:
1458%
1459%    o wand: the magick wand.
1460%
1461*/
1462WandExport MagickSizeType MagickGetResource(const ResourceType type)
1463{
1464  return(GetMagickResource(type));
1465}
1466
1467/*
1468%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1469%                                                                             %
1470%                                                                             %
1471%                                                                             %
1472%   M a g i c k G e t R e s o u r c e L i m i t                               %
1473%                                                                             %
1474%                                                                             %
1475%                                                                             %
1476%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1477%
1478%  MagickGetResourceLimit() returns the specified resource limit in megabytes.
1479%
1480%  The format of the MagickGetResourceLimit method is:
1481%
1482%      MagickSizeType MagickGetResourceLimit(const ResourceType type)
1483%
1484%  A description of each parameter follows:
1485%
1486%    o wand: the magick wand.
1487%
1488*/
1489WandExport MagickSizeType MagickGetResourceLimit(const ResourceType type)
1490{
1491  return(GetMagickResourceLimit(type));
1492}
1493
1494/*
1495%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1496%                                                                             %
1497%                                                                             %
1498%                                                                             %
1499%   M a g i c k G e t S a m p l i n g F a c t o r s                           %
1500%                                                                             %
1501%                                                                             %
1502%                                                                             %
1503%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1504%
1505%  MagickGetSamplingFactors() gets the horizontal and vertical sampling factor.
1506%
1507%  The format of the MagickGetSamplingFactors method is:
1508%
1509%      double *MagickGetSamplingFactor(MagickWand *wand,
1510%        size_t *number_factors)
1511%
1512%  A description of each parameter follows:
1513%
1514%    o wand: the magick wand.
1515%
1516%    o number_factors: the number of factors in the returned array.
1517%
1518*/
1519WandExport double *MagickGetSamplingFactors(MagickWand *wand,
1520  size_t *number_factors)
1521{
1522  double
1523    *sampling_factors;
1524
1525  register const char
1526    *p;
1527
1528  register ssize_t
1529    i;
1530
1531  assert(wand != (MagickWand *) NULL);
1532  assert(wand->signature == MagickWandSignature);
1533  if (wand->debug != MagickFalse)
1534    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1535
1536  *number_factors=0;
1537  sampling_factors=(double *) NULL;
1538  if (wand->image_info->sampling_factor == (char *) NULL)
1539    return(sampling_factors);
1540  i=0;
1541  for (p=wand->image_info->sampling_factor; p != (char *) NULL; p=strchr(p,','))
1542  {
1543    while (((int) *p != 0) && ((isspace((int) ((unsigned char) *p)) != 0) ||
1544           (*p == ',')))
1545      p++;
1546    i++;
1547  }
1548  sampling_factors=(double *) AcquireQuantumMemory((size_t) i+1,
1549    sizeof(*sampling_factors));
1550  if (sampling_factors == (double *) NULL)
1551    ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
1552      wand->image_info->filename);
1553  i=0;
1554  for (p=wand->image_info->sampling_factor; p != (char *) NULL; p=strchr(p,','))
1555  {
1556    while (((int) *p != 0) && ((isspace((int) ((unsigned char) *p)) != 0) ||
1557           (*p == ',')))
1558      p++;
1559    sampling_factors[i]=StringToDouble(p,(char **) NULL);
1560    i++;
1561  }
1562  *number_factors=(size_t) i;
1563  return(sampling_factors);
1564}
1565
1566/*
1567%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1568%                                                                             %
1569%                                                                             %
1570%                                                                             %
1571%   M a g i c k G e t S i z e                                                 %
1572%                                                                             %
1573%                                                                             %
1574%                                                                             %
1575%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1576%
1577%  MagickGetSize() returns the size associated with the magick wand.
1578%
1579%  The format of the MagickGetSize method is:
1580%
1581%      MagickBooleanType MagickGetSize(const MagickWand *wand,
1582%        size_t *columns,size_t *rows)
1583%
1584%  A description of each parameter follows:
1585%
1586%    o wand: the magick wand.
1587%
1588%    o columns: the width in pixels.
1589%
1590%    o height: the height in pixels.
1591%
1592*/
1593WandExport MagickBooleanType MagickGetSize(const MagickWand *wand,
1594  size_t *columns,size_t *rows)
1595{
1596  RectangleInfo
1597    geometry;
1598
1599  assert(wand != (const MagickWand *) NULL);
1600  assert(wand->signature == MagickWandSignature);
1601  if (wand->debug != MagickFalse)
1602    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1603
1604  (void) ResetMagickMemory(&geometry,0,sizeof(geometry));
1605  (void) ParseAbsoluteGeometry(wand->image_info->size,&geometry);
1606  *columns=geometry.width;
1607  *rows=geometry.height;
1608  return(MagickTrue);
1609}
1610
1611/*
1612%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1613%                                                                             %
1614%                                                                             %
1615%                                                                             %
1616%   M a g i c k G e t S i z e O f f s e t                                     %
1617%                                                                             %
1618%                                                                             %
1619%                                                                             %
1620%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1621%
1622%  MagickGetSizeOffset() returns the size offset associated with the magick
1623%  wand.
1624%
1625%  The format of the MagickGetSizeOffset method is:
1626%
1627%      MagickBooleanType MagickGetSizeOffset(const MagickWand *wand,
1628%        ssize_t *offset)
1629%
1630%  A description of each parameter follows:
1631%
1632%    o wand: the magick wand.
1633%
1634%    o offset: the image offset.
1635%
1636*/
1637WandExport MagickBooleanType MagickGetSizeOffset(const MagickWand *wand,
1638  ssize_t *offset)
1639{
1640  RectangleInfo
1641    geometry;
1642
1643  assert(wand != (const MagickWand *) NULL);
1644  assert(wand->signature == MagickWandSignature);
1645  if (wand->debug != MagickFalse)
1646    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1647
1648  (void) ResetMagickMemory(&geometry,0,sizeof(geometry));
1649  (void) ParseAbsoluteGeometry(wand->image_info->size,&geometry);
1650  *offset=geometry.x;
1651  return(MagickTrue);
1652}
1653
1654/*
1655%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1656%                                                                             %
1657%                                                                             %
1658%                                                                             %
1659%   M a g i c k G e t T y p e                                                 %
1660%                                                                             %
1661%                                                                             %
1662%                                                                             %
1663%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1664%
1665%  MagickGetType() returns the wand type.
1666%
1667%  The format of the MagickGetType method is:
1668%
1669%      ImageType MagickGetType(MagickWand *wand)
1670%
1671%  A description of each parameter follows:
1672%
1673%    o wand: the magick wand.
1674%
1675*/
1676WandExport ImageType MagickGetType(MagickWand *wand)
1677{
1678  assert(wand != (MagickWand *) NULL);
1679  assert(wand->signature == MagickWandSignature);
1680  if (wand->debug != MagickFalse)
1681    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1682
1683  return(wand->image_info->type);
1684}
1685
1686/*
1687%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1688%                                                                             %
1689%                                                                             %
1690%                                                                             %
1691%   M a g i c k G e t V e r s i o n                                           %
1692%                                                                             %
1693%                                                                             %
1694%                                                                             %
1695%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1696%
1697%  MagickGetVersion() returns the ImageMagick API version as a string constant
1698%  and as a number.
1699%
1700%  The format of the MagickGetVersion method is:
1701%
1702%      const char *MagickGetVersion(size_t *version)
1703%
1704%  A description of each parameter follows:
1705%
1706%    o version: the ImageMagick version is returned as a number.
1707%
1708*/
1709WandExport const char *MagickGetVersion(size_t *version)
1710{
1711  return(GetMagickVersion(version));
1712}
1713
1714/*
1715%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1716%                                                                             %
1717%                                                                             %
1718%                                                                             %
1719%   M a g i c k P r o f i l e I m a g e                                       %
1720%                                                                             %
1721%                                                                             %
1722%                                                                             %
1723%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1724%
1725%  MagickProfileImage() adds or removes a ICC, IPTC, or generic profile
1726%  from an image.  If the profile is NULL, it is removed from the image
1727%  otherwise added.  Use a name of '*' and a profile of NULL to remove all
1728%  profiles from the image.
1729%
1730%  The format of the MagickProfileImage method is:
1731%
1732%      MagickBooleanType MagickProfileImage(MagickWand *wand,const char *name,
1733%        const void *profile,const size_t length)
1734%
1735%  A description of each parameter follows:
1736%
1737%    o wand: the magick wand.
1738%
1739%    o name: Name of profile to add or remove: ICC, IPTC, or generic profile.
1740%
1741%    o profile: the profile.
1742%
1743%    o length: the length of the profile.
1744%
1745*/
1746WandExport MagickBooleanType MagickProfileImage(MagickWand *wand,
1747  const char *name,const void *profile,const size_t length)
1748{
1749  assert(wand != (MagickWand *) NULL);
1750  assert(wand->signature == MagickWandSignature);
1751  if (wand->debug != MagickFalse)
1752    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1753
1754  if (wand->images == (Image *) NULL)
1755    ThrowWandException(WandError,"ContainsNoImages",wand->name);
1756  return(ProfileImage(wand->images,name,profile,length,wand->exception));
1757}
1758
1759/*
1760%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1761%                                                                             %
1762%                                                                             %
1763%                                                                             %
1764%   M a g i c k R e m o v e I m a g e P r o f i l e                           %
1765%                                                                             %
1766%                                                                             %
1767%                                                                             %
1768%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1769%
1770%  MagickRemoveImageProfile() removes the named image profile and returns it.
1771%
1772%  The format of the MagickRemoveImageProfile method is:
1773%
1774%      unsigned char *MagickRemoveImageProfile(MagickWand *wand,
1775%        const char *name,size_t *length)
1776%
1777%  A description of each parameter follows:
1778%
1779%    o wand: the magick wand.
1780%
1781%    o name: Name of profile to return: ICC, IPTC, or generic profile.
1782%
1783%    o length: the length of the profile.
1784%
1785*/
1786WandExport unsigned char *MagickRemoveImageProfile(MagickWand *wand,
1787  const char *name,size_t *length)
1788{
1789  StringInfo
1790    *profile;
1791
1792  unsigned char
1793    *datum;
1794
1795  assert(wand != (MagickWand *) NULL);
1796  assert(wand->signature == MagickWandSignature);
1797  if (wand->debug != MagickFalse)
1798    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1799
1800  if (wand->images == (Image *) NULL)
1801    {
1802      (void) ThrowMagickException(wand->exception,GetMagickModule(),WandError,
1803        "ContainsNoImages","`%s'",wand->name);
1804      return((unsigned char *) NULL);
1805    }
1806  *length=0;
1807  profile=RemoveImageProfile(wand->images,name);
1808  if (profile == (StringInfo *) NULL)
1809    return((unsigned char *) NULL);
1810  datum=(unsigned char *) AcquireQuantumMemory(GetStringInfoLength(profile),
1811    sizeof(*datum));
1812  if (datum == (unsigned char *) NULL)
1813    return((unsigned char *) NULL);
1814  (void) CopyMagickMemory(datum,GetStringInfoDatum(profile),
1815    GetStringInfoLength(profile));
1816  *length=GetStringInfoLength(profile);
1817  profile=DestroyStringInfo(profile);
1818  return(datum);
1819}
1820
1821/*
1822%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1823%                                                                             %
1824%                                                                             %
1825%                                                                             %
1826%   M a g i c k S e t A n t i a l i a s                                       %
1827%                                                                             %
1828%                                                                             %
1829%                                                                             %
1830%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1831%
1832%  MagickSetAntialias() sets the antialias propery of the wand.
1833%
1834%  The format of the MagickSetAntialias method is:
1835%
1836%      MagickBooleanType MagickSetAntialias(MagickWand *wand,
1837%        const MagickBooleanType antialias)
1838%
1839%  A description of each parameter follows:
1840%
1841%    o wand: the magick wand.
1842%
1843%    o antialias: the antialias property.
1844%
1845*/
1846WandExport MagickBooleanType MagickSetAntialias(MagickWand *wand,
1847  const MagickBooleanType antialias)
1848{
1849  assert(wand != (MagickWand *) NULL);
1850  assert(wand->signature == MagickWandSignature);
1851  if (wand->debug != MagickFalse)
1852    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1853
1854  wand->image_info->antialias=antialias;
1855  return(MagickTrue);
1856}
1857
1858/*
1859%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1860%                                                                             %
1861%                                                                             %
1862%                                                                             %
1863%   M a g i c k S e t B a c k g r o u n d C o l o r                           %
1864%                                                                             %
1865%                                                                             %
1866%                                                                             %
1867%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1868%
1869%  MagickSetBackgroundColor() sets the wand background color.
1870%
1871%  The format of the MagickSetBackgroundColor method is:
1872%
1873%      MagickBooleanType MagickSetBackgroundColor(MagickWand *wand,
1874%        const PixelWand *background)
1875%
1876%  A description of each parameter follows:
1877%
1878%    o wand: the magick wand.
1879%
1880%    o background: the background pixel wand.
1881%
1882*/
1883WandExport MagickBooleanType MagickSetBackgroundColor(MagickWand *wand,
1884  const PixelWand *background)
1885{
1886  assert(wand != (MagickWand *) NULL);
1887  assert(wand->signature == MagickWandSignature);
1888  if (wand->debug != MagickFalse)
1889    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1890
1891  PixelGetQuantumPacket(background,&wand->image_info->background_color);
1892  return(MagickTrue);
1893}
1894
1895/*
1896%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1897%                                                                             %
1898%                                                                             %
1899%                                                                             %
1900%   M a g i c k S e t C o l o r s p a c e                                     %
1901%                                                                             %
1902%                                                                             %
1903%                                                                             %
1904%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1905%
1906%  MagickSetColorspace() sets the wand colorspace type.
1907%
1908%  The format of the MagickSetColorspace method is:
1909%
1910%      MagickBooleanType MagickSetColorspace(MagickWand *wand,
1911%        const ColorspaceType colorspace)
1912%
1913%  A description of each parameter follows:
1914%
1915%    o wand: the magick wand.
1916%
1917%    o colorspace: the wand colorspace.
1918%
1919*/
1920WandExport MagickBooleanType MagickSetColorspace(MagickWand *wand,
1921  const ColorspaceType colorspace)
1922{
1923  assert(wand != (MagickWand *) NULL);
1924  assert(wand->signature == MagickWandSignature);
1925  if (wand->debug != MagickFalse)
1926    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1927
1928  wand->image_info->colorspace=colorspace;
1929  return(MagickTrue);
1930}
1931
1932/*
1933%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1934%                                                                             %
1935%                                                                             %
1936%                                                                             %
1937%   M a g i c k S e t C o m p r e s s i o n                                   %
1938%                                                                             %
1939%                                                                             %
1940%                                                                             %
1941%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1942%
1943%  MagickSetCompression() sets the wand compression type.
1944%
1945%  The format of the MagickSetCompression method is:
1946%
1947%      MagickBooleanType MagickSetCompression(MagickWand *wand,
1948%        const CompressionType compression)
1949%
1950%  A description of each parameter follows:
1951%
1952%    o wand: the magick wand.
1953%
1954%    o compression: the wand compression.
1955%
1956*/
1957WandExport MagickBooleanType MagickSetCompression(MagickWand *wand,
1958  const CompressionType compression)
1959{
1960  assert(wand != (MagickWand *) NULL);
1961  assert(wand->signature == MagickWandSignature);
1962  if (wand->debug != MagickFalse)
1963    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
1964
1965  wand->image_info->compression=compression;
1966  return(MagickTrue);
1967}
1968
1969/*
1970%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1971%                                                                             %
1972%                                                                             %
1973%                                                                             %
1974%   M a g i c k S e t C o m p r e s s i o n Q u a l i t y                     %
1975%                                                                             %
1976%                                                                             %
1977%                                                                             %
1978%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1979%
1980%  MagickSetCompressionQuality() sets the wand compression quality.
1981%
1982%  The format of the MagickSetCompressionQuality method is:
1983%
1984%      MagickBooleanType MagickSetCompressionQuality(MagickWand *wand,
1985%        const size_t quality)
1986%
1987%  A description of each parameter follows:
1988%
1989%    o wand: the magick wand.
1990%
1991%    o quality: the wand compression quality.
1992%
1993*/
1994WandExport MagickBooleanType MagickSetCompressionQuality(MagickWand *wand,
1995  const size_t quality)
1996{
1997  assert(wand != (MagickWand *) NULL);
1998  assert(wand->signature == MagickWandSignature);
1999  if (wand->debug != MagickFalse)
2000    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2001
2002  wand->image_info->quality=quality;
2003  return(MagickTrue);
2004}
2005
2006/*
2007%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2008%                                                                             %
2009%                                                                             %
2010%                                                                             %
2011%   M a g i c k S e t D e p t h                                               %
2012%                                                                             %
2013%                                                                             %
2014%                                                                             %
2015%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2016%
2017%  MagickSetDepth() sets the wand pixel depth.
2018%
2019%  The format of the MagickSetDepth method is:
2020%
2021%      MagickBooleanType MagickSetDepth(MagickWand *wand,
2022%        const size_t depth)
2023%
2024%  A description of each parameter follows:
2025%
2026%    o wand: the magick wand.
2027%
2028%    o depth: the wand pixel depth.
2029%
2030*/
2031WandExport MagickBooleanType MagickSetDepth(MagickWand *wand,
2032  const size_t depth)
2033{
2034  assert(wand != (MagickWand *) NULL);
2035  assert(wand->signature == MagickWandSignature);
2036  if (wand->debug != MagickFalse)
2037    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2038
2039  wand->image_info->depth=depth;
2040  return(MagickTrue);
2041}
2042
2043/*
2044%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2045%                                                                             %
2046%                                                                             %
2047%                                                                             %
2048%   M a g i c k S e t E x t r a c t                                           %
2049%                                                                             %
2050%                                                                             %
2051%                                                                             %
2052%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2053%
2054%  MagickSetExtract() sets the extract geometry before you read or write an
2055%  image file.  Use it for inline cropping (e.g. 200x200+0+0) or resizing
2056%  (e.g.200x200).
2057%
2058%  The format of the MagickSetExtract method is:
2059%
2060%      MagickBooleanType MagickSetExtract(MagickWand *wand,
2061%        const char *geometry)
2062%
2063%  A description of each parameter follows:
2064%
2065%    o wand: the magick wand.
2066%
2067%    o geometry: the extract geometry.
2068%
2069*/
2070WandExport MagickBooleanType MagickSetExtract(MagickWand *wand,
2071  const char *geometry)
2072{
2073  assert(wand != (MagickWand *) NULL);
2074  assert(wand->signature == MagickWandSignature);
2075  if (wand->debug != MagickFalse)
2076    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2077  if (wand->image_info->extract != (char *) NULL)
2078    wand->image_info->extract=DestroyString(wand->image_info->extract);
2079  if (geometry != (const char *) NULL)
2080    (void) CloneString(&wand->image_info->extract,geometry);
2081  return(MagickTrue);
2082}
2083
2084/*
2085%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2086%                                                                             %
2087%                                                                             %
2088%                                                                             %
2089%   M a g i c k S e t F i l e n a m e                                         %
2090%                                                                             %
2091%                                                                             %
2092%                                                                             %
2093%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2094%
2095%  MagickSetFilename() sets the filename before you read or write an image file.
2096%
2097%  The format of the MagickSetFilename method is:
2098%
2099%      MagickBooleanType MagickSetFilename(MagickWand *wand,
2100%        const char *filename)
2101%
2102%  A description of each parameter follows:
2103%
2104%    o wand: the magick wand.
2105%
2106%    o filename: the image filename.
2107%
2108*/
2109WandExport MagickBooleanType MagickSetFilename(MagickWand *wand,
2110  const char *filename)
2111{
2112  assert(wand != (MagickWand *) NULL);
2113  assert(wand->signature == MagickWandSignature);
2114  if (wand->debug != MagickFalse)
2115    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2116
2117  if (filename != (const char *) NULL)
2118    (void) CopyMagickString(wand->image_info->filename,filename,MagickPathExtent);
2119  return(MagickTrue);
2120}
2121
2122/*
2123%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2124%                                                                             %
2125%                                                                             %
2126%                                                                             %
2127%   M a g i c k S e t F o n t                                                 %
2128%                                                                             %
2129%                                                                             %
2130%                                                                             %
2131%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2132%
2133%  MagickSetFont() sets the font associated with the MagickWand.
2134%
2135%  The format of the MagickSetFont method is:
2136%
2137%      MagickBooleanType MagickSetFont(MagickWand *wand, const char *font)
2138%
2139%  A description of each parameter follows:
2140%
2141%    o wand: the magick wand.
2142%
2143%    o font: the font
2144%
2145*/
2146WandExport MagickBooleanType MagickSetFont(MagickWand *wand,const char *font)
2147{
2148  if ((font == (const char *) NULL) || (*font == '\0'))
2149    return(MagickFalse);
2150  assert(wand != (MagickWand *) NULL);
2151  assert(wand->signature == MagickWandSignature);
2152  if (wand->debug != MagickFalse)
2153    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2154
2155  (void) CloneString(&wand->image_info->font,font);
2156  return(MagickTrue);
2157}
2158
2159/*
2160%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2161%                                                                             %
2162%                                                                             %
2163%                                                                             %
2164%   M a g i c k S e t F o r m a t                                             %
2165%                                                                             %
2166%                                                                             %
2167%                                                                             %
2168%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2169%
2170%  MagickSetFormat() sets the format of the magick wand.
2171%
2172%  The format of the MagickSetFormat method is:
2173%
2174%      MagickBooleanType MagickSetFormat(MagickWand *wand,const char *format)
2175%
2176%  A description of each parameter follows:
2177%
2178%    o wand: the magick wand.
2179%
2180%    o format: the image format.
2181%
2182*/
2183WandExport MagickBooleanType MagickSetFormat(MagickWand *wand,
2184  const char *format)
2185{
2186  const MagickInfo
2187    *magick_info;
2188
2189  assert(wand != (MagickWand *) NULL);
2190  assert(wand->signature == MagickWandSignature);
2191  if (wand->debug != MagickFalse)
2192    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2193
2194  if ((format == (char *) NULL) || (*format == '\0'))
2195    {
2196      *wand->image_info->magick='\0';
2197      return(MagickTrue);
2198    }
2199  magick_info=GetMagickInfo(format,wand->exception);
2200  if (magick_info == (const MagickInfo *) NULL)
2201    return(MagickFalse);
2202  ClearMagickException(wand->exception);
2203  (void) CopyMagickString(wand->image_info->magick,format,MagickPathExtent);
2204  return(MagickTrue);
2205}
2206
2207/*
2208%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2209%                                                                             %
2210%                                                                             %
2211%                                                                             %
2212%   M a g i c k S e t G r a v i t y                                           %
2213%                                                                             %
2214%                                                                             %
2215%                                                                             %
2216%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2217%
2218%  MagickSetGravity() sets the gravity type.
2219%
2220%  The format of the MagickSetGravity type is:
2221%
2222%      MagickBooleanType MagickSetGravity(MagickWand *wand,
2223%        const GravityType type)
2224%
2225%  A description of each parameter follows:
2226%
2227%    o wand: the magick wand.
2228%
2229%    o type: the gravity type.
2230%
2231*/
2232WandExport MagickBooleanType MagickSetGravity(MagickWand *wand,
2233  const GravityType type)
2234{
2235  MagickBooleanType
2236    status;
2237
2238  assert(wand != (MagickWand *) NULL);
2239  assert(wand->signature == MagickWandSignature);
2240  if (wand->debug != MagickFalse)
2241    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2242
2243  status=SetImageOption(wand->image_info,"gravity",CommandOptionToMnemonic(
2244    MagickGravityOptions,(ssize_t) type));
2245  return(status);
2246}
2247
2248/*
2249%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2250%                                                                             %
2251%                                                                             %
2252%                                                                             %
2253%   M a g i c k S e t I m a g e A r t i f r c t                               %
2254%                                                                             %
2255%                                                                             %
2256%                                                                             %
2257%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2258%
2259%  MagickSetImageArtifact() associates a artifact with an image.
2260%
2261%  The format of the MagickSetImageArtifact method is:
2262%
2263%      MagickBooleanType MagickSetImageArtifact(MagickWand *wand,
2264%        const char *artifact,const char *value)
2265%
2266%  A description of each parameter follows:
2267%
2268%    o wand: the magick wand.
2269%
2270%    o artifact: the artifact.
2271%
2272%    o value: the value.
2273%
2274*/
2275WandExport MagickBooleanType MagickSetImageArtifact(MagickWand *wand,
2276  const char *artifact,const char *value)
2277{
2278  assert(wand != (MagickWand *) NULL);
2279  assert(wand->signature == MagickWandSignature);
2280  if (wand->debug != MagickFalse)
2281    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2282
2283  if (wand->images == (Image *) NULL)
2284    ThrowWandException(WandError,"ContainsNoImages",wand->name);
2285  return(SetImageArtifact(wand->images,artifact,value));
2286}
2287
2288/*
2289%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2290%                                                                             %
2291%                                                                             %
2292%                                                                             %
2293%   M a g i c k S e t P r o f i l e I m a g e                                 %
2294%                                                                             %
2295%                                                                             %
2296%                                                                             %
2297%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2298%
2299%  MagickSetImageProfile() adds a named profile to the magick wand.  If a
2300%  profile with the same name already exists, it is replaced.  This method
2301%  differs from the MagickProfileImage() method in that it does not apply any
2302%  CMS color profiles.
2303%
2304%  The format of the MagickSetImageProfile method is:
2305%
2306%      MagickBooleanType MagickSetImageProfile(MagickWand *wand,
2307%        const char *name,const void *profile,const size_t length)
2308%
2309%  A description of each parameter follows:
2310%
2311%    o wand: the magick wand.
2312%
2313%    o name: Name of profile to add or remove: ICC, IPTC, or generic profile.
2314%
2315%    o profile: the profile.
2316%
2317%    o length: the length of the profile.
2318%
2319*/
2320WandExport MagickBooleanType MagickSetImageProfile(MagickWand *wand,
2321  const char *name,const void *profile,const size_t length)
2322{
2323  MagickBooleanType
2324    status;
2325
2326  StringInfo
2327    *profile_info;
2328
2329  assert(wand != (MagickWand *) NULL);
2330  assert(wand->signature == MagickWandSignature);
2331  if (wand->debug != MagickFalse)
2332    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2333
2334  if (wand->images == (Image *) NULL)
2335    ThrowWandException(WandError,"ContainsNoImages",wand->name);
2336  profile_info=AcquireStringInfo((size_t) length);
2337  SetStringInfoDatum(profile_info,(unsigned char *) profile);
2338  status=SetImageProfile(wand->images,name,profile_info,wand->exception);
2339  profile_info=DestroyStringInfo(profile_info);
2340  return(status);
2341}
2342
2343/*
2344%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2345%                                                                             %
2346%                                                                             %
2347%                                                                             %
2348%   M a g i c k S e t I m a g e P r o p e r t y                               %
2349%                                                                             %
2350%                                                                             %
2351%                                                                             %
2352%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2353%
2354%  MagickSetImageProperty() associates a property with an image.
2355%
2356%  The format of the MagickSetImageProperty method is:
2357%
2358%      MagickBooleanType MagickSetImageProperty(MagickWand *wand,
2359%        const char *property,const char *value)
2360%
2361%  A description of each parameter follows:
2362%
2363%    o wand: the magick wand.
2364%
2365%    o property: the property.
2366%
2367%    o value: the value.
2368%
2369*/
2370WandExport MagickBooleanType MagickSetImageProperty(MagickWand *wand,
2371  const char *property,const char *value)
2372{
2373  MagickBooleanType
2374    status;
2375
2376  assert(wand != (MagickWand *) NULL);
2377  assert(wand->signature == MagickWandSignature);
2378  if (wand->debug != MagickFalse)
2379    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2380
2381  if (wand->images == (Image *) NULL)
2382    ThrowWandException(WandError,"ContainsNoImages",wand->name);
2383  status=SetImageProperty(wand->images,property,value,wand->exception);
2384  return(status);
2385}
2386
2387/*
2388%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2389%                                                                             %
2390%                                                                             %
2391%                                                                             %
2392%   M a g i c k S e t I n t e r l a c e S c h e m e                           %
2393%                                                                             %
2394%                                                                             %
2395%                                                                             %
2396%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2397%
2398%  MagickSetInterlaceScheme() sets the image compression.
2399%
2400%  The format of the MagickSetInterlaceScheme method is:
2401%
2402%      MagickBooleanType MagickSetInterlaceScheme(MagickWand *wand,
2403%        const InterlaceType interlace_scheme)
2404%
2405%  A description of each parameter follows:
2406%
2407%    o wand: the magick wand.
2408%
2409%    o interlace_scheme: the image interlace scheme: NoInterlace, LineInterlace,
2410%      PlaneInterlace, PartitionInterlace.
2411%
2412*/
2413WandExport MagickBooleanType MagickSetInterlaceScheme(MagickWand *wand,
2414  const InterlaceType interlace_scheme)
2415{
2416  assert(wand != (MagickWand *) NULL);
2417  assert(wand->signature == MagickWandSignature);
2418  if (wand->debug != MagickFalse)
2419    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2420
2421  wand->image_info->interlace=interlace_scheme;
2422  return(MagickTrue);
2423}
2424
2425/*
2426%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2427%                                                                             %
2428%                                                                             %
2429%                                                                             %
2430%   M a g i c k S e t I n t e r p o l a t e M e t h o d                       %
2431%                                                                             %
2432%                                                                             %
2433%                                                                             %
2434%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2435%
2436%  MagickSetInterpolateMethod() sets the interpolate pixel method.
2437%
2438%  The format of the MagickSetInterpolateMethod method is:
2439%
2440%      MagickBooleanType MagickSetInterpolateMethod(MagickWand *wand,
2441%        const InterpolateMethodPixel method)
2442%
2443%  A description of each parameter follows:
2444%
2445%    o wand: the magick wand.
2446%
2447%    o method: the interpolate pixel method.
2448%
2449*/
2450WandExport MagickBooleanType MagickSetInterpolateMethod(MagickWand *wand,
2451  const PixelInterpolateMethod method)
2452{
2453  MagickBooleanType
2454    status;
2455
2456  assert(wand != (MagickWand *) NULL);
2457  assert(wand->signature == MagickWandSignature);
2458  if (wand->debug != MagickFalse)
2459    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2460
2461  status=SetImageOption(wand->image_info,"interpolate",
2462    CommandOptionToMnemonic(MagickInterpolateOptions,(ssize_t) method));
2463  return(status);
2464}
2465
2466/*
2467%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2468%                                                                             %
2469%                                                                             %
2470%                                                                             %
2471%   M a g i c k S e t O p t i o n                                             %
2472%                                                                             %
2473%                                                                             %
2474%                                                                             %
2475%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2476%
2477%  MagickSetOption() associates one or options with the wand (.e.g
2478%  MagickSetOption(wand,"jpeg:perserve","yes")).
2479%
2480%  The format of the MagickSetOption method is:
2481%
2482%      MagickBooleanType MagickSetOption(MagickWand *wand,const char *key,
2483%        const char *value)
2484%
2485%  A description of each parameter follows:
2486%
2487%    o wand: the magick wand.
2488%
2489%    o key:  The key.
2490%
2491%    o value:  The value.
2492%
2493*/
2494WandExport MagickBooleanType MagickSetOption(MagickWand *wand,const char *key,
2495  const char *value)
2496{
2497  assert(wand != (MagickWand *) NULL);
2498  assert(wand->signature == MagickWandSignature);
2499  if (wand->debug != MagickFalse)
2500    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2501
2502  return(SetImageOption(wand->image_info,key,value));
2503}
2504
2505/*
2506%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2507%                                                                             %
2508%                                                                             %
2509%                                                                             %
2510%   M a g i c k S e t O r i e n t a t i o n                                   %
2511%                                                                             %
2512%                                                                             %
2513%                                                                             %
2514%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2515%
2516%  MagickSetOrientation() sets the wand orientation type.
2517%
2518%  The format of the MagickSetOrientation method is:
2519%
2520%      MagickBooleanType MagickSetOrientation(MagickWand *wand,
2521%        const OrientationType orientation)
2522%
2523%  A description of each parameter follows:
2524%
2525%    o wand: the magick wand.
2526%
2527%    o orientation: the wand orientation.
2528%
2529*/
2530WandExport MagickBooleanType MagickSetOrientation(MagickWand *wand,
2531  const OrientationType orientation)
2532{
2533  assert(wand != (MagickWand *) NULL);
2534  assert(wand->signature == MagickWandSignature);
2535  if (wand->debug != MagickFalse)
2536    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2537
2538  wand->image_info->orientation=orientation;
2539  return(MagickTrue);
2540}
2541
2542/*
2543%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2544%                                                                             %
2545%                                                                             %
2546%                                                                             %
2547%   M a g i c k S e t P a g e                                                 %
2548%                                                                             %
2549%                                                                             %
2550%                                                                             %
2551%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2552%
2553%  MagickSetPage() sets the page geometry of the magick wand.
2554%
2555%  The format of the MagickSetPage method is:
2556%
2557%      MagickBooleanType MagickSetPage(MagickWand *wand,
2558%        const size_t width,const size_t height,const ssize_t x,
2559%        const ssize_t y)
2560%
2561%  A description of each parameter follows:
2562%
2563%    o wand: the magick wand.
2564%
2565%    o width: the page width.
2566%
2567%    o height: the page height.
2568%
2569%    o x: the page x-offset.
2570%
2571%    o y: the page y-offset.
2572%
2573*/
2574WandExport MagickBooleanType MagickSetPage(MagickWand *wand,
2575  const size_t width,const size_t height,const ssize_t x,
2576  const ssize_t y)
2577{
2578  char
2579    geometry[MagickPathExtent];
2580
2581  assert(wand != (MagickWand *) NULL);
2582  assert(wand->signature == MagickWandSignature);
2583  if (wand->debug != MagickFalse)
2584    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2585
2586  (void) FormatLocaleString(geometry,MagickPathExtent,"%.20gx%.20g%+.20g%+.20g",
2587    (double) width,(double) height,(double) x,(double) y);
2588  (void) CloneString(&wand->image_info->page,geometry);
2589  return(MagickTrue);
2590}
2591
2592/*
2593%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2594%                                                                             %
2595%                                                                             %
2596%                                                                             %
2597%   M a g i c k S e t P a s s p h r a s e                                     %
2598%                                                                             %
2599%                                                                             %
2600%                                                                             %
2601%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2602%
2603%  MagickSetPassphrase() sets the passphrase.
2604%
2605%  The format of the MagickSetPassphrase method is:
2606%
2607%      MagickBooleanType MagickSetPassphrase(MagickWand *wand,
2608%        const char *passphrase)
2609%
2610%  A description of each parameter follows:
2611%
2612%    o wand: the magick wand.
2613%
2614%    o passphrase: the passphrase.
2615%
2616*/
2617WandExport MagickBooleanType MagickSetPassphrase(MagickWand *wand,
2618  const char *passphrase)
2619{
2620  assert(wand != (MagickWand *) NULL);
2621  assert(wand->signature == MagickWandSignature);
2622  if (wand->debug != MagickFalse)
2623    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2624
2625  (void) SetImageOption(wand->image_info,"authenticate",passphrase);
2626  return(MagickTrue);
2627}
2628
2629/*
2630%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2631%                                                                             %
2632%                                                                             %
2633%                                                                             %
2634%   M a g i c k S e t P o i n t s i z e                                       %
2635%                                                                             %
2636%                                                                             %
2637%                                                                             %
2638%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2639%
2640%  MagickSetPointsize() sets the font pointsize associated with the MagickWand.
2641%
2642%  The format of the MagickSetPointsize method is:
2643%
2644%      MagickBooleanType MagickSetPointsize(MagickWand *wand,
2645%        const double pointsize)
2646%
2647%  A description of each parameter follows:
2648%
2649%    o wand: the magick wand.
2650%
2651%    o pointsize: the size of the font
2652%
2653*/
2654WandExport MagickBooleanType MagickSetPointsize(MagickWand *wand,
2655  const double pointsize)
2656{
2657  assert(wand != (MagickWand *) NULL);
2658  assert(wand->signature == MagickWandSignature);
2659  if (wand->debug != MagickFalse)
2660    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2661
2662  wand->image_info->pointsize=pointsize;
2663  return(MagickTrue);
2664}
2665
2666/*
2667%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2668%                                                                             %
2669%                                                                             %
2670%                                                                             %
2671%   M a g i c k S e t P r o g r e s s M o n i t o r                           %
2672%                                                                             %
2673%                                                                             %
2674%                                                                             %
2675%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2676%
2677%  MagickSetProgressMonitor() sets the wand progress monitor to the specified
2678%  method and returns the previous progress monitor if any.  The progress
2679%  monitor method looks like this:
2680%
2681%    MagickBooleanType MagickProgressMonitor(const char *text,
2682%      const MagickOffsetType offset,const MagickSizeType span,
2683%      void *client_data)
2684%
2685%  If the progress monitor returns MagickFalse, the current operation is
2686%  interrupted.
2687%
2688%  The format of the MagickSetProgressMonitor method is:
2689%
2690%      MagickProgressMonitor MagickSetProgressMonitor(MagickWand *wand
2691%        const MagickProgressMonitor progress_monitor,void *client_data)
2692%
2693%  A description of each parameter follows:
2694%
2695%    o wand: the magick wand.
2696%
2697%    o progress_monitor: Specifies a pointer to a method to monitor progress
2698%      of an image operation.
2699%
2700%    o client_data: Specifies a pointer to any client data.
2701%
2702*/
2703WandExport MagickProgressMonitor MagickSetProgressMonitor(MagickWand *wand,
2704  const MagickProgressMonitor progress_monitor,void *client_data)
2705{
2706  MagickProgressMonitor
2707    previous_monitor;
2708
2709  assert(wand != (MagickWand *) NULL);
2710  assert(wand->signature == MagickWandSignature);
2711  if (wand->debug != MagickFalse)
2712    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2713
2714  previous_monitor=SetImageInfoProgressMonitor(wand->image_info,
2715    progress_monitor,client_data);
2716  return(previous_monitor);
2717}
2718
2719/*
2720%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2721%                                                                             %
2722%                                                                             %
2723%                                                                             %
2724%   M a g i c k S e t R e s o u r c e L i m i t                               %
2725%                                                                             %
2726%                                                                             %
2727%                                                                             %
2728%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2729%
2730%  MagickSetResourceLimit() sets the limit for a particular resource in
2731%  megabytes.
2732%
2733%  The format of the MagickSetResourceLimit method is:
2734%
2735%      MagickBooleanType MagickSetResourceLimit(const ResourceType type,
2736%        const MagickSizeType limit)
2737%
2738%  A description of each parameter follows:
2739%
2740%    o type: the type of resource: AreaResource, MemoryResource, MapResource,
2741%      DiskResource, FileResource.
2742%
2743%    o The maximum limit for the resource.
2744%
2745*/
2746WandExport MagickBooleanType MagickSetResourceLimit(const ResourceType type,
2747  const MagickSizeType limit)
2748{
2749  return(SetMagickResourceLimit(type,limit));
2750}
2751
2752/*
2753%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2754%                                                                             %
2755%                                                                             %
2756%                                                                             %
2757%   M a g i c k S e t R e s o l u t i o n                                     %
2758%                                                                             %
2759%                                                                             %
2760%                                                                             %
2761%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2762%
2763%  MagickSetResolution() sets the image resolution.
2764%
2765%  The format of the MagickSetResolution method is:
2766%
2767%      MagickBooleanType MagickSetResolution(MagickWand *wand,
2768%        const double x_resolution,const double y_resolution)
2769%
2770%  A description of each parameter follows:
2771%
2772%    o wand: the magick wand.
2773%
2774%    o x_resolution: the image x resolution.
2775%
2776%    o y_resolution: the image y resolution.
2777%
2778*/
2779WandExport MagickBooleanType MagickSetResolution(MagickWand *wand,
2780  const double x_resolution,const double y_resolution)
2781{
2782  char
2783    density[MagickPathExtent];
2784
2785  assert(wand != (MagickWand *) NULL);
2786  assert(wand->signature == MagickWandSignature);
2787  if (wand->debug != MagickFalse)
2788    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2789
2790  (void) FormatLocaleString(density,MagickPathExtent,"%gx%g",x_resolution,
2791    y_resolution);
2792  (void) CloneString(&wand->image_info->density,density);
2793  return(MagickTrue);
2794}
2795
2796/*
2797%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2798%                                                                             %
2799%                                                                             %
2800%                                                                             %
2801%   M a g i c k S e t S a m p l i n g F a c t o r s                           %
2802%                                                                             %
2803%                                                                             %
2804%                                                                             %
2805%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2806%
2807%  MagickSetSamplingFactors() sets the image sampling factors.
2808%
2809%  The format of the MagickSetSamplingFactors method is:
2810%
2811%      MagickBooleanType MagickSetSamplingFactors(MagickWand *wand,
2812%        const size_t number_factors,const double *sampling_factors)
2813%
2814%  A description of each parameter follows:
2815%
2816%    o wand: the magick wand.
2817%
2818%    o number_factoes: the number of factors.
2819%
2820%    o sampling_factors: An array of doubles representing the sampling factor
2821%      for each color component (in RGB order).
2822%
2823*/
2824WandExport MagickBooleanType MagickSetSamplingFactors(MagickWand *wand,
2825  const size_t number_factors,const double *sampling_factors)
2826{
2827  char
2828    sampling_factor[MagickPathExtent];
2829
2830  register ssize_t
2831    i;
2832
2833  assert(wand != (MagickWand *) NULL);
2834  assert(wand->signature == MagickWandSignature);
2835  if (wand->debug != MagickFalse)
2836    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2837
2838  if (wand->image_info->sampling_factor != (char *) NULL)
2839    wand->image_info->sampling_factor=(char *)
2840      RelinquishMagickMemory(wand->image_info->sampling_factor);
2841  if (number_factors == 0)
2842    return(MagickTrue);
2843  for (i=0; i < (ssize_t) (number_factors-1); i++)
2844  {
2845    (void) FormatLocaleString(sampling_factor,MagickPathExtent,"%g,",
2846      sampling_factors[i]);
2847    (void) ConcatenateString(&wand->image_info->sampling_factor,
2848      sampling_factor);
2849  }
2850  (void) FormatLocaleString(sampling_factor,MagickPathExtent,"%g",
2851    sampling_factors[i]);
2852  (void) ConcatenateString(&wand->image_info->sampling_factor,sampling_factor);
2853  return(MagickTrue);
2854}
2855
2856/*
2857%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2858%                                                                             %
2859%                                                                             %
2860%                                                                             %
2861%   M a g i c k S e t S i z e                                                 %
2862%                                                                             %
2863%                                                                             %
2864%                                                                             %
2865%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2866%
2867%  MagickSetSize() sets the size of the magick wand.  Set it before you
2868%  read a raw image format such as RGB, GRAY, or CMYK.
2869%
2870%  The format of the MagickSetSize method is:
2871%
2872%      MagickBooleanType MagickSetSize(MagickWand *wand,
2873%        const size_t columns,const size_t rows)
2874%
2875%  A description of each parameter follows:
2876%
2877%    o wand: the magick wand.
2878%
2879%    o columns: the width in pixels.
2880%
2881%    o rows: the rows in pixels.
2882%
2883*/
2884WandExport MagickBooleanType MagickSetSize(MagickWand *wand,
2885  const size_t columns,const size_t rows)
2886{
2887  char
2888    geometry[MagickPathExtent];
2889
2890  assert(wand != (MagickWand *) NULL);
2891  assert(wand->signature == MagickWandSignature);
2892  if (wand->debug != MagickFalse)
2893    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2894
2895  (void) FormatLocaleString(geometry,MagickPathExtent,"%.20gx%.20g",(double)
2896    columns,(double) rows);
2897  (void) CloneString(&wand->image_info->size,geometry);
2898  return(MagickTrue);
2899}
2900
2901/*
2902%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2903%                                                                             %
2904%                                                                             %
2905%                                                                             %
2906%   M a g i c k S e t S i z e O f f s e t                                     %
2907%                                                                             %
2908%                                                                             %
2909%                                                                             %
2910%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2911%
2912%  MagickSetSizeOffset() sets the size and offset of the magick wand.  Set it
2913%  before you read a raw image format such as RGB, GRAY, or CMYK.
2914%
2915%  The format of the MagickSetSizeOffset method is:
2916%
2917%      MagickBooleanType MagickSetSizeOffset(MagickWand *wand,
2918%        const size_t columns,const size_t rows,
2919%        const ssize_t offset)
2920%
2921%  A description of each parameter follows:
2922%
2923%    o wand: the magick wand.
2924%
2925%    o columns: the image width in pixels.
2926%
2927%    o rows: the image rows in pixels.
2928%
2929%    o offset: the image offset.
2930%
2931*/
2932WandExport MagickBooleanType MagickSetSizeOffset(MagickWand *wand,
2933  const size_t columns,const size_t rows,const ssize_t offset)
2934{
2935  char
2936    geometry[MagickPathExtent];
2937
2938  assert(wand != (MagickWand *) NULL);
2939  assert(wand->signature == MagickWandSignature);
2940  if (wand->debug != MagickFalse)
2941    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2942
2943  (void) FormatLocaleString(geometry,MagickPathExtent,"%.20gx%.20g%+.20g",
2944    (double) columns,(double) rows,(double) offset);
2945  (void) CloneString(&wand->image_info->size,geometry);
2946  return(MagickTrue);
2947}
2948
2949/*
2950%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2951%                                                                             %
2952%                                                                             %
2953%                                                                             %
2954%   M a g i c k S e t T y p e                                                 %
2955%                                                                             %
2956%                                                                             %
2957%                                                                             %
2958%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2959%
2960%  MagickSetType() sets the image type attribute.
2961%
2962%  The format of the MagickSetType method is:
2963%
2964%      MagickBooleanType MagickSetType(MagickWand *wand,
2965%        const ImageType image_type)
2966%
2967%  A description of each parameter follows:
2968%
2969%    o wand: the magick wand.
2970%
2971%    o image_type: the image type:   UndefinedType, BilevelType, GrayscaleType,
2972%      GrayscaleAlphaType, PaletteType, PaletteAlphaType, TrueColorType,
2973%      TrueColorAlphaType, ColorSeparationType, ColorSeparationAlphaType,
2974%      or OptimizeType.
2975%
2976*/
2977WandExport MagickBooleanType MagickSetType(MagickWand *wand,
2978  const ImageType image_type)
2979{
2980  assert(wand != (MagickWand *) NULL);
2981  assert(wand->signature == MagickWandSignature);
2982  if (wand->debug != MagickFalse)
2983    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2984
2985  wand->image_info->type=image_type;
2986  return(MagickTrue);
2987}
2988