From: Cristy Date: Sat, 14 Jan 2017 16:33:00 +0000 (-0500) Subject: https://github.com/ImageMagick/ImageMagick/issues/351 X-Git-Tag: 7.0.4-4~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=17221fcfd6d0c90e52c6bf5abd0987565881a9b9;p=imagemagick https://github.com/ImageMagick/ImageMagick/issues/351 --- diff --git a/MagickCore/constitute.c b/MagickCore/constitute.c index 3a58f020e..d3f93fe6f 100644 --- a/MagickCore/constitute.c +++ b/MagickCore/constitute.c @@ -632,6 +632,8 @@ MagickExport Image *ReadImage(const ImageInfo *image_info, flags=ParseGeometry(value,&geometry_info); if (geometry_info.sigma != 0) next->resolution.x=geometry_info.rho/geometry_info.sigma; + if (strchr(value,',') != (char *) NULL) + next->resolution.x=geometry_info.rho+geometry_info.sigma/1000.0; (void) DeleteImageProperty(next,"exif:XResolution"); } value=GetImageProperty(next,"exif:YResolution",exception); @@ -642,6 +644,8 @@ MagickExport Image *ReadImage(const ImageInfo *image_info, flags=ParseGeometry(value,&geometry_info); if (geometry_info.sigma != 0) next->resolution.y=geometry_info.rho/geometry_info.sigma; + if (strchr(value,',') != (char *) NULL) + next->resolution.y=geometry_info.rho+geometry_info.sigma/1000.0; (void) DeleteImageProperty(next,"exif:YResolution"); } value=GetImageProperty(next,"tiff:ResolutionUnit",exception); @@ -649,7 +653,8 @@ MagickExport Image *ReadImage(const ImageInfo *image_info, value=GetImageProperty(next,"exif:ResolutionUnit",exception); if (value != (char *) NULL) { - next->units=(ResolutionType) (StringToLong(value)-1); + next->units=(ResolutionType) ParseCommandOption(MagickResolutionOptions, + MagickFalse,value); (void) DeleteImageProperty(next,"exif:ResolutionUnit"); (void) DeleteImageProperty(next,"tiff:ResolutionUnit"); } diff --git a/MagickCore/option.c b/MagickCore/option.c index c98e95ef8..eb7d4f169 100644 --- a/MagickCore/option.c +++ b/MagickCore/option.c @@ -1633,6 +1633,9 @@ static const OptionInfo { "Undefined", UndefinedResolution, UndefinedOptionFlag, MagickTrue }, { "PixelsPerInch", PixelsPerInchResolution, UndefinedOptionFlag, MagickFalse }, { "PixelsPerCentimeter", PixelsPerCentimeterResolution, UndefinedOptionFlag, MagickFalse }, + { "1", UndefinedResolution, UndefinedOptionFlag, MagickFalse }, + { "2", PixelsPerInchResolution, UndefinedOptionFlag, MagickFalse }, + { "3", PixelsPerCentimeterResolution, UndefinedOptionFlag, MagickFalse }, { (char *) NULL, UndefinedResolution, UndefinedOptionFlag, MagickFalse } }, ResourceOptions[] = diff --git a/MagickCore/profile.c b/MagickCore/profile.c index 66e742fc9..dba8b05e1 100644 --- a/MagickCore/profile.c +++ b/MagickCore/profile.c @@ -1646,7 +1646,8 @@ static MagickBooleanType SetImageProfileInternal(Image *image,const char *name, ExceptionInfo *exception) { char - key[MagickPathExtent]; + key[MagickPathExtent], + property[MagickPathExtent]; MagickBooleanType status; @@ -1670,6 +1671,11 @@ static MagickBooleanType SetImageProfileInternal(Image *image,const char *name, if (recursive == MagickFalse) WriteTo8BimProfile(image,name,profile); } + /* + Inject profile into image properties. + */ + (void) FormatLocaleString(property,MagickPathExtent,"%s:*",name); + (void) GetImageProperty(image,property,exception); return(status); } diff --git a/MagickCore/property.c b/MagickCore/property.c index e8fc80bd7..3351fe7a5 100644 --- a/MagickCore/property.c +++ b/MagickCore/property.c @@ -704,8 +704,8 @@ static MagickBooleanType Get8BIMProperty(const Image *image,const char *key, info+=count; length-=MagickMin(count,(ssize_t) length); if ((id <= 1999) || (id >= 2999)) - (void) SetImageProperty((Image *) image,key,(const char *) - attribute,exception); + (void) SetImageProperty((Image *) image,key,(const char *) attribute, + exception); else { char @@ -1766,6 +1766,9 @@ static MagickBooleanType GetXMPProperty(const Image *image,const char *property) description=GetXMLTreeChild(rdf,"rdf:Description"); while (description != (XMLTreeInfo *) NULL) { + char + *namespace; + node=GetXMLTreeChild(description,(const char *) NULL); while (node != (XMLTreeInfo *) NULL) { @@ -1773,14 +1776,22 @@ static MagickBooleanType GetXMPProperty(const Image *image,const char *property) content=GetXMLTreeContent(node); if ((child == (XMLTreeInfo *) NULL) && (SkipXMPValue(content) == MagickFalse)) - (void) AddValueToSplayTree((SplayTreeInfo *) image->properties, - ConstantString(GetXMLTreeTag(node)),ConstantString(content)); + { + namespace=ConstantString(GetXMLTreeTag(node)); + (void) SubstituteString(&namespace,"exif:","xmp:"); + (void) AddValueToSplayTree((SplayTreeInfo *) image->properties, + namespace,ConstantString(content)); + } while (child != (XMLTreeInfo *) NULL) { content=GetXMLTreeContent(child); if (SkipXMPValue(content) == MagickFalse) - (void) AddValueToSplayTree((SplayTreeInfo *) image->properties, - ConstantString(GetXMLTreeTag(child)),ConstantString(content)); + { + namespace=ConstantString(GetXMLTreeTag(node)); + (void) SubstituteString(&namespace,"exif:","xmp:"); + (void) AddValueToSplayTree((SplayTreeInfo *) image->properties, + namespace,ConstantString(content)); + } child=GetXMLTreeSibling(child); } node=GetXMLTreeSibling(node);