From: dirk Date: Sat, 19 Oct 2013 15:07:40 +0000 (+0000) Subject: Added profile:icc/icm and profiles to GetMagickProperty. X-Git-Tag: 7.0.1-0~3207 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6015d44aec10284327bab572c3fbab1be4ae143a;p=imagemagick Added profile:icc/icm and profiles to GetMagickProperty. --- diff --git a/MagickCore/property.c b/MagickCore/property.c index 337b7769a..66d8d3af8 100644 --- a/MagickCore/property.c +++ b/MagickCore/property.c @@ -36,7 +36,8 @@ % % */ - + + /* Include declarations. */ @@ -84,7 +85,19 @@ #include "MagickCore/version.h" #include "MagickCore/xml-tree.h" #include "MagickCore/xml-tree-private.h" - +#if defined(MAGICKCORE_LCMS_DELEGATE) +#if defined(MAGICKCORE_HAVE_LCMS_LCMS2_H) +#include +#elif defined(MAGICKCORE_HAVE_LCMS2_H) +#include "lcms2.h" +#elif defined(MAGICKCORE_HAVE_LCMS_LCMS_H) +#include +#else +#include "lcms.h" +#endif +#endif + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -177,7 +190,8 @@ MagickExport MagickBooleanType CloneImageProperties(Image *image, } return(MagickTrue); } - + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -229,7 +243,8 @@ MagickExport MagickBooleanType DefineImageProperty(Image *image, *p='\0'; return(SetImageProperty(image,key,value,exception)); } - + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -266,7 +281,8 @@ MagickExport MagickBooleanType DeleteImageProperty(Image *image, return(MagickFalse); return(DeleteNodeFromSplayTree((SplayTreeInfo *) image->properties,property)); } - + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -301,7 +317,8 @@ MagickExport void DestroyImageProperties(Image *image) image->properties=(void *) DestroySplayTree((SplayTreeInfo *) image->properties); } - + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -358,7 +375,8 @@ MagickExport MagickBooleanType FormatImageProperty(Image *image, exception=DestroyExceptionInfo(exception); return(status); } - + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -2085,7 +2103,8 @@ MagickExport const char *GetImageProperty(const Image *image, } return(p); } - + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -2719,18 +2738,52 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info, } case 'p': { - if (LocaleCompare("profile",property) == 0) +#if defined(MAGICKCORE_LCMS_DELEGATE) + if (LocaleCompare("profile:icc",property) == 0 || + LocaleCompare("profile:icm",property) == 0) + { + const StringInfo + *profile; + + cmsHPROFILE + icc_profile; + + profile=GetImageProfile(image,property+8); + if (profile == (StringInfo *) NULL) + break; + + icc_profile=cmsOpenProfileFromMem(GetStringInfoDatum(profile), + (cmsUInt32Number) GetStringInfoLength(profile)); + if (icc_profile != (cmsHPROFILE *) NULL) + { +#if defined(LCMS_VERSION) && (LCMS_VERSION < 2000) + string=cmsTakeProductName(icc_profile); +#else + (void) cmsGetProfileInfoASCII(icc_profile,cmsInfoDescription, + "en","US",value,MaxTextExtent); +#endif + (void) cmsCloseProfile(icc_profile); + } + } +#endif + if (LocaleCompare("profiles",property) == 0) { const char *name; ResetImageProfileIterator(image); name=GetNextImageProfile(image); - while (name != (char *) NULL) - { - (void) FormatLocaleString(value,MaxTextExtent,"%s %s",value,name); - name=GetNextImageProfile(image); - } + if (name != (char *) NULL) + { + (void) CopyMagickString(value,name,MaxTextExtent); + name=GetNextImageProfile(image); + while (name != (char *) NULL) + { + ConcatenateMagickString(value,",",MaxTextExtent); + ConcatenateMagickString(value,name,MaxTextExtent); + name=GetNextImageProfile(image); + } + } break; } break; @@ -2914,8 +2967,9 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info, } return((char *)NULL); } -#undef WarnNoImageRteurn - +#undef WarnNoImageReturn + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -2949,7 +3003,8 @@ MagickExport char *GetNextImageProperty(const Image *image) return((char *) NULL); return((char *) GetNextKeyInSplayTree((SplayTreeInfo *) image->properties)); } - + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -3500,7 +3555,8 @@ PropertyLookupFailure: *q='\0'; return(interpret_text); } - + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -3546,7 +3602,8 @@ MagickExport char *RemoveImageProperty(Image *image, property); return(value); } - + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -3582,7 +3639,8 @@ MagickExport void ResetImagePropertyIterator(const Image *image) return; ResetSplayTreeIterator((SplayTreeInfo *) image->properties); } - + + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %