% March 2000 %
% %
% %
-% Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization %
% dedicated to making software imaging solutions freely available. %
% %
% You may not use this file except in compliance with the License. You may %
#include "magick/string-private.h"
#include "magick/token.h"
#include "magick/utility.h"
+#include "magick/version.h"
#include "magick/xml-tree.h"
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% FormatImageProperty() permits formatted property/value pairs to be saved as
-% an image proporty.
+% an image property.
%
% The format of the FormatImageProperty method is:
%
% arguments.
%
*/
-
-MagickExport MagickBooleanType FormatImagePropertyList(Image *image,
- const char *property,const char *format,va_list operands)
+MagickExport MagickBooleanType FormatImageProperty(Image *image,
+ const char *property,const char *format,...)
{
char
value[MaxTextExtent];
- int
+ ssize_t
n;
-#if defined(MAGICKCORE_HAVE_VSNPRINTF)
- n=vsnprintf(value,MaxTextExtent,format,operands);
-#else
- n=vsprintf(value,format,operands);
-#endif
- if (n < 0)
- value[MaxTextExtent-1]='\0';
- return(SetImageProperty(image,property,value));
-}
-
-MagickExport MagickBooleanType FormatImageProperty(Image *image,
- const char *property,const char *format,...)
-{
- MagickBooleanType
- status;
-
va_list
operands;
va_start(operands,format);
- status=FormatImagePropertyList(image,property,format,operands);
+ n=FormatLocaleStringList(value,MaxTextExtent,format,operands);
+ (void) n;
va_end(operands);
- return(status);
+ return(SetImageProperty(image,property,value));
}
\f
/*
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)
*name='\0';
sub_number=1;
if (*name == '#')
- sub_number=StringToLong(&name[1]);
+ sub_number=(ssize_t) StringToLong(&name[1]);
sub_number=MagickMax(sub_number,1L);
resource=(char *) NULL;
status=MagickFalse;
if ((count != 0) && ((size_t) count <= length))
{
resource=(char *) NULL;
- if (~(1UL*count) >= MaxTextExtent)
+ if (~(1UL*count) >= (MaxTextExtent-1))
resource=(char *) AcquireQuantumMemory((size_t) count+MaxTextExtent,
sizeof(*resource));
if (resource != (char *) NULL)
}
if ((count & 0x01) == 0)
(void) ReadPropertyByte(&info,&length);
- count=(ssize_t) ReadPropertyMSBLong(&info,&length);
+ count=(ssize_t) ((int) ReadPropertyMSBLong(&info,&length));
if ((*name != '\0') && (*name != '#'))
if ((resource == (char *) NULL) || (LocaleCompare(name,resource) != 0))
{
We have the resource of interest.
*/
attribute=(char *) NULL;
- if (~(1UL*count) >= MaxTextExtent)
+ if (~(1UL*count) >= (MaxTextExtent-1))
attribute=(char *) AcquireQuantumMemory((size_t) count+MaxTextExtent,
sizeof(*attribute));
if (attribute != (char *) NULL)
p1=p; \
for (component=0; component < components; component++) \
{ \
- length+=FormatMagickString(buffer+length,MaxTextExtent-length, \
+ length+=FormatLocaleString(buffer+length,MaxTextExtent-length, \
format", ",arg); \
- if (length >= MaxTextExtent - 1) \
+ if (length >= (MaxTextExtent-1)) \
length=MaxTextExtent-1; \
p1+=size; \
} \
p1=p; \
for (component=0; component < components; component++) \
{ \
- length+=FormatMagickString(buffer+length,MaxTextExtent-length, \
+ length+=FormatLocaleString(buffer+length,MaxTextExtent-length, \
format", ",arg1, arg2); \
- if (length >= MaxTextExtent - 1) \
+ if (length >= (MaxTextExtent-1)) \
length=MaxTextExtent-1; \
p1+=size; \
} \
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.
*/
/*
This the offset to the first IFD.
*/
- offset=(ssize_t) ReadPropertyLong(endian,exif+4);
+ offset=(ssize_t) ((int) ReadPropertyLong(endian,exif+4));
if ((size_t) offset >= length)
return(MagickFalse);
/*
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);
format=(size_t) ReadPropertyShort(endian,q+2);
if (format >= (sizeof(tag_bytes)/sizeof(*tag_bytes)))
break;
- components=(ssize_t) ReadPropertyLong(endian,q+4);
+ components=(ssize_t) ((int) ReadPropertyLong(endian,q+4));
number_bytes=(size_t) components*tag_bytes[format];
if (number_bytes <= 4)
p=q+8;
/*
The directory entry contains an offset.
*/
- offset=(ssize_t) ReadPropertyLong(endian,q+8);
+ offset=(ssize_t) ((int) ReadPropertyLong(endian,q+8));
if ((size_t) (offset+number_bytes) > length)
continue;
p=(unsigned char *) (exif+offset);
case EXIF_FMT_BYTE:
case EXIF_FMT_UNDEFINED:
{
- EXIFMultipleValues(1,"%lu",(unsigned long)
+ EXIFMultipleValues(1,"%.20g",(double)
(*(unsigned char *) p1));
break;
}
case EXIF_FMT_SBYTE:
{
- EXIFMultipleValues(1,"%ld",(long) (*(signed char *) p1));
+ EXIFMultipleValues(1,"%.20g",(double) (*(signed char *) p1));
break;
}
case EXIF_FMT_SSHORT:
}
case EXIF_FMT_ULONG:
{
- EXIFMultipleValues(4,"%lu",(long) ReadPropertyLong(endian,p1));
+ EXIFMultipleValues(4,"%.20g",(double)
+ ReadPropertyLong(endian,p1));
break;
}
case EXIF_FMT_SLONG:
{
- EXIFMultipleValues(4,"%ld",(long) ReadPropertyLong(endian,p1));
+ EXIFMultipleValues(4,"%.20g",(double)
+ ReadPropertyLong(endian,p1));
break;
}
case EXIF_FMT_URATIONAL:
{
- EXIFMultipleFractions(8,"%ld/%ld",(long)
- ReadPropertyLong(endian,p1),(long)
+ EXIFMultipleFractions(8,"%.20g/%.20g",(double)
+ ReadPropertyLong(endian,p1),(double)
ReadPropertyLong(endian,p1+4));
break;
}
case EXIF_FMT_SRATIONAL:
{
- EXIFMultipleFractions(8,"%ld/%ld",(long)
- ReadPropertyLong(endian,p1),(long)
+ EXIFMultipleFractions(8,"%.20g/%.20g",(double)
+ ReadPropertyLong(endian,p1),(double)
ReadPropertyLong(endian,p1+4));
break;
}
break;
}
}
- (void) FormatMagickString(key,MaxTextExtent,"%s",
+ (void) FormatLocaleString(key,MaxTextExtent,"%s",
description);
break;
}
case 2:
{
if (tag_value < 0x10000)
- (void) FormatMagickString(key,MaxTextExtent,"#%04lx",
+ (void) FormatLocaleString(key,MaxTextExtent,"#%04lx",
(unsigned long) tag_value);
else
if (tag_value < 0x20000)
- (void) FormatMagickString(key,MaxTextExtent,"@%04lx",
+ (void) FormatLocaleString(key,MaxTextExtent,"@%04lx",
(unsigned long) (tag_value & 0xffff));
else
- (void) FormatMagickString(key,MaxTextExtent,"unknown");
+ (void) FormatLocaleString(key,MaxTextExtent,"unknown");
break;
}
}
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);
message=AcquireString((char *) NULL);
- (void) FormatMagickString(message,MaxTextExtent,"/ClipImage\n");
+ (void) FormatLocaleString(message,MaxTextExtent,"/ClipImage\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,"{\n");
+ (void) FormatLocaleString(message,MaxTextExtent,"{\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent," /c {curveto} bind def\n");
+ (void) FormatLocaleString(message,MaxTextExtent," /c {curveto} bind def\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent," /l {lineto} bind def\n");
+ (void) FormatLocaleString(message,MaxTextExtent," /l {lineto} bind def\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent," /m {moveto} bind def\n");
+ (void) FormatLocaleString(message,MaxTextExtent," /m {moveto} bind def\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" /v {currentpoint 6 2 roll curveto} bind def\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" /y {2 copy curveto} bind def\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" /z {closepath} bind def\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent," newpath\n");
+ (void) FormatLocaleString(message,MaxTextExtent," newpath\n");
(void) ConcatenateString(&path,message);
/*
The clipping path format is defined in "Adobe Photoshop File
*/
for (i=0; i < 3; i++)
{
- size_t
+ size_t
xx,
yy;
xx=ReadPropertyMSBLong(&blob,&length);
x=(ssize_t) xx;
if (xx > 2147483647)
- x=(ssize_t) xx-4294967295-1;
+ x=(ssize_t) xx-4294967295U-1;
y=(ssize_t) yy;
if (yy > 2147483647)
- y=(ssize_t) yy-4294967295-1;
+ y=(ssize_t) yy-4294967295U-1;
point[i].x=(double) x/4096/4096;
point[i].y=1.0-(double) y/4096/4096;
}
if (in_subpath == MagickFalse)
{
- (void) FormatMagickString(message,MaxTextExtent," %g %g m\n",
+ (void) FormatLocaleString(message,MaxTextExtent," %g %g m\n",
point[1].x,point[1].y);
for (i=0; i < 3; i++)
{
*/
if ((last[1].x == last[2].x) && (last[1].y == last[2].y) &&
(point[0].x == point[1].x) && (point[0].y == point[1].y))
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" %g %g l\n",point[1].x,point[1].y);
else
if ((last[1].x == last[2].x) && (last[1].y == last[2].y))
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" %g %g %g %g v\n",point[0].x,point[0].y,
point[1].x,point[1].y);
else
if ((point[0].x == point[1].x) && (point[0].y == point[1].y))
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" %g %g %g %g y\n",last[2].x,last[2].y,
point[1].x,point[1].y);
else
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" %g %g %g %g %g %g c\n",last[2].x,
last[2].y,point[0].x,point[0].y,point[1].x,point[1].y);
for (i=0; i < 3; i++)
*/
if ((last[1].x == last[2].x) && (last[1].y == last[2].y) &&
(first[0].x == first[1].x) && (first[0].y == first[1].y))
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" %g %g l z\n",first[1].x,first[1].y);
else
if ((last[1].x == last[2].x) && (last[1].y == last[2].y))
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" %g %g %g %g v z\n",first[0].x,first[0].y,
first[1].x,first[1].y);
else
if ((first[0].x == first[1].x) && (first[0].y == first[1].y))
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" %g %g %g %g y z\n",last[2].x,last[2].y,
first[1].x,first[1].y);
else
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
" %g %g %g %g %g %g c z\n",last[2].x,
last[2].y,first[0].x,first[0].y,first[1].x,first[1].y);
(void) ConcatenateString(&path,message);
/*
Returns an empty PS path if the path has no knots.
*/
- (void) FormatMagickString(message,MaxTextExtent," eoclip\n");
+ (void) FormatLocaleString(message,MaxTextExtent," eoclip\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,"} bind def");
+ (void) FormatLocaleString(message,MaxTextExtent,"} bind def");
(void) ConcatenateString(&path,message);
message=DestroyString(message);
return(path);
*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);
message=AcquireString((char *) NULL);
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,
- "<svg width=\"%lu\" height=\"%lu\">\n",(unsigned long) columns,
- (unsigned long) rows);
+ (void) FormatLocaleString(message,MaxTextExtent,
+ "<svg width=\"%.20g\" height=\"%.20g\">\n",(double) columns,(double) rows);
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,"<g>\n");
+ (void) FormatLocaleString(message,MaxTextExtent,"<g>\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
"<path style=\"fill:#00000000;stroke:#00000000;");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
"stroke-width:0;stroke-antialiasing:false\" d=\"\n");
(void) ConcatenateString(&path,message);
(void) ResetMagickMemory(point,0,sizeof(point));
*/
for (i=0; i < 3; i++)
{
- size_t
+ size_t
xx,
yy;
xx=ReadPropertyMSBLong(&blob,&length);
x=(ssize_t) xx;
if (xx > 2147483647)
- x=(ssize_t) xx-4294967295-1;
+ x=(ssize_t) xx-4294967295U-1;
y=(ssize_t) yy;
if (yy > 2147483647)
- y=(ssize_t) yy-4294967295-1;
+ y=(ssize_t) yy-4294967295U-1;
point[i].x=(double) x*columns/4096/4096;
point[i].y=(double) y*rows/4096/4096;
}
if (in_subpath == MagickFalse)
{
- (void) FormatMagickString(message,MaxTextExtent,"M %g,%g\n",
+ (void) FormatLocaleString(message,MaxTextExtent,"M %g,%g\n",
point[1].x,point[1].y);
for (i=0; i < 3; i++)
{
{
if ((last[1].x == last[2].x) && (last[1].y == last[2].y) &&
(point[0].x == point[1].x) && (point[0].y == point[1].y))
- (void) FormatMagickString(message,MaxTextExtent,"L %g,%g\n",
+ (void) FormatLocaleString(message,MaxTextExtent,"L %g,%g\n",
point[1].x,point[1].y);
else
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
"C %g,%g %g,%g %g,%g\n",last[2].x,last[2].y,
point[0].x,point[0].y,point[1].x,point[1].y);
for (i=0; i < 3; i++)
{
if ((last[1].x == last[2].x) && (last[1].y == last[2].y) &&
(first[0].x == first[1].x) && (first[0].y == first[1].y))
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
"L %g,%g Z\n",first[1].x,first[1].y);
else
{
- (void) FormatMagickString(message,MaxTextExtent,
+ (void) FormatLocaleString(message,MaxTextExtent,
"C %g,%g %g,%g %g,%g Z\n",last[2].x,
last[2].y,first[0].x,first[0].y,first[1].x,first[1].y);
(void) ConcatenateString(&path,message);
/*
Return an empty SVG image if the path does not have knots.
*/
- (void) FormatMagickString(message,MaxTextExtent,"\"/>\n");
+ (void) FormatLocaleString(message,MaxTextExtent,"\"/>\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,"</g>\n");
+ (void) FormatLocaleString(message,MaxTextExtent,"</g>\n");
(void) ConcatenateString(&path,message);
- (void) FormatMagickString(message,MaxTextExtent,"</svg>\n");
+ (void) FormatLocaleString(message,MaxTextExtent,"</svg>\n");
(void) ConcatenateString(&path,message);
message=DestroyString(message);
return(path);
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) &&
- (LocaleNCompare("fx:",property,3) != 0))
+ 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);
if (LocaleNCompare("fx:",property,3) == 0)
{
fx_info=AcquireFxInfo(image,property+3);
- status=FxEvaluateExpression(fx_info,&alpha,exception);
+ status=FxEvaluateChannelExpression(fx_info,DefaultChannels,0,0,&alpha,
+ exception);
fx_info=DestroyFxInfo(fx_info);
if (status != MagickFalse)
{
char
value[MaxTextExtent];
- (void) FormatMagickString(value,MaxTextExtent,"%g",(double)
- alpha);
+ (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
+ 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)
+ (void) FormatLocaleString(value,MaxTextExtent,"%s",
+ CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
image->colorspace));
LocaleLower(value);
if (image->matte != MagickFalse)
colorspace=image->colorspace;
if (IsGrayImage(image,&image->exception) != MagickFalse)
colorspace=GRAYColorspace;
- (void) FormatMagickString(value,MaxTextExtent,"%s",
- MagickOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
+ (void) FormatLocaleString(value,MaxTextExtent,"%s",
+ CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
colorspace));
break;
}
+ if (LocaleNCompare("copyright",property,9) == 0)
+ {
+ (void) CopyMagickString(value,GetMagickCopyright(),MaxTextExtent);
+ break;
+ }
break;
}
case 'd':
{
if (LocaleNCompare("depth",property,5) == 0)
{
- (void) FormatMagickString(value,MaxTextExtent,"%lu",(unsigned long)
+ (void) FormatLocaleString(value,MaxTextExtent,"%.20g",(double)
image->depth);
break;
}
{
if (LocaleNCompare("group",property,5) == 0)
{
- (void) FormatMagickString(value,MaxTextExtent,"0x%lx",
+ (void) FormatLocaleString(value,MaxTextExtent,"0x%lx",
(unsigned long) image_info->group);
break;
}
{
if (LocaleNCompare("height",property,6) == 0)
{
- (void) FormatMagickString(value,MaxTextExtent,"%lu",
- image->magick_rows != 0 ? image->magick_rows : 256UL);
+ (void) FormatLocaleString(value,MaxTextExtent,"%.20g",
+ image->magick_rows != 0 ? (double) image->magick_rows : 256.0);
break;
}
break;
(void) GetImageChannelKurtosis(image,image_info->channel,&kurtosis,
&skewness,&image->exception);
- (void) FormatMagickString(value,MaxTextExtent,"%.*g",
+ (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
GetMagickPrecision(),kurtosis);
break;
}
(void) GetImageChannelRange(image,image_info->channel,&minimum,
&maximum,&image->exception);
- (void) FormatMagickString(value,MaxTextExtent,"%g",maximum);
+ (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
+ GetMagickPrecision(),maximum);
break;
}
if (LocaleNCompare("mean",property,4) == 0)
(void) GetImageChannelMean(image,image_info->channel,&mean,
&standard_deviation,&image->exception);
- (void) FormatMagickString(value,MaxTextExtent,"%.*g",
+ (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
GetMagickPrecision(),mean);
break;
}
(void) GetImageChannelRange(image,image_info->channel,&minimum,
&maximum,&image->exception);
- (void) FormatMagickString(value,MaxTextExtent,"%g",minimum);
+ (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
+ GetMagickPrecision(),minimum);
break;
}
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,"%lu",(unsigned long)
- page);
+ (void) FormatLocaleString(value,MaxTextExtent,"%.20g",(double)
+ GetImageIndexInList(image)+1);
break;
}
break;
format[MaxTextExtent];
(void) FormatMagickSize(GetBlobSize(image),MagickFalse,format);
- (void) FormatMagickString(value,MaxTextExtent,"%sB",format);
+ (void) FormatLocaleString(value,MaxTextExtent,"%sB",format);
break;
}
if (LocaleNCompare("scenes",property,6) == 0)
{
- (void) FormatMagickString(value,MaxTextExtent,"%lu",
- (unsigned long) GetImageListLength(image));
+ (void) FormatLocaleString(value,MaxTextExtent,"%.20g",(double)
+ GetImageListLength(image));
break;
}
if (LocaleNCompare("scene",property,5) == 0)
{
- (void) FormatMagickString(value,MaxTextExtent,"%lu",(unsigned long)
+ (void) FormatLocaleString(value,MaxTextExtent,"%.20g",(double)
image->scene);
if (image_info->number_scenes != 0)
- (void) FormatMagickString(value,MaxTextExtent,"%lu",
- (unsigned long) image_info->scene);
+ (void) FormatLocaleString(value,MaxTextExtent,"%.20g",(double)
+ image_info->scene);
break;
}
if (LocaleNCompare("skewness",property,8) == 0)
(void) GetImageChannelKurtosis(image,image_info->channel,&kurtosis,
&skewness,&image->exception);
- (void) FormatMagickString(value,MaxTextExtent,"%.*g",
+ (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
GetMagickPrecision(),skewness);
break;
}
(void) GetImageChannelMean(image,image_info->channel,&mean,
&standard_deviation,&image->exception);
- (void) FormatMagickString(value,MaxTextExtent,"%.*g",
+ (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
GetMagickPrecision(),standard_deviation);
break;
}
}
break;
}
+ case 'v':
+ {
+ if (LocaleNCompare("version",property,7) == 0)
+ {
+ (void) CopyMagickString(value,GetMagickVersion((size_t *) NULL),
+ MaxTextExtent);
+ break;
+ }
+ break;
+ }
case 'w':
{
if (LocaleNCompare("width",property,5) == 0)
{
- (void) FormatMagickString(value,MaxTextExtent,"%lu",(unsigned long)
+ (void) FormatLocaleString(value,MaxTextExtent,"%.20g",(double)
(image->magick_columns != 0 ? image->magick_columns : 256));
break;
}
{
if (LocaleNCompare("xresolution",property,11) == 0)
{
- (void) FormatMagickString(value,MaxTextExtent,"%g",
+ (void) FormatLocaleString(value,MaxTextExtent,"%g",
image->x_resolution);
break;
}
{
if (LocaleNCompare("yresolution",property,11) == 0)
{
- (void) FormatMagickString(value,MaxTextExtent,"%g",
+ (void) FormatLocaleString(value,MaxTextExtent,"%g",
image->y_resolution);
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;
/*
File size.
*/
- (void) FormatMagickString(format,MaxTextExtent,"%lu",(unsigned long)
+ (void) FormatLocaleString(format,MaxTextExtent,"%.20g",(double)
image->extent);
if (image->extent != (MagickSizeType) ((size_t) image->extent))
(void) FormatMagickSize(image->extent,MagickFalse,format);
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,"%lux%lu%+ld%+ld",(unsigned long)
- image->page.width,(unsigned long) image->page.height,(long)
- image->page.x,(long) image->page.y);
+ q+=FormatLocaleString(q,extent,"%.20gx%.20g%+.20g%+.20g",(double)
+ image->page.width,(double) image->page.height,(double) image->page.x,
+ (double) image->page.y);
break;
}
case 'h':
/*
Image height.
*/
- q+=FormatMagickString(q,extent,"%lu",(unsigned long)
- (image->rows != 0 ? image->rows : image->magick_rows));
+ q+=FormatLocaleString(q,extent,"%.20g",(double) (image->rows != 0 ?
+ image->rows : image->magick_rows));
break;
}
case 'i':
/*
Number of unique colors.
*/
- q+=FormatMagickString(q,extent,"%lu",(unsigned long)
- GetNumberColors(image,(FILE *) NULL,&image->exception));
+ q+=FormatLocaleString(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,"%lu",(unsigned long)
- GetImageListLength(image));
+ q+=FormatLocaleString(q,extent,"%.20g",(double)
+ 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,"%lu",(unsigned long) page);
+ q+=FormatLocaleString(q,extent,"%.20g",(double)
+ GetImageIndexInList(image));
break;
}
case 'q':
/*
Image depth.
*/
- q+=FormatMagickString(q,extent,"%lu",(unsigned long) image->depth);
+ q+=FormatLocaleString(q,extent,"%.20g",(double)
+ MAGICKCORE_QUANTUM_DEPTH);
break;
}
case 'r':
colorspace=image->colorspace;
if (IsGrayImage(image,&image->exception) != MagickFalse)
colorspace=GRAYColorspace;
- q+=FormatMagickString(q,extent,"%s%s%s",MagickOptionToMnemonic(
+ q+=FormatLocaleString(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)
- q+=FormatMagickString(q,extent,"%lu",(unsigned long) image->scene);
+ if (image_info->number_scenes == 0)
+ q+=FormatLocaleString(q,extent,"%.20g",(double) image->scene);
else
- q+=FormatMagickString(q,extent,"%lu",(unsigned long)
- text_info->scene);
+ q+=FormatLocaleString(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,"%lu",(unsigned long)
- (image->columns != 0 ? image->columns : image->magick_columns));
+ q+=FormatLocaleString(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)
+ q+=FormatLocaleString(q,extent,"%g %s",image->x_resolution,
+ CommandOptionToMnemonic(MagickResolutionOptions,(ssize_t)
image->units));
break;
}
/*
Image vertical resolution.
*/
- q+=FormatMagickString(q,extent,"%g %s",image->y_resolution,
- MagickOptionToMnemonic(MagickResolutionOptions,(ssize_t)
+ q+=FormatLocaleString(q,extent,"%g %s",image->y_resolution,
+ CommandOptionToMnemonic(MagickResolutionOptions,(ssize_t)
image->units));
break;
}
/*
Image depth.
*/
- q+=FormatMagickString(q,extent,"%lu",(unsigned long) image->depth);
+ q+=FormatLocaleString(q,extent,"%.20g",(double) image->depth);
break;
}
case 'A':
/*
Image alpha channel.
*/
- q+=FormatMagickString(q,extent,"%s",MagickOptionToMnemonic(
+ q+=FormatLocaleString(q,extent,"%s",CommandOptionToMnemonic(
MagickBooleanOptions,(ssize_t) image->matte));
break;
}
/*
Image compression method.
*/
- q+=FormatMagickString(q,extent,"%s",MagickOptionToMnemonic(
+ q+=FormatLocaleString(q,extent,"%s",CommandOptionToMnemonic(
MagickCompressOptions,(ssize_t) image->compression));
break;
}
/*
Image dispose method.
*/
- q+=FormatMagickString(q,extent,"%s",MagickOptionToMnemonic(
+ q+=FormatLocaleString(q,extent,"%s",CommandOptionToMnemonic(
MagickDisposeOptions,(ssize_t) image->dispose));
break;
}
case 'G':
{
- q+=FormatMagickString(q,extent,"%lux%lu",(unsigned long)
- image->magick_columns,(unsigned long) image->magick_rows);
+ q+=FormatLocaleString(q,extent,"%.20gx%.20g",(double)
+ image->magick_columns,(double) image->magick_rows);
break;
}
case 'H':
{
- q+=FormatMagickString(q,extent,"%lu",(unsigned long)
- image->page.height);
+ q+=FormatLocaleString(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+=FormatLocaleString(q,extent,"%+ld%+ld",(long) image->page.x,(long)
+ image->page.y);
break;
}
case 'P':
{
- q+=FormatMagickString(q,extent,"%lux%lu",(unsigned long)
- image->page.width,(unsigned long) image->page.height);
+ q+=FormatLocaleString(q,extent,"%.20gx%.20g",(double) image->page.width,
+ (double) image->page.height);
break;
}
case 'Q':
{
- q+=FormatMagickString(q,extent,"%lu",(unsigned long) image->quality);
+ q+=FormatLocaleString(q,extent,"%.20g",(double) image->quality);
break;
}
case 'S':
/*
Image scenes.
*/
- if (text_info->number_scenes == 0)
+ if (image_info->number_scenes == 0)
q+=CopyMagickString(q,"2147483647",extent);
else
- q+=FormatMagickString(q,extent,"%lu",(unsigned long)
- (text_info->scene+text_info->number_scenes));
+ q+=FormatLocaleString(q,extent,"%.20g",(double) (image_info->scene+
+ image_info->number_scenes));
break;
}
case 'T':
{
- q+=FormatMagickString(q,extent,"%lu",(unsigned long) image->delay);
+ q+=FormatLocaleString(q,extent,"%.20g",(double) image->delay);
break;
}
case 'W':
{
- q+=FormatMagickString(q,extent,"%lu",(unsigned long) image->page.width);
+ q+=FormatLocaleString(q,extent,"%.20g",(double) image->page.width);
break;
}
case 'X':
{
- q+=FormatMagickString(q,extent,"%+ld",(long) image->page.x);
+ q+=FormatLocaleString(q,extent,"%+.20g",(double) image->page.x);
break;
}
case 'Y':
{
- q+=FormatMagickString(q,extent,"%+ld",(long) image->page.y);
+ q+=FormatLocaleString(q,extent,"%+.20g",(double) image->page.y);
break;
}
case 'Z':
/*
Unique filename.
*/
- (void) CopyMagickString(filename,text_info->zero,extent);
+ (void) CopyMagickString(filename,image_info->zero,extent);
q+=CopyMagickString(q,filename,extent);
break;
}
break;
q=interpret_text+strlen(interpret_text);
}
- q+=FormatMagickString(q,extent,"%s=%s\n",key,value);
+ q+=FormatLocaleString(q,extent,"%s=%s\n",key,value);
}
}
key=GetNextImageProperty(image);
}
}
- value=GetMagickProperty(text_info,image,pattern);
+ value=GetMagickProperty(image_info,image,pattern);
if (value != (const char *) NULL)
{
length=strlen(value);
Image bounding box.
*/
page=GetImageBoundingBox(image,&image->exception);
- q+=FormatMagickString(q,MaxTextExtent,"%lux%lu%+ld%+ld",(unsigned long)
- page.width,(unsigned long) page.height,(long) page.x,(long) page.y);
+ q+=FormatLocaleString(q,MaxTextExtent,"%.20gx%.20g%+.20g%+.20g",
+ (double) page.width,(double) page.height,(double) page.x,(double)
+ page.y);
break;
}
case '#':
}
}
*q='\0';
- text_info=DestroyImageInfo(text_info);
if (text != (const char *) embed_text)
text=DestroyString(text);
(void) SubstituteString(&interpret_text,"<","<");
MagickExport MagickBooleanType SetImageProperty(Image *image,
const char *property,const char *value)
{
+ ExceptionInfo
+ *exception;
+
MagickBooleanType
status;
if ((value == (const char *) NULL) || (*value == '\0'))
return(DeleteImageProperty(image,property));
status=MagickTrue;
+ exception=(&image->exception);
switch (*property)
{
case 'B':
case 'b':
{
+ if (LocaleCompare(property,"background") == 0)
+ {
+ (void) QueryColorDatabase(value,&image->background_color,exception);
+ break;
+ }
if (LocaleCompare(property,"bias") == 0)
{
image->bias=SiPrefixToDouble(value,QuantumRange);
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;
if ((flags & LessValue) != 0)
{
if (image->delay < (size_t) floor(geometry_info.rho+0.5))
- image->ticks_per_second=(ssize_t) floor(geometry_info.sigma+0.5);
+ image->ticks_per_second=(ssize_t)
+ floor(geometry_info.sigma+0.5);
}
else
image->delay=(size_t) floor(geometry_info.rho+0.5);
image->ticks_per_second=(ssize_t) floor(geometry_info.sigma+0.5);
break;
}
+ if (LocaleCompare(property,"density") == 0)
+ {
+ GeometryInfo
+ geometry_info;
+
+ flags=ParseGeometry(value,&geometry_info);
+ image->x_resolution=geometry_info.rho;
+ image->y_resolution=geometry_info.sigma;
+ if ((flags & SigmaValue) == 0)
+ image->y_resolution=image->x_resolution;
+ }
if (LocaleCompare(property,"depth") == 0)
{
image->depth=StringToUnsignedLong(value);
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;
image_info=AcquireImageInfo();
(void) CopyMagickString(image_info->filename,value,MaxTextExtent);
- (void) SetImageInfo(image_info,1,&image->exception);
- profile=FileToStringInfo(image_info->filename,~0UL,&image->exception);
+ (void) SetImageInfo(image_info,1,exception);
+ profile=FileToStringInfo(image_info->filename,~0UL,exception);
if (profile != (StringInfo *) NULL)
status=SetImageProfile(image,image_info->magick,profile);
image_info=DestroyImageInfo(image_info);
ssize_t
rendering_intent;
- rendering_intent=ParseMagickOption(MagickIntentOptions,MagickFalse,
+ rendering_intent=ParseCommandOption(MagickIntentOptions,MagickFalse,
value);
if (rendering_intent < 0)
break;
ConstantString(property),ConstantString(value));
break;
}
+ case 'U':
+ case 'u':
+ {
+ if (LocaleCompare(property,"units") == 0)
+ {
+ ssize_t
+ units;
+
+ units=ParseCommandOption(MagickResolutionOptions,MagickFalse,value);
+ if (units < 0)
+ break;
+ image->units=(ResolutionType) units;
+ break;
+ }
+ status=AddValueToSplayTree((SplayTreeInfo *) image->properties,
+ ConstantString(property),ConstantString(value));
+ break;
+ }
default:
{
status=AddValueToSplayTree((SplayTreeInfo *) image->properties,