43 #include "magick/studio.h"
44 #include "magick/artifact.h"
45 #include "magick/cache.h"
46 #include "magick/color.h"
47 #include "magick/compare.h"
48 #include "magick/constitute.h"
49 #include "magick/draw.h"
50 #include "magick/effect.h"
51 #include "magick/exception.h"
52 #include "magick/exception-private.h"
53 #include "magick/fx.h"
54 #include "magick/fx-private.h"
55 #include "magick/gem.h"
56 #include "magick/geometry.h"
57 #include "magick/image.h"
58 #include "magick/layer.h"
59 #include "magick/list.h"
60 #include "magick/memory_.h"
61 #include "magick/monitor.h"
62 #include "magick/montage.h"
63 #include "magick/option.h"
64 #include "magick/profile.h"
65 #include "magick/quantum.h"
66 #include "magick/resource_.h"
67 #include "magick/splay-tree.h"
68 #include "magick/signature-private.h"
69 #include "magick/statistic.h"
70 #include "magick/string_.h"
71 #include "magick/token.h"
72 #include "magick/utility.h"
73 #include "magick/xml-tree.h"
100 MagickExport MagickBooleanType CloneImageArtifacts(
Image *image,
101 const Image *clone_image)
103 assert(image != (
Image *) NULL);
104 assert(image->signature == MagickCoreSignature);
105 assert(clone_image != (
const Image *) NULL);
106 assert(clone_image->signature == MagickCoreSignature);
107 if (IsEventLogging() != MagickFalse)
109 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
110 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",
111 clone_image->filename);
113 if (clone_image->artifacts != (
void *) NULL)
115 if (image->artifacts != (
void *) NULL)
116 DestroyImageArtifacts(image);
117 image->artifacts=CloneSplayTree((
SplayTreeInfo *) clone_image->artifacts,
118 (
void *(*)(
void *)) ConstantString,(
void *(*)(
void *)) ConstantString);
148 MagickExport MagickBooleanType DefineImageArtifact(
Image *image,
149 const char *artifact)
153 value[MaxTextExtent];
158 assert(image != (
Image *) NULL);
159 assert(artifact != (
const char *) NULL);
160 (void) CopyMagickString(key,artifact,MaxTextExtent-1);
161 for (p=key; *p !=
'\0'; p++)
166 (void) CopyMagickString(value,p+1,MaxTextExtent);
168 return(SetImageArtifact(image,key,value));
195 MagickExport MagickBooleanType DeleteImageArtifact(
Image *image,
196 const char *artifact)
198 assert(image != (
Image *) NULL);
199 assert(image->signature == MagickCoreSignature);
200 if (IsEventLogging() != MagickFalse)
201 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
202 if (image->artifacts == (
void *) NULL)
204 return(DeleteNodeFromSplayTree((
SplayTreeInfo *) image->artifacts,artifact));
230 MagickExport
void DestroyImageArtifacts(
Image *image)
232 assert(image != (
Image *) NULL);
233 assert(image->signature == MagickCoreSignature);
234 if (IsEventLogging() != MagickFalse)
235 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
236 if (image->artifacts != (
void *) NULL)
267 MagickExport
const char *GetImageArtifact(
const Image *image,
268 const char *artifact)
273 assert(image != (
Image *) NULL);
274 assert(image->signature == MagickCoreSignature);
275 if (IsEventLogging() != MagickFalse)
276 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
277 p=(
const char *) NULL;
278 if (artifact == (
const char *) NULL)
285 if (image->artifacts != (
void *) NULL)
287 p=(
const char *) GetValueFromSplayTree((
SplayTreeInfo *) image->artifacts,
289 if (p != (
const char *) NULL)
317 MagickExport
char *GetNextImageArtifact(
const Image *image)
319 assert(image != (
Image *) NULL);
320 assert(image->signature == MagickCoreSignature);
321 if (IsEventLogging() != MagickFalse)
322 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
323 if (image->artifacts == (
void *) NULL)
324 return((
char *) NULL);
325 return((
char *) GetNextKeyInSplayTree((
SplayTreeInfo *) image->artifacts));
353 MagickExport
char *RemoveImageArtifact(
Image *image,
const char *artifact)
358 assert(image != (
Image *) NULL);
359 assert(image->signature == MagickCoreSignature);
360 if (IsEventLogging() != MagickFalse)
361 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
362 if (image->artifacts == (
void *) NULL)
363 return((
char *) NULL);
364 value=(
char *) RemoveNodeFromSplayTree((
SplayTreeInfo *) image->artifacts,
393 MagickExport
void ResetImageArtifactIterator(
const Image *image)
395 assert(image != (
Image *) NULL);
396 assert(image->signature == MagickCoreSignature);
397 if (IsEventLogging() != MagickFalse)
398 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
399 if (image->artifacts == (
void *) NULL)
435 MagickExport MagickBooleanType SetImageArtifact(
Image *image,
436 const char *artifact,
const char *value)
441 assert(image != (
Image *) NULL);
442 assert(image->signature == MagickCoreSignature);
443 if (IsEventLogging() != MagickFalse)
444 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
448 if (image->artifacts == (
void *) NULL)
449 image->artifacts=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory,
450 RelinquishMagickMemory);
454 if (value == (
const char *) NULL)
455 return(DeleteImageArtifact(image,artifact));
459 status=AddValueToSplayTree((
SplayTreeInfo *) image->artifacts,
460 ConstantString(artifact),ConstantString(value));