%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% FormatImageProperty() permits formatted property/value pairs to be saved as
-% an image proporty.
+% an image property.
%
% The format of the FormatImageProperty method is:
%
length;
/*
- There's no newlines in path names, so it's safe as terminator.
+ There are no newlines in path names, so it's safe as terminator.
*/
profile=GetImageProfile(image,"8bim");
if (profile == (StringInfo *) NULL)
EndianType
endian;
- ssize_t
- all,
- id,
- level,
- tag_value;
+ MagickBooleanType
+ status;
register ssize_t
i;
size_t
- length;
+ entry,
+ length,
+ number_entries,
+ tag_offset,
+ tag;
ssize_t
- offset;
+ all,
+ id,
+ level,
+ offset,
+ tag_value;
static int
tag_bytes[] = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8};
- size_t
- entry,
- number_entries,
- tag_offset,
- tag;
-
/*
If EXIF data exists, then try to parse the request for a tag.
*/
/*
Set the pointer to the first IFD and follow it were it leads.
*/
+ status=MagickFalse;
directory=exif+offset;
level=0;
entry=0;
number_entries=ReadPropertyShort(endian,directory);
for ( ; entry < number_entries; entry++)
{
- ssize_t
- components;
-
register unsigned char
*p,
*q;
size_t
+ format,
number_bytes;
- size_t
- format;
+ ssize_t
+ components;
q=(unsigned char *) (directory+2+(12*entry));
tag_value=(ssize_t) (ReadPropertyShort(endian,q)+tag_offset);
if (p == (const char *) NULL)
(void) SetImageProperty((Image *) image,key,value);
value=DestroyString(value);
+ status=MagickTrue;
}
}
if ((tag_value == TAG_EXIF_OFFSET) ||
}
}
} while (level > 0);
- return(MagickTrue);
+ return(status);
}
static MagickBooleanType GetXMPProperty(const Image *image,
*path,
*message;
- ssize_t
- knot_count,
- selector,
- y;
-
MagickBooleanType
in_subpath;
i,
x;
+ ssize_t
+ knot_count,
+ selector,
+ y;
+
path=AcquireString((char *) NULL);
if (path == (char *) NULL)
return((char *) NULL);
*path,
*message;
- ssize_t
- knot_count,
- selector,
- x,
- y;
-
MagickBooleanType
in_subpath;
register ssize_t
i;
+ ssize_t
+ knot_count,
+ selector,
+ x,
+ y;
+
path=AcquireString((char *) NULL);
if (path == (char *) NULL)
return((char *) NULL);
*/
for (i=0; i < 3; i++)
{
- size_t
+ size_t
xx,
yy;
if (image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
p=(const char *) NULL;
- if (property == (const char *) NULL)
- {
- ResetSplayTreeIterator((SplayTreeInfo *) image->properties);
- p=(const char *) GetNextValueInSplayTree((SplayTreeInfo *)
- image->properties);
- return(p);
- }
if (image->properties != (void *) NULL)
{
- p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
- image->properties,property);
- if (p != (const char *) NULL)
- return(p);
+ if (property == (const char *) NULL)
+ {
+ ResetSplayTreeIterator((SplayTreeInfo *) image->properties);
+ p=(const char *) GetNextValueInSplayTree((SplayTreeInfo *)
+ image->properties);
+ return(p);
+ }
+ if (LocaleNCompare("fx:",property,3) != 0)
+ {
+ p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
+ image->properties,property);
+ if (p != (const char *) NULL)
+ return(p);
+ }
}
- if (strchr(property,':') == (char *) NULL)
+ if ((property == (const char *) NULL) ||
+ (strchr(property,':') == (char *) NULL))
return(p);
exception=(&((Image *) image)->exception);
switch (*property)
{
if (LocaleNCompare("8bim:",property,5) == 0)
{
- if (Get8BIMProperty(image,property) != MagickFalse)
+ if ((Get8BIMProperty(image,property) != MagickFalse) &&
+ (image->properties != (void *) NULL))
{
p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
image->properties,property);
{
if (LocaleNCompare("exif:",property,5) == 0)
{
- if (GetEXIFProperty(image,property) != MagickFalse)
+ if ((GetEXIFProperty(image,property) != MagickFalse) &&
+ (image->properties != (void *) NULL))
{
p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
image->properties,property);
GetMagickPrecision(),(double) alpha);
(void) SetImageProperty((Image *) image,property,value);
}
- p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
- image->properties,property);
- return(p);
+ if (image->properties != (void *) NULL)
+ {
+ p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
+ image->properties,property);
+ return(p);
+ }
}
break;
}
{
if (LocaleNCompare("iptc:",property,5) == 0)
{
- if (GetIPTCProperty(image,property) != MagickFalse)
+ if ((GetIPTCProperty(image,property) != MagickFalse) &&
+ (image->properties != (void *) NULL))
{
p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
image->properties,property);
{
if (LocaleNCompare("xmp:",property,4) == 0)
{
- if (GetXMPProperty(image,property) != MagickFalse)
+ if ((GetXMPProperty(image,property) != MagickFalse) &&
+ (image->properties != (void *) NULL))
{
p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
image->properties,property);
}
break;
}
+ default:
+ break;
}
return(p);
}
Image channels.
*/
(void) FormatMagickString(value,MaxTextExtent,"%s",
- MagickOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
+ CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
image->colorspace));
LocaleLower(value);
if (image->matte != MagickFalse)
if (IsGrayImage(image,&image->exception) != MagickFalse)
colorspace=GRAYColorspace;
(void) FormatMagickString(value,MaxTextExtent,"%s",
- MagickOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
+ CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
colorspace));
break;
}
}
case 'o':
{
+ if (LocaleNCompare("opaque",property,6) == 0)
+ {
+ MagickBooleanType
+ opaque;
+
+ opaque=IsOpaqueImage(image,&image->exception);
+ (void) CopyMagickString(value,opaque == MagickFalse ? "false" :
+ "true",MaxTextExtent);
+ break;
+ }
if (LocaleNCompare("output",property,6) == 0)
{
(void) CopyMagickString(value,image_info->filename,MaxTextExtent);
{
if (LocaleNCompare("page",property,4) == 0)
{
- register const Image
- *p;
-
- size_t
- page;
-
- p=image;
- for (page=1; GetPreviousImageInList(p) != (Image *) NULL; page++)
- p=GetPreviousImageInList(p);
(void) FormatMagickString(value,MaxTextExtent,"%.20g",(double)
- page);
+ GetImageIndexInList(image)+1);
break;
}
break;
const char
*value;
- ImageInfo
- *text_info;
-
register char
*q;
/*
Translate any embedded format characters.
*/
- text_info=CloneImageInfo(image_info);
interpret_text=AcquireString(text);
extent=MaxTextExtent;
p=text;
if ((size_t) (q-interpret_text+length+1) >= extent)
{
extent+=length;
- interpret_text=(char *) ResizeQuantumMemory(interpret_text,
- extent+MaxTextExtent,sizeof(*interpret_text));
+ interpret_text=(char *) ResizeQuantumMemory(interpret_text,extent+
+ MaxTextExtent,sizeof(*interpret_text));
if (interpret_text == (char *) NULL)
break;
q=interpret_text+strlen(interpret_text);
Image geometry.
*/
q+=FormatMagickString(q,extent,"%.20gx%.20g%+.20g%+.20g",(double)
- image->page.width,(double) image->page.height,(double)
- image->page.x,(double) image->page.y);
+ image->page.width,(double) image->page.height,(double) image->page.x,
+ (double) image->page.y);
break;
}
case 'h':
/*
Image height.
*/
- q+=FormatMagickString(q,extent,"%.20g",(double)
- (image->rows != 0 ? image->rows : image->magick_rows));
+ q+=FormatMagickString(q,extent,"%.20g",(double) (image->rows != 0 ?
+ image->rows : image->magick_rows));
break;
}
case 'i':
/*
Number of unique colors.
*/
- q+=FormatMagickString(q,extent,"%.20g",(double)
- GetNumberColors(image,(FILE *) NULL,&image->exception));
+ q+=FormatMagickString(q,extent,"%.20g",(double) GetNumberColors(image,
+ (FILE *) NULL,&image->exception));
break;
}
case 'l':
if ((size_t) (q-interpret_text+length+1) >= extent)
{
extent+=length;
- interpret_text=(char *) ResizeQuantumMemory(interpret_text,
- extent+MaxTextExtent,sizeof(*interpret_text));
+ interpret_text=(char *) ResizeQuantumMemory(interpret_text,extent+
+ MaxTextExtent,sizeof(*interpret_text));
if (interpret_text == (char *) NULL)
break;
q=interpret_text+strlen(interpret_text);
Number of images in the list.
*/
q+=FormatMagickString(q,extent,"%.20g",(double)
- GetImageListLength(image));
+ GetImageListLength(image));
break;
}
case 'o':
/*
Image output filename.
*/
- q+=CopyMagickString(q,text_info->filename,extent);
+ q+=CopyMagickString(q,image_info->filename,extent);
break;
}
case 'p':
{
- register const Image
- *p;
-
- size_t
- page;
-
/*
- Image page number.
+ Image index in list.
*/
- p=image;
- for (page=1; GetPreviousImageInList(p) != (Image *) NULL; page++)
- p=GetPreviousImageInList(p);
- q+=FormatMagickString(q,extent,"%.20g",(double) page);
+ q+=FormatMagickString(q,extent,"%.20g",(double)
+ GetImageIndexInList(image));
break;
}
case 'q':
colorspace=image->colorspace;
if (IsGrayImage(image,&image->exception) != MagickFalse)
colorspace=GRAYColorspace;
- q+=FormatMagickString(q,extent,"%s%s%s",MagickOptionToMnemonic(
+ q+=FormatMagickString(q,extent,"%s%s%s",CommandOptionToMnemonic(
MagickClassOptions,(ssize_t) image->storage_class),
- MagickOptionToMnemonic(MagickColorspaceOptions,(ssize_t) colorspace),
+ CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t) colorspace),
image->matte != MagickFalse ? "Matte" : "");
break;
}
/*
Image scene number.
*/
- if (text_info->number_scenes == 0)
+ if (image_info->number_scenes == 0)
q+=FormatMagickString(q,extent,"%.20g",(double) image->scene);
else
- q+=FormatMagickString(q,extent,"%.20g",(double) text_info->scene);
+ q+=FormatMagickString(q,extent,"%.20g",(double) image_info->scene);
break;
}
case 'u':
/*
Unique filename.
*/
- (void) CopyMagickString(filename,text_info->unique,extent);
+ (void) CopyMagickString(filename,image_info->unique,extent);
q+=CopyMagickString(q,filename,extent);
break;
}
/*
Image width.
*/
- q+=FormatMagickString(q,extent,"%.20g",(double)
- (image->columns != 0 ? image->columns : image->magick_columns));
+ q+=FormatMagickString(q,extent,"%.20g",(double) (image->columns != 0 ?
+ image->columns : image->magick_columns));
break;
}
case 'x':
Image horizontal resolution.
*/
q+=FormatMagickString(q,extent,"%g %s",image->x_resolution,
- MagickOptionToMnemonic(MagickResolutionOptions,(ssize_t)
+ CommandOptionToMnemonic(MagickResolutionOptions,(ssize_t)
image->units));
break;
}
Image vertical resolution.
*/
q+=FormatMagickString(q,extent,"%g %s",image->y_resolution,
- MagickOptionToMnemonic(MagickResolutionOptions,(ssize_t)
+ CommandOptionToMnemonic(MagickResolutionOptions,(ssize_t)
image->units));
break;
}
/*
Image alpha channel.
*/
- q+=FormatMagickString(q,extent,"%s",MagickOptionToMnemonic(
+ q+=FormatMagickString(q,extent,"%s",CommandOptionToMnemonic(
MagickBooleanOptions,(ssize_t) image->matte));
break;
}
/*
Image compression method.
*/
- q+=FormatMagickString(q,extent,"%s",MagickOptionToMnemonic(
+ q+=FormatMagickString(q,extent,"%s",CommandOptionToMnemonic(
MagickCompressOptions,(ssize_t) image->compression));
break;
}
/*
Image dispose method.
*/
- q+=FormatMagickString(q,extent,"%s",MagickOptionToMnemonic(
+ q+=FormatMagickString(q,extent,"%s",CommandOptionToMnemonic(
MagickDisposeOptions,(ssize_t) image->dispose));
break;
}
}
case 'H':
{
- q+=FormatMagickString(q,extent,"%.20g",(double)
- image->page.height);
+ q+=FormatMagickString(q,extent,"%.20g",(double) image->page.height);
break;
}
case 'O':
{
- q+=FormatMagickString(q,extent,"%+ld%+ld",(long) image->page.x,
- (long) image->page.y);
+ q+=FormatMagickString(q,extent,"%+ld%+ld",(long) image->page.x,(long)
+ image->page.y);
break;
}
case 'P':
/*
Image scenes.
*/
- if (text_info->number_scenes == 0)
+ if (image_info->number_scenes == 0)
q+=CopyMagickString(q,"2147483647",extent);
else
- q+=FormatMagickString(q,extent,"%.20g",(double)
- (text_info->scene+text_info->number_scenes));
+ q+=FormatMagickString(q,extent,"%.20g",(double) (image_info->scene+
+ image_info->number_scenes));
break;
}
case 'T':
/*
Unique filename.
*/
- (void) CopyMagickString(filename,text_info->zero,extent);
+ (void) CopyMagickString(filename,image_info->zero,extent);
q+=CopyMagickString(q,filename,extent);
break;
}
key=GetNextImageProperty(image);
}
}
- value=GetMagickProperty(text_info,image,pattern);
+ value=GetMagickProperty(image_info,image,pattern);
if (value != (const char *) NULL)
{
length=strlen(value);
}
}
*q='\0';
- text_info=DestroyImageInfo(text_info);
if (text != (const char *) embed_text)
text=DestroyString(text);
(void) SubstituteString(&interpret_text,"<","<");
ssize_t
colorspace;
- colorspace=ParseMagickOption(MagickColorspaceOptions,MagickFalse,
+ colorspace=ParseCommandOption(MagickColorspaceOptions,MagickFalse,
value);
if (colorspace < 0)
break;
ssize_t
compose;
- compose=ParseMagickOption(MagickComposeOptions,MagickFalse,value);
+ compose=ParseCommandOption(MagickComposeOptions,MagickFalse,value);
if (compose < 0)
break;
image->compose=(CompositeOperator) compose;
ssize_t
compression;
- compression=ParseMagickOption(MagickCompressOptions,MagickFalse,
+ compression=ParseCommandOption(MagickCompressOptions,MagickFalse,
value);
if (compression < 0)
break;
ssize_t
dispose;
- dispose=ParseMagickOption(MagickDisposeOptions,MagickFalse,value);
+ dispose=ParseCommandOption(MagickDisposeOptions,MagickFalse,value);
if (dispose < 0)
break;
image->dispose=(DisposeType) dispose;
ssize_t
gravity;
- gravity=ParseMagickOption(MagickGravityOptions,MagickFalse,value);
+ gravity=ParseCommandOption(MagickGravityOptions,MagickFalse,value);
if (gravity < 0)
break;
image->gravity=(GravityType) gravity;
ssize_t
rendering_intent;
- rendering_intent=ParseMagickOption(MagickIntentOptions,MagickFalse,
+ rendering_intent=ParseCommandOption(MagickIntentOptions,MagickFalse,
value);
if (rendering_intent < 0)
break;
ssize_t
interpolate;
- interpolate=ParseMagickOption(MagickInterpolateOptions,MagickFalse,
+ interpolate=ParseCommandOption(MagickInterpolateOptions,MagickFalse,
value);
if (interpolate < 0)
break;
ssize_t
rendering_intent;
- rendering_intent=ParseMagickOption(MagickIntentOptions,MagickFalse,
+ rendering_intent=ParseCommandOption(MagickIntentOptions,MagickFalse,
value);
if (rendering_intent < 0)
break;
ssize_t
units;
- units=ParseMagickOption(MagickResolutionOptions,MagickFalse,value);
+ units=ParseCommandOption(MagickResolutionOptions,MagickFalse,value);
if (units < 0)
break;
image->units=(ResolutionType) units;