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-2019 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 % https://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 */
MagickDeleteImageArtifact(MagickWand * wand,const char * artifact)80 WandExport 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 */
MagickDeleteImageProperty(MagickWand * wand,const char * property)122 WandExport 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 */
MagickDeleteOption(MagickWand * wand,const char * option)164 WandExport 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 */
MagickGetAntialias(const MagickWand * wand)198 WandExport 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 */
MagickGetBackgroundColor(MagickWand * wand)230 WandExport 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 */
MagickGetColorspace(MagickWand * wand)267 WandExport 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 */
MagickGetCompression(MagickWand * wand)299 WandExport 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 */
MagickGetCompressionQuality(MagickWand * wand)331 WandExport 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 */
MagickGetCopyright(void)360 WandExport 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 */
MagickGetFilename(const MagickWand * wand)387 WandExport 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 */
MagickGetFont(MagickWand * wand)419 WandExport 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 */
MagickGetFormat(MagickWand * wand)453 WandExport 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 */
MagickGetGravity(MagickWand * wand)485 WandExport 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 */
MagickGetHomeURL(void)523 WandExport 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 */
MagickGetImageArtifact(MagickWand * wand,const char * artifact)554 WandExport 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 */
MagickGetImageArtifacts(MagickWand * wand,const char * pattern,size_t * number_artifacts)606 WandExport 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 */
MagickGetImageProfile(MagickWand * wand,const char * name,size_t * length)694 WandExport 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) memcpy(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 */
MagickGetImageProfiles(MagickWand * wand,const char * pattern,size_t * number_profiles)760 WandExport 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 */
MagickGetImageProperty(MagickWand * wand,const char * property)847 WandExport 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 */
MagickGetImageProperties(MagickWand * wand,const char * pattern,size_t * number_properties)899 WandExport 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 */
MagickGetInterlaceScheme(MagickWand * wand)982 WandExport 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 */
MagickGetInterpolateMethod(MagickWand * wand)1014 WandExport 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 */
MagickGetOption(MagickWand * wand,const char * key)1061 WandExport 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 */
MagickGetOptions(MagickWand * wand,const char * pattern,size_t * number_options)1105 WandExport 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 */
MagickGetOrientation(MagickWand * wand)1187 WandExport 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 */
MagickGetPackageName(void)1217 WandExport 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 */
MagickGetPage(const MagickWand * wand,size_t * width,size_t * height,ssize_t * x,ssize_t * y)1253 WandExport 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) memset(&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 */
MagickGetPointsize(MagickWand * wand)1296 WandExport 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 */
MagickGetQuantumDepth(size_t * depth)1329 WandExport 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 */
MagickGetQuantumRange(size_t * range)1357 WandExport 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 */
MagickGetReleaseDate(void)1381 WandExport 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 */
MagickGetResolution(const MagickWand * wand,double * x,double * y)1413 WandExport 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 */
MagickGetResource(const ResourceType type)1462 WandExport 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 */
MagickGetResourceLimit(const ResourceType type)1489 WandExport 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 */
MagickGetSamplingFactors(MagickWand * wand,size_t * number_factors)1519 WandExport 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 */
MagickGetSize(const MagickWand * wand,size_t * columns,size_t * rows)1593 WandExport 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) memset(&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 */
MagickGetSizeOffset(const MagickWand * wand,ssize_t * offset)1637 WandExport 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) memset(&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 */
MagickGetType(MagickWand * wand)1676 WandExport 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 */
MagickGetVersion(size_t * version)1709 WandExport 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 */
MagickProfileImage(MagickWand * wand,const char * name,const void * profile,const size_t length)1746 WandExport 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 */
MagickRemoveImageProfile(MagickWand * wand,const char * name,size_t * length)1786 WandExport 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) memcpy(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 */
MagickSetAntialias(MagickWand * wand,const MagickBooleanType antialias)1846 WandExport 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 */
MagickSetBackgroundColor(MagickWand * wand,const PixelWand * background)1883 WandExport 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 */
MagickSetColorspace(MagickWand * wand,const ColorspaceType colorspace)1920 WandExport 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 */
MagickSetCompression(MagickWand * wand,const CompressionType compression)1957 WandExport 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 */
MagickSetCompressionQuality(MagickWand * wand,const size_t quality)1994 WandExport 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 */
MagickSetDepth(MagickWand * wand,const size_t depth)2031 WandExport 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 */
MagickSetExtract(MagickWand * wand,const char * geometry)2070 WandExport 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 */
MagickSetFilename(MagickWand * wand,const char * filename)2109 WandExport 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 */
MagickSetFont(MagickWand * wand,const char * font)2146 WandExport 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 */
MagickSetFormat(MagickWand * wand,const char * format)2183 WandExport 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 */
MagickSetGravity(MagickWand * wand,const GravityType type)2232 WandExport 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 */
MagickSetImageArtifact(MagickWand * wand,const char * artifact,const char * value)2275 WandExport 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 */
MagickSetImageProfile(MagickWand * wand,const char * name,const void * profile,const size_t length)2320 WandExport 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 */
MagickSetImageProperty(MagickWand * wand,const char * property,const char * value)2370 WandExport 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 */
MagickSetInterlaceScheme(MagickWand * wand,const InterlaceType interlace_scheme)2413 WandExport 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 */
MagickSetInterpolateMethod(MagickWand * wand,const PixelInterpolateMethod method)2450 WandExport 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 */
MagickSetOption(MagickWand * wand,const char * key,const char * value)2494 WandExport 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 */
MagickSetOrientation(MagickWand * wand,const OrientationType orientation)2530 WandExport 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 */
MagickSetPage(MagickWand * wand,const size_t width,const size_t height,const ssize_t x,const ssize_t y)2574 WandExport 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 */
MagickSetPassphrase(MagickWand * wand,const char * passphrase)2617 WandExport 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 */
MagickSetPointsize(MagickWand * wand,const double pointsize)2654 WandExport 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 */
MagickSetProgressMonitor(MagickWand * wand,const MagickProgressMonitor progress_monitor,void * client_data)2703 WandExport 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 */
MagickSetResourceLimit(const ResourceType type,const MagickSizeType limit)2746 WandExport 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 */
MagickSetResolution(MagickWand * wand,const double x_resolution,const double y_resolution)2779 WandExport 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 */
MagickSetSamplingFactors(MagickWand * wand,const size_t number_factors,const double * sampling_factors)2824 WandExport 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 e c u r i t y P o l i c y %
2862 % %
2863 % %
2864 % %
2865 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2866 %
2867 % MagickSetSecurityPolicy() sets the ImageMagick security policy. It returns
2868 % MagickFalse if the policy is already set or if the policy does not parse.
2869 %
2870 % The format of the MagickSetAntialias method is:
2871 %
2872 % MagickBooleanType MagickSetAntialias(MagickWand *wand,
2873 % const char *policy)
2874 %
2875 % A description of each parameter follows:
2876 %
2877 % o wand: the magick wand.
2878 %
2879 % o policy: the security policy in the XML format.
2880 %
2881 */
MagickSetSecurityPolicy(MagickWand * wand,const char * policy)2882 WandExport MagickBooleanType MagickSetSecurityPolicy(MagickWand *wand,
2883 const char *policy)
2884 {
2885 assert(wand != (MagickWand *) NULL);
2886 assert(wand->signature == MagickWandSignature);
2887 if (wand->debug != MagickFalse)
2888 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2889
2890 return(SetMagickSecurityPolicy(policy,wand->exception));
2891 }
2892
2893 /*
2894 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2895 % %
2896 % %
2897 % %
2898 % M a g i c k S e t S i z e %
2899 % %
2900 % %
2901 % %
2902 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2903 %
2904 % MagickSetSize() sets the size of the magick wand. Set it before you
2905 % read a raw image format such as RGB, GRAY, or CMYK.
2906 %
2907 % The format of the MagickSetSize method is:
2908 %
2909 % MagickBooleanType MagickSetSize(MagickWand *wand,
2910 % const size_t columns,const size_t rows)
2911 %
2912 % A description of each parameter follows:
2913 %
2914 % o wand: the magick wand.
2915 %
2916 % o columns: the width in pixels.
2917 %
2918 % o rows: the rows in pixels.
2919 %
2920 */
MagickSetSize(MagickWand * wand,const size_t columns,const size_t rows)2921 WandExport MagickBooleanType MagickSetSize(MagickWand *wand,
2922 const size_t columns,const size_t rows)
2923 {
2924 char
2925 geometry[MagickPathExtent];
2926
2927 assert(wand != (MagickWand *) NULL);
2928 assert(wand->signature == MagickWandSignature);
2929 if (wand->debug != MagickFalse)
2930 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2931
2932 (void) FormatLocaleString(geometry,MagickPathExtent,"%.20gx%.20g",(double)
2933 columns,(double) rows);
2934 (void) CloneString(&wand->image_info->size,geometry);
2935 return(MagickTrue);
2936 }
2937
2938 /*
2939 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2940 % %
2941 % %
2942 % %
2943 % M a g i c k S e t S i z e O f f s e t %
2944 % %
2945 % %
2946 % %
2947 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2948 %
2949 % MagickSetSizeOffset() sets the size and offset of the magick wand. Set it
2950 % before you read a raw image format such as RGB, GRAY, or CMYK.
2951 %
2952 % The format of the MagickSetSizeOffset method is:
2953 %
2954 % MagickBooleanType MagickSetSizeOffset(MagickWand *wand,
2955 % const size_t columns,const size_t rows,
2956 % const ssize_t offset)
2957 %
2958 % A description of each parameter follows:
2959 %
2960 % o wand: the magick wand.
2961 %
2962 % o columns: the image width in pixels.
2963 %
2964 % o rows: the image rows in pixels.
2965 %
2966 % o offset: the image offset.
2967 %
2968 */
MagickSetSizeOffset(MagickWand * wand,const size_t columns,const size_t rows,const ssize_t offset)2969 WandExport MagickBooleanType MagickSetSizeOffset(MagickWand *wand,
2970 const size_t columns,const size_t rows,const ssize_t offset)
2971 {
2972 char
2973 geometry[MagickPathExtent];
2974
2975 assert(wand != (MagickWand *) NULL);
2976 assert(wand->signature == MagickWandSignature);
2977 if (wand->debug != MagickFalse)
2978 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
2979
2980 (void) FormatLocaleString(geometry,MagickPathExtent,"%.20gx%.20g%+.20g",
2981 (double) columns,(double) rows,(double) offset);
2982 (void) CloneString(&wand->image_info->size,geometry);
2983 return(MagickTrue);
2984 }
2985
2986 /*
2987 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2988 % %
2989 % %
2990 % %
2991 % M a g i c k S e t T y p e %
2992 % %
2993 % %
2994 % %
2995 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2996 %
2997 % MagickSetType() sets the image type attribute.
2998 %
2999 % The format of the MagickSetType method is:
3000 %
3001 % MagickBooleanType MagickSetType(MagickWand *wand,
3002 % const ImageType image_type)
3003 %
3004 % A description of each parameter follows:
3005 %
3006 % o wand: the magick wand.
3007 %
3008 % o image_type: the image type: UndefinedType, BilevelType, GrayscaleType,
3009 % GrayscaleAlphaType, PaletteType, PaletteAlphaType, TrueColorType,
3010 % TrueColorAlphaType, ColorSeparationType, ColorSeparationAlphaType,
3011 % or OptimizeType.
3012 %
3013 */
MagickSetType(MagickWand * wand,const ImageType image_type)3014 WandExport MagickBooleanType MagickSetType(MagickWand *wand,
3015 const ImageType image_type)
3016 {
3017 assert(wand != (MagickWand *) NULL);
3018 assert(wand->signature == MagickWandSignature);
3019 if (wand->debug != MagickFalse)
3020 (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
3021
3022 wand->image_info->type=image_type;
3023 return(MagickTrue);
3024 }
3025