]> granicus.if.org Git - imagemagick/commitdiff
https://github.com/ImageMagick/ImageMagick/issues/351
authorCristy <urban-warrior@imagemagick.org>
Sat, 14 Jan 2017 16:33:00 +0000 (11:33 -0500)
committerCristy <urban-warrior@imagemagick.org>
Sat, 14 Jan 2017 16:33:00 +0000 (11:33 -0500)
MagickCore/constitute.c
MagickCore/option.c
MagickCore/profile.c
MagickCore/property.c

index 3a58f020ed17257b74cc1f4ad55a8ff3fcd58263..d3f93fe6f07f5841a881937df9e5993dbf3fcffa 100644 (file)
@@ -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");
       }
index c98e95ef8006ae0e8980187e0e87c7df7caf6695..eb7d4f16938ccf4bcba1623bae9ea273e3ee2e6c 100644 (file)
@@ -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[] =
index 66e742fc9b7bfaef2d1c0c4a41f4d4800bf6afe8..dba8b05e16d86b2524fe973af26427eaab4b65c6 100644 (file)
@@ -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);
 }
 
index e8fc80bd7bfb80e818ea44156b34038c3dc3884d..3351fe7a5a6e88f904e1f4322232b69e9b7e1175 100644 (file)
@@ -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);